Ответ
PHP 8 — это мажорное обновление, принесшее множество улучшений синтаксиса и производительности. Вот ключевые RFC, которые я активно использую в своей работе:
-
RFC: Named Arguments (wiki.php.net/rfc/named_params) Позволяет передавать аргументы в функцию по имени, улучшая читаемость, особенно для функций с множеством необязательных параметров.
// Было: непонятно, что такое false и true htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false); // Стало: ясная семантика htmlspecialchars($string, double_encode: false); -
RFC: Union Types (wiki.php.net/rfc/union_types_v2) Позволяет указывать несколько допустимых типов для параметров, возвращаемых значений и свойств.
public function process(int|string $id): User|false { // $id может быть integer или string } -
RFC: Match Expression (wiki.php.net/rfc/match_expression_v2) Более мощная и безопасная замена
switch. Возвращает значение, использует строгое сравнение (===).$statusCode = 404; $message = match ($statusCode) { 200, 201 => 'OK', 404 => 'Not Found', 500 => 'Server Error', default => 'Unknown Status Code', }; // $message = 'Not Found' -
RFC: Constructor Property Promotion (wiki.php.net/rfc/constructor_promotion) Сокращает шаблонный код для инициализации свойств через конструктор.
// Было: class User { private string $name; public function __construct(string $name) { $this->name = $name; } } // Стало: class User { public function __construct(private string $name) {} } -
RFC: Nullsafe Operator (wiki.php.net/rfc/nullsafe_operator) Позволяет безопасно строить цепочки вызовов, где любой элемент может быть
null.// Было: проверки на каждом уровне $country = null; if ($user !== null && $user->getAddress() !== null) { $country = $user->getAddress()->getCountry(); } // Стало: лаконично и безопасно $country = $user?->getAddress()?->getCountry(); -
RFC: Attributes (wiki.php.net/rfc/attributes_v2) Нативная замена док-блоков аннотаций для добавления метаданных к классам, методам и свойствам.
#[Route('/api/users', methods: ['GET'])] class UserController { #[Autowired] private UserService $service; }
Также важными являются JIT-компиляция (RFC для улучшения производительности), новые строковые функции (str_contains, str_starts_with), тип mixed и улучшения системы типов. Эти изменения сделали PHP более выразительным, строгим и производительным языком.