Новая версия PHP 7.4 порадовала немало разработчиков улучшением производительности, безопасностью кода и упрощением синтаксиса. Разберем несколько наиболее важных нововведений в версии PHP 7.4, а также устаревшие функции, от которых стоит отказаться.
Предварительная загрузка
Для улучшения производительности добавили предварительную загрузку, способную значительно улучшить этот показатель. Предварительная загрузка дает возможность грузить скрипты в память сервера, где они будут использованы для дальнейших запросов.
Управление предзагрузкой выполняется с помощью внесение в php.ini директивы opcache.preload, указывающей на файл, который будет скомпилирован и исполнен при включении сервера.
Стоит учитывать важный момент! Для повышения производительности сервер перезапускают, если источник preload файлов меняется.
Типизированные свойства в PHP 7.4
Значительные изменения произошли в PHP 7.4 в сторону более строгой типизации этого языка. Теперь для типизации доступно большинство функций, кроме void и callable.
Пример подсказки типом в переменных класса:
<?php
class A
{
public string $name;
public Foo $foo;
}
Стрелочные функции (короткие замыкания) в PHP 7.4
В версии PHP 7.4 добавлен синтаксис коротких замыканий, который способен значительно очистить PHP-код и сделать его более лаконичным.
Пример стрелочных функций, захватывающих переменные по значению автоматически:
<?php
$y = 1;
$fn1 = fn($x) => $x + $y;
// эквивалентно использованию $y по значению:
$fn2 = function ($x) use ($y) {
return $x + $y;
};
var_export($fn1(3));
?>
Примечания
Короткие замыкания могут получить доступ к родительской области, при этом ключевое слово use - не нужно. $this доступен так же, как и у обычных замыканий. Такие замыкания могут содержать в теле только одну строку, которая также является оператором возврата.
Слабые ссылки в PHP 7.4
В PHP 7.4 добавлена прямая поддержка слабых ссылок с помощью класса WeakReference. Он дает возможность разработчикам сохранить ссылку на объект, которая не будет преградой для уничтожения этого объекта. Ранее поддержка Weak References осуществлялась с помощью расширения pecl-weakref.
Оператор присваивания нулевого слияния (NULL) в PHP 7.4
Оператор присваивания значения NULL сокращает количество операций по объединению нулевых значений и уменьшает размер кода некоторых операторов.
Простыми словами "если левый параметр не существует или равен null, то присвоить ему значение равное правому параметру".
// PHP 7.0
$cart['id'] = $cart['id'] ?? 0;
// PHP 7.4
$cart['id'] ??= 0;
Ковариантные возвраты и контравариантные параметры
За редким исключением, ранее в PHP использовали только инвариантные параметры и возвращаемые типы. В последней версии PHP 7.4 допускают ковариацию возвратов и контравариантность для параметров.
Существующие типы параметров
Для лучшего понимания ковариантных возвратов и контравариантных параметров предлагаем вам ознакомиться с RFC, а ниже мы рассмотрим несколько простых примеров.
Ковариантный тип возврата
interface Factory {
function make(): object;
}
class UserFactory implements Factory {
function make(): User;
}
Контравариантный параметр
interface Concatable {
function concat(Iterator $input);
}
class Collection implements Concatable {
// accepts all iterables, not just Iterator
function concat(iterable $input) {/* . . . */}
}
Устаревшие функции в PHP 7.4
В PHP 7.4 ряд функций уходит в прошлое, что оказывает существенное влияние на ранее написанный код. Поэтому перед переходом на php 7.4 рекомендуем вам внимательно изучить документацию обновленной версии и не игнорировать предупреждения об устаревших (deprecated) функциях. Таким образом вам будет легче мигрировать на новые версии PHP в будущем.
Некоторые из устаревших вещей
Два новых метода сериализации объектов
Для сериализации объектов ранее использовали лишь 2 механизма: методы __sleep()/__wakeup() и интерфейс Serializable. Некоторые разработчики полагают, что это приводит нагруженному и уязвимому коду. Чтобы избежать подобных проблем были добавлены 2 новых метода __serialize и __unserialize.
Wordpress на PHP 7.4
По состоянию на 28 мая 2019 года более 66% сайтов на Wordpress используют версию PHP 5.x. в то время как Wordpress рекомендует пользователям использовать последнюю версию PHP. Также большинство популярных плагинов, которые владельцы сайтов ставят на свои сайты, имеют свойство обновляться и работать только на последних версиях PHP.
Отсутствие свежей версии PHP для Wordpress и всех подключенных плагинов приводят к тому, что владелец сайта не имеет возможности обновлять их код и обрекает себя на более высокую уязвимость, низкую производительность и невозможность использовать новые функции Wordpress или плагинов.
Некоторые популярные PHP-разработчики делятся своими исследованиями производительности в зависимости от версии PHP и большинство сходится во мнении, что PHP 7.4 способно обрабатывать до 3 раз больше запросов в секунду в сравнении с предыдущими версиями PHP.
Тесты WordPress 5.0 PHP
- WordPress 5.0 PHP 5.6: 91,64 запросов / сек;
- WordPress 5.0 PHP 7.0: 206,71 запросов / сек;
- WordPress 5.0 PHP 7.1: 210,98 запросов / сек;
- WordPress 5.0 PHP 7.2: 229,18 запросов / сек;
- WordPress 5.0 PHP 7.3: 253,20 запросов / сек;
- WordPress 5.0 PHP 7.4: 271,20 запросов / сек.
PHP 7.4 для клиентов хостинга SpaceWeb
Вы можете выбрать нужную версию PHP в разделе «Сайты» - «Настройки конфигурации».
Обратите внимание, что PHP 7.4 доступен в связке с Apache 2.4, в котором
отличается синтаксис некоторых директив .htaccess. Подробнее в разделе «Помощь»
Перед сменой настоятельно рекомендуем удостовериться
в совместимости вашего сайта с выбираемой версией.
PHP 7.4 для новых клиентов
Хотите протестировать работу своего сайта на PHP 7.4 одним из первых? Заказывайте виртуальный хостинг в SpaceWeb — у нас PHP 7.4 уже доступен на любом тарифе! При необходимости мы можем бесплатно перенести ваш сайт к нам на хостинг. А бесплатный тестовый период в 14 дней позволит вам не спеша провести тестирование сайта на самом современном оборудовании и программном обеспечении.