【PHP高级特性】后期静态绑定
"后期绑定"的意思是说,static::不再被解析为定义当前方法所在的类,而是由最终运算时动态决定。也可以称之为"静态绑定",因为它可以用于(但不限于)静态方法的调用。
静态方法调用
<?php class A { publicstaticfunction call(){ echo "class A" } publicstaticfunction test(){ self::call(); // self调用本类方法 static::call(); //static调用最终运行的方法 } } class B extends A { publicstaticfunction call(){ echo "class B" } } B::test();
输出:
class A
class B
动态方法调用
<?php class A { publicfunction call(){ echo "class A" } publicfunction test(){ self::call(); static::call(); } } class B extends A { publicfunction call(){ echo "class B" } } $b =new B(); $b->test()
输出:
class A
class B
实例化对象的调用
后期静态绑定还可以用于对象的实例化中,同上述内容一样,在实例化对象时,static会根据运行时调用的类来决定实例化对象,而self是根据所在位置的类来决定实例化对象。
<?php class A { publicstaticfunction create(){ $self =newself(); $static =newstatic(); return array($self,$static); } } class B extends A { } $arr = B::create(); foreach($arr as $value){ var_dump($value); }
输出:
object(A)[1]
object(B)[2]
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号