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