[ON] Релиз языка программирования PHP 8.5

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
rssbot
Бот
Сообщения: 6001
ОС: gnu/linux

[ON] Релиз языка программирования PHP 8.5

Сообщение rssbot »

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



Ключевые изменения в PHP 8.5 (1, 2, 3):
  • Добавлен оператор "|›" (pipe), позволяющий передавать значения от одной функции к другой без использования промежуточных присвоений и переменных, используя результат выполнения одной функции в качестве параметра в другой. Если функция имеет один аргумент, параметр для передачи значения выбирается через указание "...", а если у функции несколько аргументов подстановка осуществляется при помощи замыканий. Например, следующий код

    Код:

    $output = $input
    |› trim(...)
    |› fn (string $string) =› str_replace(' ', '-', $string)
    |› fn (string $string) =› str_replace(['.', '/', '…'], '', $string)
    |› strtolower(...);

    эквивалентен

    $temp = trim($input);
    $temp = str_replace(' ', '-', $temp);
    $temp = str_replace(['.', '/', '…'], '', $temp);
    $output = strtolower($temp);

    или

    $output = strtolower(
    str_replace(['.', '/', '…'], '',
    str_replace(' ', '-',
    trim($input)
    )
    )
    );
  • Предоставлена поддержка присвоения новых значений клонированным объектам во время их клонирования, через передачу в функцию clone() ассоциативного массива.

    Код:

    public function withTitle(string $title): self
    {
    return clone($this, [
    'title' => $title,
    ]);
    }
  • Добавлен атрибут "#[NoDiscard]", который может применяться для пометки функций, возвращаемые значения от которых всегда должны использоваться. Если возвращаемое подобной функцией значение игнорируется интерпретатор выведет предупреждение. Для обхода проверки можно использовать вызов с приведением к типу void.

    Код:

    #[NoDiscard("you must use this return value.")]
    function foo(): string {
    return 'hi';
    }

    foo();
    // вывод предупреждения
    (void) foo();
    // Ok
    $string = foo(); // Ok
  • Разрешено использование замыканий (closures) и вызываемых объектов первого класса (first-class callables) в константных выражениях, в которых ранее допускалось указание неизменяемых значений, вычисляемых во время компиляции. Например, теперь можно указывать замыкания в атрибутах, значениях по умолчанию и константах.
    Используемые подобным образом замыкания всегда должны помечаться ключевым словом "static" и не могут обращаться в внешним переменным при помощи выражения "use".

    Код:

    #[SkipDiscovery(static function (Container $container): bool {
    return ! $container->get(Application::class) instanceof ConsoleApplication;
    })]
  • При выводе фатальных ошибок к тексту сообщения теперь прикрепляется обратная трассировка (backtrace) вызовов.
  • Добавлены функции array_first() и array_last(), выводящие первый и последний элементы массива. Например, вместо

    Код:

    $first = $array[array_key_first($array)] ?? null;

    теперь можно писать

    $first = array_first($array);
  • Добавлен модуль URI, предоставляющий упрощённый API для разбора ссылок. Разбор осуществляется при помощи библиотек uriparser и lexbor.

    Код:

    use Uri\Rfc3986\Uri;

    $uri = new Uri('https://opennet.me/64290');

    $uri->getHost(); // opennet.me
    $uri->getScheme(); // https://
  • Реализован атрибут "#[DelayedTargetValidation]", при помощи которого можно перенести проверку атрибутов, таких как "#[Override]", со стадии компиляции на стадию выполнения.

    Код:

    #[DelayedTargetValidation]
    #[Override]
    public const NAME = 'Child';
  • Добавлены функции get_error_handler() и get_exception_handler() для определения функций с обработчиками ошибок и исключений.
  • В модуле Curl реализована функция curl_share_init_persistent(), позволяющая совместно использовать дескрипторы при обработке разных запросов.
  • В модуле Exif добавлена поддержка изображений в форматах HEIF и HEIC.
  • Объявлены устаревшими: нестандартный синтаксис приведения имён типов (например, "(integer)", а не "(int)"); использование обратных кавычек (`) для вызова команд вместо shell_exec(); повторные объявления констант; использование точки с запятой вместо двоеточия для завершения операторов case; указание null вместо пустой строки массивах или в функции array_key_exists().

    Из ini-файла удалена поддержка настройки "disabled_classes".


Источник: https://www.opennet.ru/opennews/art.shtml?num=64290
(opennet.ru, основная лента)
Последний раз редактировалось rssbot 20.11.2025 22:09, всего редактировалось 2 раза.
Причина: Updated upstream
Спасибо сказали: