希望用科技的力量助力开发者快速成长

PHP 8.3 新特性全面解析

PHP 8.3 是 PHP 语言的最新版本,延续了现代 PHP 的高效与类型安全方向。本文分类整理其核心更新,帮助开发者快速掌握关键内容。


类型系统增强

类型化类常量(Typed Class Constants)

允许为类常量(包括接口和 trait 中的常量)指定显式类型:

class User {
    const string STATUS_ACTIVE = 'active'; // 类型声明
}

interface Logger {
    public const int MAX_LOG_LENGTH = 1000; // 接口中的类型化常量
}

更灵活的 json_validate() 函数

新增原生 JSON 验证函数,无需解析完整内容,性能更优:

if (json_validate($jsonString)) {
    // 有效 JSON
}

新函数与工具

mb_str_pad() 多字节字符串填充

支持多字节字符(如中文、Emoji)的字符串填充:

echo mb_str_pad("你好", 10, "~", STR_PAD_RIGHT); // 输出:你好~~~~~~

Randomizer::getBytesFromString()

从指定字符串中随机生成字节序列:

use Random\Randomizer;

$randomizer = new Randomizer();
echo $randomizer->getBytesFromString('abcdef123', 5); // 如 "b1dfa"

DOMElement::getAttributeNames()

获取 DOM 元素的所有属性名:

$dom = new DOMDocument();
$dom->loadHTML('<div id="main" class="box"></div>');
$element = $dom->getElementsByTagName('div')[0];
print_r($element->getAttributeNames()); // 输出 ['id', 'class']

语法改进

动态类常量获取(::class 支持动态名称)

允许通过变量获取类常量名:

const STATUS = 'ACTIVE';
echo User::{'STATUS_' . STATUS}; // 等价于 User::STATUS_ACTIVE

只读属性深拷贝(Deep Cloning of Readonly Properties)

__clone 方法中可修改 readonly 属性的内部状态:

class User {
    public readonly array $roles;

    public function __clone() {
        $this->roles[] = 'CLONED'; // PHP 8.3 允许此操作
    }
}

性能与底层改进

JIT 编译优化

针对数学计算和密集循环的即时编译(JIT)性能提升,适合科学计算和框架核心。

GC(垃圾回收)效率提升

减少内存占用,优化长期运行脚本的稳定性。

弃用与破坏性变更

移除 assert() 字符串参数

禁止将字符串作为 assert() 的参数:

assert('1 === 2'); // PHP 8.3 报错,需改为表达式:assert(1 === 2);

移除 U_MULTIPLE_DECIMAL_SEPARATORS 常量

与 ICU 库相关的常量清理。

动态属性创建警告升级

未声明属性的动态赋值将触发 E_DEPRECATED 警告(PHP 8.2 开始,PHP 9.0 将转为错误):

class User {}
$user = new User();
$user->undefinedProp = 1; // PHP 8.3 警告

其他实用更新

  • #[\Override] 属性:显式标记覆盖父类方法,避免意外重命名导致的错误。

  • 更清晰的日期错误消息:日期解析错误提示更友好。

  • 新 INI 配置选项zend.max_allowed_stack_size 控制调用栈深度。


总结:是否升级到 PHP 8.3?

✅ 推荐升级场景

  • 需要类型化类常量或新工具函数(如 json_validate)。

  • 项目依赖现代类型系统与性能优化。

⚠️ 注意事项

  • 检查代码中是否使用了废弃功能(如 assert 字符串参数)。

  • 确保第三方库已兼容 PHP 8.3。

官方升级指南:PHP 8.3 Migration Guide