PHP — это популярный серверный язык сценариев, используемый для создания динамических веб-сайтов и веб-приложений. Он постоянно развивается, регулярно выпускаются новые версии для устранения ошибок и добавления новых функций.
PHP 7 был выпущен в декабре 2015 года и принес несколько значительных улучшений производительности, благодаря чему приложения PHP работали до 2 раз быстрее, чем в предыдущих версиях. Он также добавил новые функции, такие как объявления типа возвращаемого значения и оператор космического корабля.
С другой стороны, PHP 8 был выпущен в ноябре 2020 года и принес ряд новых функций, улучшений производительности и исправлений ошибок. Некоторые из наиболее заметных изменений в PHP 8 включают в себя:
- Компиляция JIT (Just-In-Time): PHP 8 представляет JIT, новый механизм компиляции, который значительно повышает производительность PHP-кода, компилируя его в машинный код во время выполнения.
- Типы объединения: В PHP 8 представлены типы объединения, которые позволяют указать, что параметр функции или метода может принимать несколько типов значений. Например:
function foo(int|float $value) { // $value может быть либо целым числом, либо числом с плавающей запятой }
- Именованные аргументы. В 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!');
- Выражения сопоставления: в PHP 8 представлены выражения сопоставления, новая структура управления, похожая на операторы switch, которая позволяет вам писать более краткий и читаемый код. Например:
$value = 3; $result = match ($value) { 1 => 'one', 2 => 'two', 3 => 'three', default => 'other', }; echo $result; // outputs 'three'
- Оператор Nullsafe: PHP 8 представляет оператор nullsafe, новое сокращение для проверки существования свойства или метода объекта перед доступом к нему. Например:
$person = new Person(); $email = $person?->getEmail(); // вернет null если $person is null
- Синтаксис атрибутов: PHP 8 представляет синтаксис атрибутов, новый способ аннотирования кода метаданными. Атрибуты можно использовать для предоставления дополнительной информации о классах, методах, свойствах и других элементах кода. Например:
#[Route('/users/{id}', methods: ['GET'])] class UserController { #[Route('/')] public function index() { // ... } }
- Продвижение свойств конструктора: 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) {} }
- Ковариантные возвраты и контравариантные параметры. В 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; } }
- Weak Maps: PHP 8 представляет Weak Maps, новый тип структуры данных, который позволяет вам хранить ссылки на объекты в карте, не предотвращая их сборку мусора. Например:
$map = new WeakMap(); $object = new stdClass(); $map[$object] = 42; unset($object); // $map is now empty
- Улучшенная обработка ошибок. В PHP 8 представлено несколько новых функций обработки ошибок и исключений, упрощающих написание надежного и поддерживаемого кода. Например, теперь можно перехватывать несколько типов исключений в одном блоке перехвата и создавать исключения из анонимных функций.
- Улучшенные строки: PHP 8 представляет несколько новых функций, связанных со строками, таких как улучшенные заполнители строкового формата и возможность использовать обратную косую черту в строковых литералах для указания управляющих символов, таких как \t и \n.
- Улучшенные массивы: PHP 8 представляет несколько новых функций, связанных с массивами, таких как возможность использования синтаксиса квадратных скобок для доступа к массивам и улучшенная поддержка деструктурирования массивов в переменные.
- Улучшенная система типов: PHP 8 представляет несколько новых функций системы типов, таких как улучшенное приведение типов и улучшенная поддержка обобщений и возвращаемых типов.
- Улучшенный Reflective API: PHP 8 представляет несколько новых функций Reflective API, таких как улучшенная поддержка доступа к информации о классах и методах, а также улучшенная поддержка использования Reflection API с расширениями PHP.
- Улучшенная стандартная библиотека: PHP 8 представляет несколько новых функций стандартной библиотеки, таких как улучшенная поддержка работы с потоками, сокетами и HTTP, а также улучшенная поддержка работы с датами, временем и часовыми поясами.
Это лишь некоторые из множества различий между PHP 7 и PHP 8. Независимо от того, являетесь ли вы опытным разработчиком PHP или только начинаете, в PHP 8 есть много новых интересных функций и улучшений, которыми вы можете начать пользоваться уже сегодня!