Команда розробників PHP учора оголосила про випуск PHP 8:
PHP 8.0 - це основне оновлення мови PHP.
Він містить багато нових функцій та оптимізацій, включаючи іменовані аргументи, типи об’єднань, атрибути, просування властивостей конструктора, вираз збігу, nullsafe-оператор, JIT, а також вдосконалення в системі типів, обробку помилок та узгодженість.
Ось список основних нових функцій:
Ось деякі основні моменти з анонсу оновлення:
/ PHP 7
htmlspecialchars ($ рядок, ENT_COMPAT | ENT_HTML401, 'UTF-8', помилковий);// PHP 8
// Вкажіть лише обов’язкові параметри, пропускаючи необов’язкові.
// Аргументи не залежать від запиту та самодокументуються.
htmlspecialchars ($ рядок, double_encode: false);
Замість анотацій PHPDoc тепер ви можете використовувати структуровані метадані з власним синтаксисом PHP.
// PHP 7 class PostsController { /** * @Route("/api/posts/{id}", methods={"GET"}) */ public function get($id) { /* ... */ } } // PHP 8 class PostsController { #[Route("/api/posts/{id}", methods: ["GET"])] public function get($id) { /* ... */ } }
Менше типового коду для визначення та ініціалізації властивостей.
// PHP 7 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 8 class Point { public function __construct( public float $x = 0.0, public float $y = 0.0, public float $z = 0.0, ) {} }
Замість анотацій PHPDoc для комбінації типів ви можете використовувати декларації власного типу об’єднання, які перевіряються під час виконання.
// PHP 7 class Number { /** @var int|float */ private $number; /** * @param float|int $number */ public function __construct($number) { $this->number = $number; } } new Number('NaN'); // Ok // PHP 8 class Number { public function __construct( private int|float $number ) {} } new Number('NaN'); // TypeError
Замість умов нульової перевірки тепер ви можете використовувати ланцюжок викликів з новим безпечним оператором. Коли оцінка одного елемента в ланцюжку не вдається, виконання всього ланцюга переривається, і весь ланцюжок вважається нулем.
// PHP 7 $country = null; if ($session !== null) { $user = $session->user; if ($user !== null) { $address = $user->getAddress(); if ($address !== null) { $country = $address->country; } } } // PHP 8 $country = $session?->user?->getAddress()?->country
Новий збіг схожий на перемикач і має такі особливості:
// PHP 7
перемикач (8.0) {
справа '8.0':
$ result = "О ні!";
перерву;
випадок 8.0:
$ result = "Це я очікував";
перерву;
}
echo $ результат;
//> О ні!// PHP 8
echo match (8.0) {
'8.0' => "О ні!",
8.0 => "Це те, що я очікував",
};
//> Це те, що я очікував
Звичайно, це лише основні моменти. Щоб дізнатись усі деталі треба ознайомитись з офіційним повідомленням про реліз.