21:PHP匿名类

匿名类

匿名类支持在PHP 7添加。匿名类在创建简单的一次性对象时很有用.。

  1. <?php
  2. // Pre PHP 7 code
  3.  class  Logger
  4.  {
  5.     public function  log ( $msg )
  6.     {
  7.         echo  $msg ;
  8.     }
  9. }
  10. $util -> setLogger (new  Logger ());
  11. // PHP 7+ code
  12.  $util -> setLogger (new class {
  13.     public function  log ( $msg )
  14.     {
  15.         echo  $msg ;
  16.     }
  17. });

 

他们可以通过参数传递给他们的构造函数,扩展其他类,实现接口,并使用特征,就像一个正常的类可以:

  1. <?php
  2. class  SomeClass  {}
  3. interface  SomeInterface  {}
  4. trait  SomeTrait  {}
  5. var_dump (new class( 10 ) extends  SomeClass  implements  SomeInterface  {
  6.     private  $num ;
  7.     public function  __construct ( $num )
  8.     {
  9.          $this -> num  =  $num ;
  10.     }
  11.     use  SomeTrait ;
  12. });
  13. /**以上代码会输出:
  14. object(class@anonymous)#1 (1) {
  15.   ["Command line code0x104c5b612":"class@anonymous":private]=>
  16.   int(10)
  17. }
  18. **/

 

在另一个类中嵌套匿名类不允许它访问任何私有或受保护的类或外部类的属性.。为了使用外部类的受保护的属性或方法,匿名类可以扩展外部类.。若要使用匿名类中的外部类的私有属性或受保护属性,则必须通过其构造函数传递它们.:

  1. <?php
  2. class  Outer
  3.  {
  4.     private  $prop  =  1 ;
  5.     protected  $prop2  =  2 ;
  6.     protected function  func1 ()
  7.     {
  8.         return  3 ;
  9.     }
  10.     public function  func2 ()
  11.     {
  12.         return new class$this -> prop ) extends  Outer  {
  13.             private  $prop3 ;
  14.             public function  __construct ( $prop )
  15.             {
  16.                  $this -> prop3  =  $prop ;
  17.             }
  18.             public function  func3 ()
  19.             {
  20.                 return  $this -> prop2  +  $this -> prop3  +  $this -> func1 ();
  21.             }
  22.         };
  23.     }
  24. }
  25. echo (new  Outer )-> func2 ()-> func3 ();  // 6

php匿名类

    A+
发布日期:2017年01月03日 22:55:08  所属分类:PHP教程
最后更新时间:2017-01-03 22:55:08
付杰
  • ¥ 99.0元
  • 市场价:199.0元
  • ¥ 98.0元
  • 市场价:198.0元
  • ¥ 498.0元
  • 市场价:998.0元
  • ¥ 59.0元
  • 市场价:99.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: