Все защищенные и общедоступные элементы дочерних классов видны из своего родительского класса в PHP, поэтому приведенный вами пример кода должен работать нормально. Quote from the php doc:
Члены объявляются защищенные могут быть доступны только в классе себя и наследственными и родительских классов.
Но актуальный вопрос: он вам действительно нужен?
Правильный путь OO должен заключаться в определении автономного родительского класса, который выражает что-то. Он не должен нуждаться в для доступа к свойствам дочерних классов - это так называемый code smell. Если вы действительно думаете, что у Вас есть случай, когда подобная конструкция является необходимым, вы, вероятно, ищет абстрактные методы, которые гарантируют, что каждый класс ребенок обладает этим свойством:
abstract class Animal {
public function makeNoise() {
echo $this->getNoiseString();
}
protected abstract function getNoiseString();
}
class Cat extends Animal {
protected function getNoiseString() {
return 'meow';
}
}
Практически - родительский класс не должен ничего знать о своих детях. Вы лучше объяснили * почему * вам это нужно, потому что есть вероятность, что вы решите проблему не так. – zerkms
Поскольку родительский класс должен быть агностиком относительно своих дочерних классов, это невозможно (без какого-либо довольно уродливого финализа). Не могли бы вы объяснить, что вы пытаетесь выполнить? Вероятно, есть лучший способ сделать это. – Andrew
Этот точный фрагмент кода работает отлично. PHP не использует классический полиморфизм, поскольку он знает класс времени выполнения объекта. –