编程

PHP 8.3: class_alias() 支持内置 PHP 类创建别名

1020 2023-10-28 20:21:00

class_alias PHP 函数用于为一个类创建别名。别名类和原始类的行为完全一致。

在 PHP 8.3 之前,为内置的 PHP 类创建别名会导致 ValueError 异常:

// Not allowed in PHP < 8.3
class_alias('stdClass', 'MyNewClass'); 
class_alias('Traversable', 'NewTraversableInterface');
ValueError: class_alias(): Argument #1 ($class) must be a user-defined class name, internal class name given

PHP 8.3 起,可以为内部类和接口创建别名。上面的代码是合法的,并且 class_alias 也正确为内部类起了别名:

// Allowed in PHP >= 8.3
class_alias('stdClass', 'MyNewClass'); 
class_alias('Traversable', 'NewTraversableInterface');

class_alias() 函数也接收一个 bool $autoload = true 作为第三个参数。该参数对内置类没有影响,因为这些类不需要自动加载。不过,尽管不会产生有意义的效果,传入值到该参数仍是允许的,且不会触发任何警报或者错误。