本文主要是介绍PHP中的后期静态绑定(Late Static Bindings ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
转自http://blog.csdn.net/Gavin_new/article/details/52841673
class A{public static function func1(){echo __CLASS__.PHP_EOL;}public static function test(){self::func1();}
}class B extend A{public static function func1(){echo __CLASS__.PHP_EOL; //__CLASS__是当前类的名称}
}B::test();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
结果:A
- 1
但是,既然B继承了A,并重写了A的func1,那么如果想让test中执行的是B中的func1要怎么做呢?于是,php5.3使用了预留的static关键字,将上述代码中的test函数改成这样:
public static function test(){static::func1();
}
- 1
- 2
- 3
结果:B
- 1
也就是说:static::实现了后期静态绑定,static::对应的变量不再是当前类的变量,而是由最终运算时动态决定的(也可以说从堆里面提取出来的关键字)。
同时,在这个学习的过程中,我还发现另外一个用法:new static() 和 new self(), 同样的,new static 就是实例化最终继承的类,而new self就是实例化当前类, new parent就是实现当前类的父类了。
好了,顺便提一下形如这种格式的用法有三种: “self::”、”parent::”、”static::”;
这篇关于PHP中的后期静态绑定(Late Static Bindings )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!