Найти тему
NEKARPOV

PHP 8 , что изменилось ?

Оглавление

PHP кардинально изменился еще с 7 версии , но теперь вышла 8 версия. Давайте обсудим ее, стоит ли переходить на нее или лучше остаться на 7 ?

8 версия этого чудесного слоника
8 версия этого чудесного слоника

JIT

Если поверить разработчикам , то PHP 7 стал еще быстрее чем предыдущая версия , но речь идет про 8 версию. По факту php стал медленнее , я не понимаю , что такого можно сделать чтоб язык стал медленнее . Но у JIT есть оправдание всем этим словам , с математическими функциями PHP теперь справляется в разы лучше.

Теперь можно делать такие безумные вещи, как ИИ на PHP.
Включить JIT можно в настройках opcache в файле php.ini .

Оператор выбора match

Появился аналог switch , match ! По сравнению с switch он ведет строгое сравнение. Давайте взгляним на код.

switch

$v = 1 ; switch ($v) {
case 0 :
$result = 'Foo' ;
break ;
case 1 :
$result = 'Bar' ;
break ;
case 2 :
$result = 'Baz' ;
break ;
} echo $result; // Bar

match

$v = 1 ; echo match ($v) {
0 => 'Foo' ,
1 => 'Bar' ,
2 => 'Baz' ,
};
// Bar

Как мы видим различия есть , причем приятные.

Constructor Property Promotion

Эта идея взята у языка близнеца Hack.

Вместо прописания полей класа, параметров конструктора, инициализации полей с помощью параметров, можно просто прописать поля параметрами конструктора:

class Point {
public function __construct (
public float $x = 0.0 ,
public float $y = 0.0 ,
public float $z = 0.0 ,
) {}
}

Это равно вот этому

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; }
}

С этим все понятно это основы ooп . Просто и со вкусом

Новые функции для работы со строками (str_contains, str_starts_with, str_ends_with)

Функция str_contains проверяет, содержит ли строка $haystack строку $needle

str_contains( "abc" , "a" ); // true

Тут без комментариев . Разберется даже тот кто только , что выучил функцию substr() .

Функция str_starts_with проверяет, начинается ли строка $haystack строкой $needle

$str = "beginningMiddleEnd" ;
var_dump(str_starts_with($str, "beg" )); // true

Тут тоже без комментариев.

Функция str_ends_with проверяет, кончается ли строка $haystack строкой $needle

$str = "beginningMiddleEnd" ;
var_dump(str_ends_with($str, "End" )); // true

Антоним предыдущей функции.

Использование ::class на объектах (Allow ::class on objects)

В предыдущих версиях надо было вот так гемороиться :

$object = new stdClass ;
$className = get_class($object); // "stdClass"

Теперь можно делать вот так:

$object = new stdClass ;
var_dump($object::class); // "stdClass"

Лаконично!

Возможность оставить запятую в конце списка параметров

Думаю название говорит само за себя . Это относится к:

  • Методам
  • Функциям
  • Стрелочным функциям
  • Анонимным функциям

Стабильная сортировка

Теперь все сортировки в php стабильные. Это означает, что равные элементы будут оставаться в том же порядке, что и были до сортировки.

Сюда входят sort, rsort, usort, asort, arsort, uasort, ksort, krsort, uksort, array_multisort, а также соответствующие методы в ArrayObject.

Итог

Я описал только те изменения которые я считаю значимыми и основными или с которыми я поработал . Лично для себя я сделал вывод , что переходить на 8 версию я не буду .

Подробнее можно почитать можно тут.

--------

Подписывайтесь на наш канал если хотите больше узнать про PHP и другие интересные вещи.

По разработке тем, лендингов, веб-приложении и другого. пишите в TG @nikitakarpoov .