PHP 8
PHP разработка

Отличия PHP 7 от PHP 8 с примерами кода

Ключевые различия PHP 7 и PHP 8: JIT-компиляция, union-типы, именованные аргументы, match, nullsafe-оператор и атрибуты — с примерами кода.

Киселев Александр
Киселев Александр
Разработчик SiteVisor.Cloud9 фев 2023· 6 мин
Читать автора

PHP — это популярный серверный язык сценариев, используемый для создания динамических веб-сайтов и веб-приложений. Он постоянно развивается, регулярно выпускаются новые версии для устранения ошибок и добавления новых функций.PHP 7 был выпущен в декабре 2015 года и принес несколько значительных улучшений производительности, благодаря чему приложения PHP работали до 2 раз быстрее, чем в предыдущих версиях. Он также добавил новые функции, такие как объявления типа возвращаемого значения и оператор космического корабля.С другой стороны, PHP 8 был выпущен в ноябре 2020 года и принес ряд новых функций, улучшений производительности и исправлений ошибок. Некоторые из наиболее заметных изменений в PHP 8 включают в себя:

  1. Компиляция JIT (Just-In-Time): PHP 8 представляет JIT, новый механизм компиляции, который значительно повышает производительность PHP-кода, компилируя его в машинный код во время выполнения.

  2. Типы объединения: В PHP 8 представлены типы объединения, которые позволяют указать, что параметр функции или метода может принимать несколько типов значений. Например:

    function foo(int|float $value) {
        // $value может быть либо целым числом, либо числом с плавающей запятой
    }
  3. Именованные аргументы. В PHP 8 представлены именованные аргументы, которые позволяют передавать аргументы в функцию по имени, а не по положению. Например:

    function sendEmail(string $to, string $subject, string $message, bool $cc = false) {
        // ...
    }
    
    sendEmail($to: 'info@code-culture.ru', $subject: 'Important message', $message: 'Hello, Alex!');
  4. Выражения сопоставления: в PHP 8 представлены выражения сопоставления, новая структура управления, похожая на операторы switch, которая позволяет вам писать более краткий и читаемый код. Например:

    $value = 3;
    
    $result = match ($value) {
        1 => 'one',
        2 => 'two',
        3 => 'three',
        default => 'other',
    };
    
    echo $result; // outputs 'three'
  5. Оператор Nullsafe: PHP 8 представляет оператор nullsafe, новое сокращение для проверки существования свойства или метода объекта перед доступом к нему. Например:

    $person = new Person();
    
    $email = $person?->getEmail(); // вернет null если $person is null
  6. Синтаксис атрибутов: PHP 8 представляет синтаксис атрибутов, новый способ аннотирования кода метаданными. Атрибуты можно использовать для предоставления дополнительной информации о классах, методах, свойствах и других элементах кода. Например:

    #[Route('/users/{id}', methods: ['GET'])]
    class UserController {
        #[Route('/')]
        public function index() {
            // ...
        }
    }
  7. Продвижение свойств конструктора: PHP 8 представляет продвижение свойств конструктора, новый синтаксис, который позволяет вам объявлять и инициализировать свойства класса в одной строке кода. Например:

    //Вот так это было бы в PHP7
    class User {
       private string $name;
       public function __construct(string $name) {
       public function __construct(private string $name) {
           $this->name = $name
       }
    }
    
    //Вот так стало возможно в PHP8
    class User {
        public function __construct(private string $name) {}
    }
  8. Ковариантные возвраты и контравариантные параметры. В PHP 8 представлены ковариантные возвраты и контравариантные параметры, которые позволяют ослабить или ужесточить ограничения типов методов класса при их переопределении или реализации. Например:

    class Shape {
        public function area(): float {
            return 0.0;
        }
    }
    
    class Circle extends Shape {
        private float $radius;
        
        public function __construct(float $radius) {
            $this->radius = $radius;
        }
        
        public function area(): float {
            return pi() * $this->radius ** 2;
        }
    }
  9. Weak Maps: PHP 8 представляет Weak Maps, новый тип структуры данных, который позволяет вам хранить ссылки на объекты в карте, не предотвращая их сборку мусора. Например:

    $map = new WeakMap();
    
    $object = new stdClass();
    
    $map[$object] = 42;
    
    unset($object);
    
    // $map is now empty
  10. Улучшенная обработка ошибок. В PHP 8 представлено несколько новых функций обработки ошибок и исключений, упрощающих написание надежного и поддерживаемого кода. Например, теперь можно перехватывать несколько типов исключений в одном блоке перехвата и создавать исключения из анонимных функций.

  11. Улучшенные строки: PHP 8 представляет несколько новых функций, связанных со строками, таких как улучшенные заполнители строкового формата и возможность использовать обратную косую черту в строковых литералах для указания управляющих символов, таких как \t и \n.

  12. Улучшенные массивы: PHP 8 представляет несколько новых функций, связанных с массивами, таких как возможность использования синтаксиса квадратных скобок для доступа к массивам и улучшенная поддержка деструктурирования массивов в переменные.

  13. Улучшенная система типов: PHP 8 представляет несколько новых функций системы типов, таких как улучшенное приведение типов и улучшенная поддержка обобщений и возвращаемых типов.

  14. Улучшенный Reflective API: PHP 8 представляет несколько новых функций Reflective API, таких как улучшенная поддержка доступа к информации о классах и методах, а также улучшенная поддержка использования Reflection API с расширениями PHP.

  15. Улучшенная стандартная библиотека: PHP 8 представляет несколько новых функций стандартной библиотеки, таких как улучшенная поддержка работы с потоками, сокетами и HTTP, а также улучшенная поддержка работы с датами, временем и часовыми поясами.

Это лишь некоторые из множества различий между PHP 7 и PHP 8. Независимо от того, являетесь ли вы опытным разработчиком PHP или только начинаете, в PHP 8 есть много новых интересных функций и улучшений, которыми вы можете начать пользоваться уже сегодня!Узнать о последних обновлениях языка PHP можно на официальном сайте

Просмотров: 375

Комментарии (6)

d
den4ik19 июл 2026

nullsafe оператор реально экономит нервы, особенно когда работаешь с ORM и связями через несколько таблиц. $order?->user?->address?->city вместо портянки if-ов это то что надо. Единственное, что сначала непривычно — он останавливает всю цепочку на null, а не просто пропускает один вызов, это надо понимать

s
senior_lead9 июл 2026

спасибо за пример с именованными аргументами, у нас в проекте как раз функция с кучей необязательных bool-параметров, читать вызовы типа foo(true, false, null, true) было невозможно. Переписали часть на named args — стало сразу понятнее что где включаешь

О
Ольга26 апр 2026

как выше писали про Bitrix — у меня похожая история, только вылезло на строгой типизации в конструкторах D7-классов. Некоторые кастомные highload-блоки просто упали с TypeError после апгрейда. В сумме миграция заняла больше времени чем закладывали

s
spadmin14 янв 2026

а как в match быть с несколькими условиями в одной ветке? в switch писал case 1: case 2: — в match так же через запятую в одной строке значений? в статье не показали, пришлось гуглить отдельно

n
nginx_ninja13 сен 2025

по JIT все время пишут одно и то же, но на практике для типичного веб-приложения (запрос-ответ, много IO) он почти ничего не даёт, потому что узкое место не в вычислениях. Реальный прирост в PHP 8 в основном от оптимизаций в самом движке и в опкеше, а не от JIT. Для CLI-скриптов с тяжелой математикой — да, там заметно.

С
Сергей23 апр 2025

обновлял старый bitrix-проект с php7.4 на 8.1, самое больное было не union-типы а изменение поведения при передаче null в функции с не-nullable параметром скалярного типа — раньше молча приводило, теперь deprecated. Вылезло штук 40 warning'ов в логах после апдейта

Похожие материалы

Проверьте это на своём сайте

Бесплатные инструменты SiteVisor разбирают индексацию, robots.txt, редиректы и микроразметку — без регистрации и настройки.