Причина, по которой вы не можете вызвать testb
из класса c
, заключается в том, что сигнатура метода testb
объявляет его как private
, то есть доступ к нему возможен только в экземплярах b
.Изменить видимость по умолчанию (без модификатора) или public
.
Например:
function testb() {
echo "testing from b";
}
Или:
public function testb() {
echo "testing from b";
}
Редактировать:
Проблема в том, что вы не вызвали супер-конструктор из конструктора c - поэтому значение $this->b
не инициализировано.Измените конструктор c на:
function __construct() {
parent::__construct();
echo "hello world from c ";
$this->letters->b->testb();
}
К сожалению, тем не менее, это создаст бесконечный цикл, в котором конструктор a
создает экземпляр c
, а конструктор c
вызывает доконструктор a
.Почему ваши буквенные классы даже расширяют друг друга?
Вам также нужно изменить видимость testb
в классе b
.