PHP 8.0.24 Released!

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

Ядро PHP

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

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

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

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

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

<?php
$arr1 
= [1'a' => 'b'];
$arr2 = [...$arr1'c' => 'd']; //[1, 'a' => 'b', 'c' => 'd']
?>

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

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

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

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

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

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

Файберы

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

Callback-функции как объекты первого класса

Замыкания для callback-функций теперь можно создавать с помощью синтаксиса 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

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

Hash

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

MurmurHash3

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

  • murmur3a, 32-битный хеш
  • murmur3c, 128-битный хеш для x86
  • murmur3f, 128-битный хеш для 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

Поддерживается новый элемент "file:" в DSN-префиксе SQLite, который позволяет указывать дополнительные флаги. Он не будет работать, если включена опция 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

User Contributed Notes

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