উন্নয়নের এক বছর পর উপস্থাপিত প্রোগ্রামিং ভাষা প্রকাশ পিএইচপি 7.4. Новая ветка включает серию новых возможностей, а также несколько изменений, нарушающих совместимость.
Типизированные свойства — свойства классов теперь могут включать объявления типов, например:
class User {
public int $id;
public string $name;
}
Сокращённый синтаксис определения функций «fn(parameter_list) => expr» с привязкой области видимости по значению. Например «fn($x) => $x + $y» является аналогом «$fn2 = function ($x) use ($y) {return $x + $y;}»);
Сокращённый оператор присвоения «??=», который может использоваться для определения значения по умолчанию («a ??= b» аналогично «a = a ?? b», если «a» определён его значение сохраняется, а если не определён присваивается значение «b»);
লিমিটেড সুযোগ сохранения иерархии наследования типов в производных от них типах возвращаемых значений или возможность преобразования иерархии исходных типов на противоположную в производных типах аргументов (ковариантность возвращаемого типа и контравариантность типа аргументов). В PHP теперь можно использовать следующие конструкции:
class A {}
class B extends A {}
class Producer {
public function method(): A {}
}
class ChildProducer extends Producer {
public function method(): B {}
}
Оператор распаковки внутри массивов «…$var», অনুমতি выполнять подстановку существующих массивов при определении нового массива;
সুযোগ наглядного оформления больших чисел с разделителями в числовых литералах (1_000_000_00);
সমর্থন দুর্বল লিঙ্ক, позволяющих сохранить ссылку на объект, но не блокирующих удаление связанного объекта сборщиком мусора;
নতুন প্রক্রিয়া сериализации объектов (комбинация Serializable и __sleep()/__wakeup()), пришедший на смену интерфейсу Serializable, который будет объявлен устаревшим;
// Возвращает массив, содержащий все состояния объекта;
public function __serialize(): array;
// Восстанавливает состояние объекта из массива
public function __unserialize(array $data): void;
Разрешена генерация исключений из метода __toString();
Добавлена поддержка упреждающей загрузки кэша объектного кода. Для настройки добавлен параметр opcache.preload, через который можно указать PHP-скрипт, который будет скомпилирован и запущен при запуске сервера. Данный скрипт может загрузить опкод других файлов через их прямое включение или при помощи функции opcache_compile_file();
В расширение Hash добавлена функция crc32c для вычисления контрольных сумм с использованием полинома Кастаньоли;
В функцию password_hash() добавлена поддержка методов хэширования паролей argon2i и argin2id, в реализации библиотеки Sodium, если PHP собирается без libargon;
Добавлена функция mb_str_split(), аналогичная str_split(), но оперирующая не байтами а позициями символов в многобайтовой строке;
В функции strip_tags() добавлена возможность передачи массива с именами тегов, т.е. вместо strip_tags($str, ‘<a><p>’) теперь можно указать strip_tags($str, [‘a’, ‘p’]);
В proc_open() разрешено перечисление операндов в массиве, вместо указание строки для запуска, а также реализована возможность перенаправления потоков и поддержка нулевого файлового дескриптора;
// Как 2>&1 в shell
proc_open($cmd, [1 => [‘pipe’, ‘w’], 2 => [‘redirect’, 1]], $pipes);
// как 2>/dev/null или 2>nul в shell
proc_open($cmd, [1 => [‘pipe’, ‘w’], 2 => [‘null’]], $pipes);
Из базовой поставки исключены расширения Firebird/Interbase, Recode и WDDX. Данные расширения теперь распространяются через PECL;
Переведены в разряд অপ্রচলিত такие возможности, как вложенные тернарные операторы без скобок, обращение к элементам массивов и строкам с использованием фигурных скобок («$var{$idx}»), функция is_real() и приведение к типу real, использование ключевого слова parent без родительского класса, параметр конфигурации allow_url_include, применение array_key_exists() над объектами.
Обеспечен вывод предупреждения о применении устаревшей возможности при попытке обработки некорректных символов в функциях
base_convert(), bindec(), octdec() и hexdec(), а также при указании нестрокового шаблона в mb_ereg_replace().