PHP版本
root@php-test:~# php -v
PHP 8.5.0RC3 (cli) (built: Oct 27 2025 21:11:25) (NTS)
Copyright (c) The PHP Group
Built by Debian
Zend Engine v4.5.0RC3, Copyright (c) Zend Technologies
with Zend OPcache v8.5.0RC3, Copyright (c), by Zend Technologies
URI 扩展
全新的、始终可用的 URI 扩展提供了一组 API,可根据 RFC 3986 和 WHATWG URL 标准安全地解析和修改 URI 与 URL。
use Uri\Rfc3986\Uri;
$uri = new Uri('https://php.net/releases/8.5/en.php');
var_dump($uri->getHost());
// string(7) "php.net"
管道操作符
这个新运算符允许你以更符合直觉的“流水线”方式处理数据。对比下面的代码,传统写法需要嵌套函数调用或使用临时变量,而管道操作符让数据流动的方向一目了然。
// PHP 8.5 之前的写法(嵌套调用,阅读不直观)
$result = strtoupper(trim(substr($input, 0, 10)));
// 使用管道操作符的写法(从左到右,逻辑清晰)
$result = $input
|> substr($$, 0, 10) // $$ 代表上一个表达式的结果
|> trim($$)
|> strtoupper($$);
#[\NoDiscard]属性
这个属性可以有效避免因忽略重要返回值而导致的潜在错误。例如,一个创建新用户并返回用户ID的函数,如果调用者忽略了返回值,后续逻辑可能会出错。用 #[\NoDiscard]标记后,PHP 会在编译时发出警告。
#[\NoDiscard]
function createUser(string $name): int {
// ... 创建用户的逻辑
return $newUserId;
}
createUser("Alice"); // 这里会触发警告,提示返回值被忽略
// 如果确实想忽略,可以显式转换为 (void) 来消除警告
(void) createUser("Alice");
array_first() 和 array_last()
这两个新函数提供了比 reset()和 end()更安全的方式来获取数组的首尾元素,因为它们不会影响数组的内部指针。
$users = ['Alice', 'Bob', 'Charlie'];
$first = array_first($users); // 'Alice'
$last = array_last($users); // 'Charlie'
// 关联数组同样适用
$data = ['name' => 'John', 'age' => 30];
echo array_first($data); // 'John'
echo array_last($data); // 30

