介绍
顾名思义,匿名类是没有名称的类。它只供一次使用,如果需要动态定义一个类。从PHP 7版本开始引入了匿名类的功能。
匿名类的定义位于表达式内,其结果是该类的对象。它使用 新的类语法定义如下
语法
<?php $obj=new class { public function sayhello(){ echo "Hello World"; } }; $obj->sayhello(); ?>
匿名类可以执行普通人员可以执行的所有操作,即扩展另一个类,实现接口或使用特征
在以下代码中,匿名类扩展了父类并实现了parentinterface
示例
<?php class parentclass{ public function test1(){ echo "test1 method in parent class\n"; } } interface parentinterface{ public function test2(); } $obj=new class() extends parentclass implements parentinterface { public function test2(){ echo "implements test2 method from interface"; } }; $obj->test1(); $obj->test2(); ?>
输出结果
输出如下-
test1 method in parent class implements test2 method from interface
嵌套匿名类
匿名类可以嵌套在其他类方法的主体内。但是,其对象无权访问外部类的私有或受保护成员
示例
<?php class testclass{ public function test1(){ return new class(){ public function test2(){ echo "test2 method of nested anonymous class"; } }; } } $obj2=new testclass(); $obj2->test1()->test2(); ?>
输出结果
上面的代码产生以下结果-
test2 method of nested anonymous class
匿名类的内部名称
PHP解析器确实为匿名类提供了唯一的名称以供内部使用
示例
<?php var_dump(get_class(new class() {} )); ?>
输出结果
这将产生类似于以下内容的输出-
string(60) "class@anonymous/home/cg/root/1569997/main.php0x7f1ba68da026"
热门文章
- 河南省兽用疫苗中心电话查询(郑州兽用疫苗)
- 「1月20日」最高速度21.7M/S,2025年Shadowrocket/Clash/V2ray/SSR每天更新免费节点订阅链接
- pycharm中新增less
- 家用小型饲料颗粒机500元一台(家用小型饲料颗粒机图片视频展示)
- 猫咪三针疫苗间隔(猫咪疫苗三针间隔时间)
- 「2月26日」最高速度19.4M/S,2025年Shadowrocket/Clash/V2ray/SSR每天更新免费节点订阅链接
- Redis6通信协议升级至RESP3,一口气看完13种新数据类型
- 沈阳宠物领养基地(沈阳宠物犬领养)
- 「2月16日」最高速度20.7M/S,2025年Shadowrocket/V2ray/Clash/SSR每天更新免费节点订阅链接
- 在Java中搜索字符串中的字符。