Перейти к содержанию

Релиз языка программирования PHP 7.4

Материал из Викиновостей, свободного источника новостей

28 ноября 2019 года

После года разработки представлен релиз языка программирования PHP 7.4. Новая ветка включает серию новых возможностей, а также несколько изменений, нарушающих совместимость.

Ключевые улучшения в PHP 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", позволяющий выполнять подстановку существующих массивов при определении нового массива;

$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];

  • Возможность наглядного оформления больших чисел с разделителями в числовых литералах (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() разрешено перечисление операндов в массиве, вместо указание строки для запуска, а также реализована возможность перенаправления потоков и поддержка нулевого файлового дескриптора;

proc_open(['php', '-r', 'echo "Hello World\n";'], $descriptors, $pipes);

// Как 2&1 в shell
proc_open($cmd, [1 = ['pipe', 'w'], 2 = ['redirect', 1]], $pipes);

// как 2/dev/null или 2nul в 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() над объектами.

Объявлены устаревшими функции get_magic_quotes_gpc(), get_magic_quotes_runtime(), hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().

Обеспечен вывод предупреждения о применении устаревшей возможности при попытке обработки некорректных символов в функциях base_convert(), bindec(), octdec() и hexdec(), а также при указании нестрокового шаблона в mb_ereg_replace().

Источники

[править]


Creative Commons
Creative Commons
Эта статья содержит материалы из статьи «Релиз языка программирования PHP 7.4», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии[править]

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.