Во-первых, ваш синтаксис кода неправильный.Начните с исправления:
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() { ... }
}