PHP静态属性,继承和self关键字

时间:2013-11-17 20:20:09

标签: php static-methods

这对我来说没有意义:

class A {
    public static $value = "a";
    public static function get_value(){
        return self::$value;
    }
}

echo A::$value;       // a, this makes sense
echo A::get_value();  // a, this makes sense

class B extends A {
    public static $value = "b";
}

echo B::$value;       // b, this makes sense
echo B::get_value();  // a?  :(

为什么self指针不能按预期工作,类似于this?是否有其他关键字可用于实现此目的?

如果我将静态函数添加到B类,它现在可以按预期工作。

class B extends A {
    public static $value = "b";
    public static function get_value(){
        return self::$value;
    }
}

echo B::get_value();  // b  :)

如果该方法包含多行,则复制+粘贴此功能并在2个位置管理它是没有意义的...

1 个答案:

答案 0 :(得分:3)

后期静态绑定:

http://php.net/manual/en/language.oop5.late-static-bindings.php

  

后期静态绑定通过存储在最后一次“非转发呼叫”中命名的类来工作。

在您的示例中尝试使用static::关键字而不是self::