PHP 8.1.0 RC 4 available for testing

Новая функциональность

Ядро PHP

Буквенный префикс восьмеричных целых чисел

Восьмеричные целые числа теперь могут использовать явный префикс 0o/0O в целочисленных литералах, аналогично двоичным и шестнадцатеричным целочисленным литералам.

<?php
014
;  // Восьмеричный литерал без префикса
0o14// Восьмеричный литерал с префиксом
?>

Распаковка массива с помощью строковых ключей

Добавлена поддержка распаковки массивов со строковыми ключами.

Именованный аргумент после распаковки аргумента

Теперь можно указать именованные аргументы после распаковки аргументов. например: foo(...$args, named: $arg).

Ключ с полным путём для загрузки файлов

При загрузке файлов теперь предоставляется дополнительный ключ full_path, который содержит полный путь (а не только basename) загруженного файла. Предназначен для использования вместе с "upload webkitdirectory".

Перечисления

Добавлена поддержка перечислений.

Файберы

Добавлена поддержка файберов.

First-class callable синтаксис

Замыкания для вызываемых функций теперь можно создавать с помощью синтаксиса myFunc(...), который идентичен синтаксису Closure::fromCallable('myFunc').

Замечание: ... является частью синтаксиса, а не пропуском.

Пересечение типов

Добавлена поддержка пересечения типов.

Предостережение

Пересечения типов нельзя использовать вместе с объединёнными типами

Тип never

Добавлен новый тип возвращаемого значения never. Тип указывает на то, что функция либо вызывает exit(), либо выбрасывает исключение, либо не завершается.

new в инициализации класса

Теперь можно использовать выражения new ClassName() в качестве значения по умолчанию для параметра, статической переменной, инициализаторов глобальных констант и в качестве аргументов атрибутов. Теперь объекты также можно передавать в define().

Readonly-свойства

Добавлена поддержка readonly-свойств.

Окончательные константы класса

Добавлена поддержка модификатора final для констант класса.

CURL

Добавлена опция CURLOPT_DOH_URL.

Добавлены параметры для сертификата BLOB-объекта при libcurl >= 7.71.0:

  • CURLOPT_ISSUERCERT_BLOB
  • CURLOPT_PROXY_ISSUERCERT
  • CURLOPT_PROXY_ISSUERCERT_BLOB
  • CURLOPT_PROXY_SSLCERT_BLOB
  • CURLOPT_PROXY_SSLKEY_BLOB
  • CURLOPT_SSLCERT_BLOB
  • CURLOPT_SSLKEY_BLOB

Добавлен класс CURLStringFile, который можно использовать для отправки файла из строки (string), а не из файла:

<?php
$file 
= new CURLStringFile($data'filename.txt''text/plain');
curl_setopt($curlCURLOPT_POSTFIELDS, ['file' => $file]);
?>

FPM

Добавлен формат статуса openmetrics. Prometheus может использовать его для получения метрик FPM.

Добавлен новый пул для диспетчера динамических процессов под названием pm.max_spawn_rate. Он позволяет запускать несколько дочерних процессов более быстрыми темпами, если выбран динамический pm. Значение по умолчанию - 32, которое ранее было фиксированным значением.

GD

Поддержка Avix теперь доступна с помощью imagecreatefromavif() и imageavif(), если libgd был собран с поддержкой Avix.

Hash

Следующие функции hash(), hash_file() и hash_init() теперь поддерживают дополнительный необязательный аргумент options, который можно использовать для передачи специфичных для алгоритма данных.

MurmurHash3

Добавлена поддержка MurmurHash3 с поддержкой потоковой передачи. Реализованы следующие варианты:

  • murmur3a, 32-bit hash
  • murmur3c, 128-bit hash for x86
  • murmur3f, 128-bit hash for x64

Начальное состояние хеширования можно передать с помощью ключа seed в массиве options, например:

<?php
$h 
hash("murmur3f"$dataoptions: ["seed" => 42]);
echo 
$h"\n";
?>
Допустимое начальное значение находится в диапазоне от 0 до определённого платформой значения UINT_MAX, обычно - 4294967295.

xxHash

Добавлена поддержка xxHash. Реализованы следующие варианты:

  • xxh32, 32-bit hash
  • xxh64, 64-bit hash
  • xxh3, 64-bit hash
  • xxh128, 128-bit hash

Начальное состояние хеширования можно передать с помощью ключа seed в массиве options, например:

<?php
$h 
hash("xxh3"$dataoptions: ["seed" => 42]);
echo 
$h"\n";
?>
Использование секрета также поддерживается путём передачи ключа secret в массиве options:
<?php
$h 
hash("xxh3"$dataoptions: ["secret" => "как минимум 136 байт секрета"]);
echo 
$h"\n";
?>
Качество пользовательского секрета имеет решающее значение для качества хеша результата. Для секрета настоятельно рекомендуется использовать максимально возможную энтропию.

MySQLi

Новая INI-директива mysqli.local_infile_directory

Добавлена INI-директива mysqli.local_infile_directory, с помощью которой можно указать каталог, из которого разрешена загрузка файлов. Это имеет смысл, только если mysqli.allow_local_infile не включён, поскольку в этом случае разрешены все каталоги.

Привязка параметров во время выполнении

Теперь можно привязывать параметры, передав их в виде массива в mysqli_stmt::execute(). Все значения будут привязаны как строки. Разрешены только списочные массивы. Эта новая функция недоступна, если MySQLi скомпилирован с libmysqlclient.

<?php
$stmt 
$mysqli->prepare('INSERT INTO users(id, name) VALUES(?,?)');
$stmt->execute([1$username]);
?>

Новый метод mysqli_result::fetch_column()

mysqli_result::fetch_column() был добавлен, чтобы разрешить выборку единственного скалярного значения из набора результатов. Новый метод принимает необязательный параметр column, начинающийся с 0, в виде целого числа (int), указывающий из какого столбца производить выборку.

<?php
$result 
$mysqli->query('SELECT username FROM users WHERE id = 123');
echo 
$result->fetch_column();
?>

PDO

Добавлен атрибут PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY, который можно использовать для указания каталога, из которого могут быть загружены файлы. Это имеет смысл только в том случае, если PDO::MYSQL_ATTR_LOCAL_INFILE не включён, поскольку в этом случае разрешены все каталоги.

PDO_SQLite

Теперь поддерживается DSN синтаксис SQLite "file:", который позволяет указывать дополнительные флаги. Этот функционал недоступен, если установлен open_basedir.

<?php
new PDO('sqlite:file:path/to/sqlite.db?mode=ro')
?>

POSIX

Добавлены константы POSIX_RLIMIT_KQUEUES и POSIX_RLIMIT_NPTS. Эти ограничения доступны только во FreeBSD.

Стандартные функции

fputcsv() теперь принимает новый аргумент eol, который позволяет определять настраиваемую последовательность конца строки, значение по умолчанию остаётся прежним - "\n".

SPL

SplFileObject::fputcsv() теперь принимает новый аргумент eol, который позволяет определять настраиваемую последовательность конца строки, значение по умолчанию остаётся прежним - "\n".

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top