PHP 的 OPP 机制,具有继承和类似虚函数的功能,例如如下的代码:
class A
{
public function callFuncXXOO() { print $this->funcXXOO(); } public function funcXXOO() { return "A::funcXXOO()"; } } class B extends A { public function funcXXOO() { return "B::funcXXOO"; } } $b = new B; $b->callFuncXXOO();
输出是:
B::funcXXOO
可以看到,当在 A 中使用 $this->funcXXOO()
时,体现了“虚函数”的机制,实际调用的是 B::funcXXOO()
.
然而如果将所有函数都改为静态函数:
class A
{
static public function callFuncXXOO() { print self::funcXXOO(); } static public function funcXXOO() { return "A::funcXXOO()"; } } class B extends A { static public function funcXXOO() { return "B::funcXXOO"; } } $b = new B; $b->callFuncXXOO();
情况就没这么乐观了,输出是:
A::funcXXOO()
这是因为 self 的语义本来就是“当前类”,所以 PHP5.3 给 static 关键字赋予了一个新功能:后期静态绑定:
class A
{
static public function callFuncXXOO() { print static::funcXXOO(); } // ... } // ...
这样就会像预期一样输出了:
B::funcXXOO