[Перевод] Последние новости о PHP 7.4

PHP

PHP 7.4, вероятно, выйдет где-то в декабре 2019 года. Эта страница также будет получать регулярные обновления. Последнее обновление: 14 января 2019 г.

Предварительная загрузка

Предварительная загрузка — замечательное дополнение к ядру PHP, которое может привести к значительному повышению производительности. Вкратце: если вы используете фреймворк сегодня, вы должны загружать и перекомпилировать его файлы при каждом запросе. Предварительная загрузка позволяет серверу загружать файлы PHP в память при запуске и делать их постоянно доступными для всех последующих запросов. Прирост производительности, конечно, имеет свою цену: если источник предварительно загруженных файлов изменится, сервер придется перезапустить.

установить сильную типизацию

Типы переменных класса могут быть объявлены заранее:

class A
{
    public string $name;
    
    public Foo $foo;
}

Обновление 07-01: на данный момент атрибут type был объединен, поэтому подтвержден PHP 7.4.

Улучшить различие типов

Я уже писал о системе типов PHP в прошлом, поэтому приятно видеть, что некоторые улучшения на самом деле лежат в основе PHP. Различия типов — это тема, достойная отдельного поста в блоге; короче говоря: вы сможете использовать ковариантные возвращаемые типы...

class ParentType {}
class ChildType extends ParentType {}

class A
{
    public function covariantReturnTypes(): ParentType
    { /* … */ }
}

class B extends A
{
    public function covariantReturnTypes(): ChildType
    { /* … */ }
}

и параметры обратного вызова

class A
{
    public function contraVariantArguments(ChildType $type)
    { /* … */ }
}

class B extends A
{
    public function contraVariantArguments(ParentType $type)
    { /* … */ }
}

Обновление 14-01: RFC в настоящее время находится на стадии голосования, но похоже, что оно пройдет без проблем.

интерфейс внешней функции

Интерфейс внешних функций, или сокращенно FFI, позволяет вызывать код C из пользовательского пространства. Это означает, что расширения PHP могут быть написаны на чистом PHP. Следует отметить, что это сложная тема. Вам по-прежнему необходимы знания C, чтобы правильно использовать эту функцию.

Оператор присваивания нулевого слияния

вместо этого:

$data['date'] = $data['date'] ?? new DateTime();

Ты можешь это сделать:

$data['date'] ??= new DateTime();

Обновление 22-01: эта функция теперь объединена в PHP 7.4.

получить больше прибыли

Технически это не обновление, связанное с PHP 7.4, но о нем определенно стоит упомянуть. Правила голосования по RFC изменились: для их принятия всегда требуется большинство в 2/3.

Отраженные ссылки

Библиотеки, такие как var dumper Symfony, в значительной степени полагаются на API отражения для надежного дампа переменных. Раньше не было надлежащей поддержки отражения для ссылок, из-за чего эти библиотеки полагались на хаки для обнаружения ссылок. В PHP 7.4 для решения этой проблемы добавлен класс ReflectionReference. Обновление 02-14: принят RFC, подтверждены изменения для PHP 7.4.

mb_str_splitДобавление

Эта функция обеспечивает ту же функциональность, что и str_split, но для многобайтовых строк.

ext-hashвсегда включен

Как следует из названия, это расширение теперь постоянно доступно во всех версиях PHP.

PEAR не включен по умолчанию

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

Реестр хэшей паролей

Внесены внутренние изменения в то, как используются библиотеки хеширования, чтобы пользователям было проще их использовать.

устарелext/wwdx

Этот формат обмена данными никогда не был стандартизирован, и его расширение теперь устарело.

Обратно несовместимые изменения

Вы всегда должны проверять полную документацию по ОБНОВЛЕНИЮ при обновлении версии PHP. Вот некоторые выделенные обратно несовместимые изменения:

  • ссылается в классе без родителяparent ::будет генерировать ошибки времени компиляции вместо ошибок времени выполнения.
  • существуетDateTimeилиDateTimeImmutableвызов по инстанцииvar_dumpБольше не будет оставлять доступные свойства на объекте.
  • openssl_random_pseudo_bytesИсключение будет выдано в условиях ошибки.
  • попробуй сериализоватьPDOилиPDOStatementэкземпляр будет генерировать исключение вместоPDOException.
  • существуетArrayObjectвызов по инстанцииget_object_vars()вернусьArrayObjectСамо свойство, а не значение массива или объекта-оболочки. Пожалуйста, обрати внимание,(array)Принуждение не затрагивается.

Подождите минутку......

Если вы видели конец статьи, возможно, вас интересует PHP. Может быть, вы также заинтересованы в чтении других моих материалов? Вот некоторые из того, что я написал. Мой блог:iacblogМой публичный номер: php_open