如果我在PHP中扩展一个静态类,并且父类引用“self ::”,那么这会引用扩展类中的self吗?

时间:2010-09-16 02:07:16

标签: php class static extends

如果我在PHP中扩展一个静态类,并且父类引用“self ::”,那么这会引用扩展类中的self吗?

所以,例如

<?php 
Class A
{
    static $var  
    public static function guess(){self::$var = rand(); return $var}
}        

Class B extends Class A
{
    public static function getVar(){return self::$var}
}

如果我跑了 B ::猜测(); 然后B :: getVar();

是存储在A :: $ var或B :: $ var?

中的Var的值

谢谢。

2 个答案:

答案 0 :(得分:5)

Late static binding在PHP 5.3中引入,它允许您控制此行为。

答案 1 :(得分:3)

很容易测试:

class ClassA {
    public static function test(){ self::getVar(); }
    public static function getVar(){ echo 'A'; }
}        

class ClassB extends ClassA {
    public static function getVar(){ echo 'B'; }
}

ClassA::test(); // prints 'A'

ClassB::test(); // also prints 'A'

...希望有所帮助:)