这是我正在处理的类的简化版本
class A {
static protected function getVal() {
return self::$valB;
}
}
class B extend A {
static protected $valB = 'Hello';
}
B::getVal(); // Hello
这应该在PHP版本5.2.17中工作还是我设置错误。我目前收到的错误是找不到A::$valB
。
答案 0 :(得分:3)
需要后期静态绑定,这在PHP 5.3.0及更高版本中有效。
http://us3.php.net/manual/en/language.oop5.late-static-bindings.php
在getVal中,您希望使用return static::valB;
代替return self::valB;
答案 1 :(得分:1)
首先,您的代码语法错误。首先修复它:
class A {
static protected function getVal() {
return self::$valB;
}
}
class B extends A {
static protected $valB = 'Hello';
}
B::getVal();
现在,这将永远不会起作用,因为getVal
受到保护。除非你从A
或其中一个孩子那里打电话,否则它将不起作用。
self
关键字解析为调用它的类。由于self
使用A
:self == A
。
您需要使用后期静态绑定来修复它:
return static::$valB;
最后,我建议您在$valB
中声明A
以避免致命错误:
class A {
static protected $valB;
static protected function getVal() { ... }
}