Skip to content

8.5

PHP 8.5 将于 2025 年 11 月发布,并带来一些有用的新功能和改进。

此版本侧重于开发人员体验增强、新的实用程序函数和更好的调试功能。

主要包含如下新功能:

  • 数组函数:array_first()array_last()
  • 管道操作 |>
  • 错误和异常处理程序 getter
  • cURL 函数:curl_multi_get_handles()
  • Locale 函数:locale_is_right_to_left()
  • 常量:PHP_BUILD_DATE
  • CLI 功能增强,php --ini=diff

数组函数 array_first()array_last()

PHP 7.3 引入了 array_key_first()array_key_last() 函数,用于获取数组中的第一个和最后一个键。

在 PHP 8.5 中,引入了两个函数 array_firstarray_last() 用于获取数组中的第一个和最后一个值。

php
$users = ['Alice', 'Bob', 'Charlie'];

$firstUser = array_first($users);  // 'Alice'
$lastUser = array_last($users);    // 'Charlie'

// Works with associative arrays too
$data = ['name' => 'John', 'age' => 30, 'city' => 'Berlin'];
echo array_first($data); // 'John'
echo array_last($data);  // 'Berlin'

// Returns null for empty arrays
$empty = [];
var_dump(array_first($empty)); // null
var_dump(array_last($empty));  // null

array_first()array_last() 函数等同于:

  • array_first($array)$array[array_key_first($array)]

  • array_last($array)$array[array_key_last($array)]

管道操作 |>

PHP 8.5 引入了一个新的管道运算符 (|>),它允许从左到右链接多个可调用对象,将左侧可调用对象的返回值传递给右侧可调用对象:

php
$result = 'Hello World'
    |> strtoupper(...)
    |> str_shuffle(...)
    |> trim(...);
// Output: 'LWHO LDLROE0' (or similar shuffled result)

// Equivalent to nested calls:
$result = trim(str_shuffle(strtoupper('Hello World')));

// Or using variables:
$result = 'Hello World';
$result = strtoupper($result);
$result = str_shuffle($result);
$result = trim($result);

管道运算符适用于任何可调用对象,包括函数、方法、闭包和第一类可调用对象。

但是,它有一些限制:

  • 所有可调用对象必须只接受一个必需的参数

  • 不能使用具有按引用参数的函数(少数例外)

  • 返回值始终作为第一个参数传递

错误和异常处理程序 getter

PHP 8.5 引入了两个新函数,用于检索当前活动的错误和异常处理程序:get_error_handler()get_exception_handler()

适用场景:

  • 框架开发和处理程序链接

  • 调试错误处理配置

  • 临时覆盖处理程序,同时保留原始

这两个函数都返回当前可调用的处理程序,如果未设置自定义处理程序,则返回 null

cURL 函数 curl_multi_get_handles()

PHP 8.5 引入了一个新的函数 curl_multi_get_handles(),用于从多句柄中检索所有句柄。

php
$multiHandle = curl_multi_init();

$ch1 = curl_init('https://api.example.com/users');
$ch2 = curl_init('https://api.example.com/posts');

curl_multi_add_handle($multiHandle, $ch1);
curl_multi_add_handle($multiHandle, $ch2);

// New in PHP 8.5: Get all handles
$handles = curl_multi_get_handles($multiHandle);
// Returns: [$ch1, $ch2]

// Execute and process results
$running = null;
do {
    curl_multi_exec($multiHandle, $running);
} while ($running > 0);

foreach ($handles as $handle) {
    $response = curl_multi_getcontent($handle);
    curl_multi_remove_handle($multiHandle, $handle);
}

Locale 函数 locale_is_right_to_left()

PHP 8.5 添加了对检测从右到左 (RTL) 语言环境的支持,从而提高了国际化功能:

php
// Check if locale uses RTL writing
$isRTL = locale_is_right_to_left('ar_SA'); // true (Arabic)
$isLTR = locale_is_right_to_left('en_US'); // false (English)
$isFarsi = locale_is_right_to_left('fa_IR'); // true (Persian/Farsi)

// Object-oriented approach
$isRTL = Locale::isRightToLeft('he_IL'); // true (Hebrew)

适用场景:

  • 构建多语言 Web 应用程序
  • 用户界面中的正确文本对齐
  • 基于区域设置的动态 CSS 类分配

常量 PHP_BUILD_DATE

PHP 8.5 添加了一个新的常量 PHP_BUILD_DATE,用于获取 PHP 的编译日期。

php
echo PHP_BUILD_DATE; // e.g., 'Nov 15 2025 10:30:45'

// Useful for debugging in production
echo 'PHP Version: ' . PHP_VERSION . "\n";
echo 'Build Date: ' . PHP_BUILD_DATE . "\n";

CLI 功能增强

一个新的 CLI 选项,用于仅输出非默认 ini 指令:

shell
# Show only modified settings
php --ini=diff

# Example output:
# memory_limit = 256M (default: 128M)
# max_execution_time = 60 (default: 30)

MIT Licensed