当前位置: 首页 > 后端技术 > PHP

PHP匿名类的使用

时间:2023-03-29 21:17:57 PHP

PHP7之后,PHP增加了匿名类的特性。匿名类和匿名方法让PHP成为一门更现代的语言,也让我们的代码开发工作变得越来越方便。我们先来看看匿名类的简单使用。//直接定义$objA=newclass{publicfunctiongetName(){echo"I'mobjA";}};$objA->getName();//returnfunctiontestA(){returnnewclass{publicfunctiongetName(){echo"我是testA的obj";}};}$objB=testA();$objB->getName();//作为参数functiontestB($testBobj){echo$testBobj->getName();}testB(newclass{publicfunctiongetName(){echo"我是testB的对象";}});一次给出了三种使用匿名类的方法。匿名类可以直接定义为变量,在方法中使用return返回,或者作为参数传递给方法。其实匿名类就像是一个没有事先定义,而是在定义的时候直接实例化的类。//继承、接口、访问控制等classA{public$propA='A';公共函数getProp(){echo$this->propA;}}特征B{公共函数getName(){echo'特征B';}}interfaceC{publicfunctionshow();}$p4='b4';$objC=newclass($p4)extendsAimplementsC{useB;私人$prop1='b1';保护$prop2='b2';公共$prop3='b3';公共函数__construct($prop4){echo$prop4;}publicfunctiongetProp(){parent::getProp();echo$this->prop1,'===',$this->prop2,'===',$this->prop3,'===',$this->propA;$this->getName();$this->show();}publicfunctionshow(){echo'show';}};$objC->getProp();和普通类一样,匿名类可以继承其他类,实现接口,当然也包括各种访问控制能力。也就是说,匿名类在用法上与普通类没有区别。但是如果使用get_class()获取类名,则为系统自动生成的类名。同一个匿名类返回的名字当然是一样的。//匿名类的名字由引擎给定var_dump(get_class($objC));//声明的同一个匿名类,创建的对象都是这个类的实例var_dump(get_class(testA())==get_class(测试A()));匿名类中的静态成员呢?当然,和普通类一样,静态成员属于类而不是实例。//静态变量函数testD(){returnnewclass{publicstatic$name;};}$objD1=testD();$objD1::$name='objD1';$objD2=testD();$objD2::$name='objD2';echo$objD1::$名称;当类中的静态变量被修改时,所有类实例的静态变量都会随之改变。这也是普通类静态成员的一个特点。测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/201912/source/PHP%E5%8C%BF%E5%90%8D%E7%B1%BB%E7%9A%84%E7%94%A8%E6%B3%95.php参考文档:https://www.php.net/manual/zh/language.oop5.anonymous.php各媒体平台均可搜索【硬核项目经理】