PHP 8.3 新特性 - class_alias 类别名
hi,我是温新,一名 PHPer
在 PHP 8.3 中,class_alias()
函数支持为内置的 PHP 类创建别名。这意味着可以使用自定义的别名来引用这些类,而不是使用它们的原始名称。这在某些情况下可能会使代码更易于阅读和维护。
为内置类起别名
<?php
// 使用 class_alias() 为内置的 PHP 类创建别名
class_alias('DateTime', 'MyDateTime');
// 现在可以使用 MyDateTime 作为 DateTime 类的别名
$dateTime = new MyDateTime();
echo $dateTime->format('Y-m-d H:i:s');
在这个例子中,我们使用 class_alias()
函数将内置的 DateTime
类重命名为 MyDateTime
。然后我们可以像使用普通类一样使用 MyDateTime
类。
为自定义类起别名
<?php
class Person {
public string $name = '王美丽';
public function dance()
{
echo $this->name . ' 会跳舞';
}
}
class_alias('Person', 'Ren');
$ren = new Ren;
echo $ren->dance();
$mei = new Person;
echo $mei->dance();
var_dump($ren == $mei); // true
var_dump($mei == $ren); // true
var_dump($ren instanceof $mei); // true
var_dump($ren instanceof Person); // true
var_dump($ren instanceof Mei); // false
var_dump($mei instanceof Person); // true
var_dump($mei instanceof Mei); // false
class_alias
class_alias(string $class, string $alias, bool $autoload = true): bool
参数解释
-
$class
:要创建别名的类名; -
$alias
:要创建的别名; -
$autoload
:(可选)如果为true
,则在使用别名时会自动加载原始类。如果为false
,则不会自动加载。
class_alias
函数,为类起一个别名,这个别名的行为与原始类完全相同 。
为类起别的好处是,可以在不修改代码的情况下,更改类的名称,在者在多个地方使用相同的类,但使用的名称不同。
需要注意的是,如果原始类没有被加载,并且 $autoload
参数为 true
,则在使用别名时会自动加载原始类。如果原始类已经被加载,则不会再次加载。
版本小于 PHP 8.3
在 PHP 8.3 之前,是不支持为内置类起别名的,否则会导致 ValueError
异常。
自定义类起别名
<?php
// 测试版本:PHP 8.2.3
// 为自定义类起别名不会报错
class Dog {
public string $name = '花花';
}
class_alias('Dog', 'Hua');
$hua = new Hua;
echo $hua->name;
为内置类起别名会报异常
<?php
// PHP 8.2.3
class_alias('stdClass', 'MyNewClass');
报错如下
PHP Fatal error: Uncaught ValueError: class_alias(): Argument #1 ($class) must be a user-defined class name, internal class name given in
请登录后再评论