Технические релизы
Взгляните на новые возможности PHP 8
Узнайте о новых блестящих функциях, которые предлагает вам PHP 8
История PHP
PHP не всегда был таким крутым, как сегодня. В те времена все было беспорядочно и совершенно не сравнивалось со строго типизированными языками. Но он был достаточно универсальным, чтобы стать доменом Интернета. Другие языки растут и угрожают домену PHP в разработке веб-приложений. Прямо перед PHP 7 многие люди считали, что PHP уже мертв.
Появляется PHP 7 и все меняет, значительно улучшая производительность. Представляем типы и другие функции. Пришло время PHP 8 развиваться и продолжать наследие PHP.
PHP 8 - это крупное обновление популярного динамического языка для серверного веб-программирования. Теперь доступен как производственный выпуск, включающий типы объединения, именованные аргументы, атрибуты и компиляцию Just-In-Time.
Какие новые функции shine в PHP 8?
Именованные аргументы
Теперь вы назвали аргументы, которые позволяют указать только необходимые аргументы и пропустить необязательные. Таким образом, аргументы также независимы от порядка и самодокументированы. Вот пример функции htmlspecialchars, у которой есть несколько необязательных аргументов:
# htmlspecialchars signature htmlspecialchars ( string$string
[, int$flags
= ENT_COMPAT | ENT_HTML401 [, string$encoding
= ini_get("default_charset") [, bool$double_encode
=TRUE
]]] ) : string # you can call it like this htmlspecialchars($string, double_encode: false);
Атрибуты
Используйте структурированные данные с собственным синтаксисом PHP вместо аннотаций PHPDoc. Это выглядит так:
class PostsController { #[Route(“/api/posts/{id}”, methods: [“GET”])] public function get($id) { /* … */ } }
Продвижение собственности конструктора
Более чистый способ определения и инициализации свойств. Более лаконично, с меньшим количеством кода, но все же читаемым, вы можете настроить свойства класса, передав переменные с тем же именем в качестве аргумента в конструктор. См. Пример ниже:
# use this class Point { public function __construct( public float $x = 0.0, public float $y = 0.0, public float $z = 0.0, ) {} } # instead of this class Point { public float $x; public float $y; public float $z; public function __construct( float $x = 0.0, float $y = 0.0, float $z = 0.0, ) { $this->x = $x; $this->y = $y; $this->z = $z; } }
Типы союзов
В PHP 7 вы можете комбинировать типы с PHPDoc. Теперь PHP 8 поддерживает это изначально. Я думаю, что эта новая функция очень полезна, потому что мне не нравится PHPDoc, потому что, на мой взгляд, это затрудняет чтение кода. Вот как это происходит:
public function __construct( private int|float $number ) {} } new Number('NaN'); // TypeError
Выражение соответствия
Добавлена возможность выражения соответствия, аналогичная переключателю, но с более безопасной семантикой и возможностью возвращать значения.
Это выражение, поэтому вы можете сохранить его в переменной или вернуть. Поддерживаются только однострочные выражения и нет необходимости в перерыве; утверждение. Я до сих пор не уверен в том, какое реальное применение я могу дать, но уверен, что когда-нибудь в будущем это пригодится:
echo match (8.0) { '8.0' => "Oh no!", 8.0 => "This is what I expected", }; //> This is what I expected
Оператор Nullsafe
Благодаря этому вам больше не нужно проверять каждый элемент в цепочке вызовов. Когда оценка одного элемента терпит неудачу, выполнение всей цепочки прерывается и оценивается как null. Теперь нет необходимости проверять, существует ли элемент цепочки:
$country = $session?->user?->getAddress()?->country;
Более разумная строка для сравнения чисел
При сравнении с числовой строкой PHP 8 использует сравнение чисел. В противном случае он преобразует число в строку и использует сравнение строк.
# PHP 7 0 == 'foobar' // true # PHP 8 0 == 'foobar' // false
Ошибки согласованного типа для внутренних функций
Большинство внутренних функций теперь выдают исключение Error, если проверка параметров завершается неудачно.
# PHP 7 strlen([]); // Warning: strlen() expects parameter 1 to be string, array given array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0 # PHP 8 strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0
И многое другое
Производительность и обработка ошибок также были улучшены, и результаты выглядят многообещающими. Я не могу дождаться, когда возьмусь за это.
PHP становится все лучше и лучше с возрастом. В PHP 8 есть гораздо больше, что мне нужно протестировать и выяснить, насколько он будет полезен в реальном мире. Но из того, что я уже вижу, это выглядит многообещающим и заставляет меня гордиться тем, что я работаю с PHP.
Все фрагменты взяты с https://www.php.net/releases/8.0/en.php