~5 минут, Опубликовано 09.02.2023

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

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

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