PHP 匿名类
phpserver side programmingprogramming更新于 2025/7/19 0:52:17
简介
顾名思义,匿名类就是没有名称的类。它只供一次性使用,并且适用于需要动态定义类的情况。匿名类的特性从 PHP 7 版本开始引入。
匿名类的定义位于表达式内部,其结果为该类的对象。它使用如下的 new class语法定义。
语法
<?php
$obj=new class {
public function sayhello(){
echo "Hello World";
}
};
$obj->sayhello();
?>
匿名类可以执行普通类的所有功能,例如扩展其他类、实现接口或使用特征
以下代码中,匿名类扩展了父类并实现了父接口
示例
<?php
class parentclass{
public function test1(){
echo "父类中的 test1 方法
";
}
}
interface parentinterface{
public function test2();
}
$obj=new class() extends parentclass implements parentinterface {
public function test2(){
echo "从接口实现 test2 方法";
}
};
$obj->test1();
$obj->test2();
?>
输出
输出如下 −
父类中的 test1 方法 实现接口中的 test2 方法
嵌套匿名类
匿名类可以嵌套在其他类方法体内。但是,其对象无法访问外部类的私有或受保护成员
示例
<?php
class testclass{
public function test1(){
return new class(){
public function test2(){
echo "嵌套匿名类的 test2 方法";
}
};
}
}
$obj2=new testclass();
$obj2->test1()->test2();
?>
输出
以上代码生成以下结果 −
嵌套匿名类的 test2 方法
匿名类的内部名称
PHP 解析器会为匿名类提供一个唯一名称以供内部使用
示例
<?php
var_dump(get_class(new class() {} ));
?>
输出
这将生成类似以下内容的输出 −
string(60) "class@anonymous/home/cg/root/1569997/main.php0x7f1ba68da026"

