Бортовой журнал
Бортовой журнал

Новая версия 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 дней позволит вам не спеша провести тестирование сайта на самом современном оборудовании и программном обеспечении.

    Надежный хостинг для сайта с бесплатным доменом и SSL за 159 ₽

    Выбрать тариф