Доступ к объекту класса объявленного в родительском классе? Собственно сабж. Заранее спасибо. P.S. Именно через конструктор. То что можно вызвать через другую функцию, это и так понятно.class A { private $B; public $C; public $data; public function __construct() { $this->B = new B(); $this->C = new C(); } public function readA() { $this->data = $this->B->readB(); print $this->data; } protected function sendB() { return $this->C->variable; } } class B extends A { protected function readB() { return $this->sendB(); } } class C { public $variable = 1; } $classA = new A(); $classA->readA();
Ошибка в вашем коде заключается в том, что класс B наследует от класса A, но метод readB() объявлен как protected. Методы, объявленные как protected, могут быть доступны только внутри класса, который их объявляет, а также внутри его подклассов. Таким образом, класс B не имеет доступа к методу sendB() из класса A.
Если вам нужно получить доступ к методу sendB() из класса B, вам нужно либо изменить область видимости метода sendB() на public, либо создать другой публичный метод в классе A, который бы вызывал метод sendB() и вызвать его из класса B.
Пример:
class A { private $B; public $C; public $data; public function __construct() { $this->B = new B(); $this->C = new C(); } public function readA() { $this->data = $this->B->readB(); print $this->data; } public function sendDataB() { return $this->sendB(); } protected function sendB() { return $this->C->variable; } } class B extends A { protected function readB() { return $this->sendDataB(); } } class C { public $variable = 1; } $classA = new A(); $classA->readA();
В этом примере я добавил публичный метод sendDataB() в класс A, который вызывает метод sendB(). Теперь метод readB() класса B может получить доступ к методу sendB() через этот публичный метод.
Ошибка в вашем коде заключается в том, что класс B наследует от класса A, но метод readB() объявлен как protected. Методы, объявленные как protected, могут быть доступны только внутри класса, который их объявляет, а также внутри его подклассов. Таким образом, класс B не имеет доступа к методу sendB() из класса A.
Если вам нужно получить доступ к методу sendB() из класса B, вам нужно либо изменить область видимости метода sendB() на public, либо создать другой публичный метод в классе A, который бы вызывал метод sendB() и вызвать его из класса B.
Пример:
class A {private $B;
public $C;
public $data;
public function __construct() {
$this->B = new B();
$this->C = new C();
}
public function readA() {
$this->data = $this->B->readB();
print $this->data;
}
public function sendDataB() {
return $this->sendB();
}
protected function sendB() {
return $this->C->variable;
}
}
class B extends A {
protected function readB() {
return $this->sendDataB();
}
}
class C {
public $variable = 1;
}
$classA = new A();
$classA->readA();
В этом примере я добавил публичный метод sendDataB() в класс A, который вызывает метод sendB(). Теперь метод readB() класса B может получить доступ к методу sendB() через этот публичный метод.