Доступ родителей родительского класса

У меня есть структура классов ниже. Мне было интересно, как я могу получить доступ $varA из класса C, И если я изменю значение в классе A это также видно в классе C? Или когда я звоню в класс Cвсе значения в этот момент переданы вновь созданному классу?

class A {
protected $varA;
protected function functionA() {
echo 'hello';
}
}

class B extends A {
protected $varB;
protected function functionB() {
echo 'world';
}
}

class C extends B {
protected $varC;
protected function functionC() {
echo 'Class C';
}
}

0

Решение

Судя по вашим вопросам, это звучит как вы может быть недопонимание различий между классами и объектами. Думайте о классе как о спецификации, из которой создаются объекты. На самом деле вы не собираетесь манипулировать классами в своем коде, вы будете создавать объекты из этих классов и работать с ними. экземпляры классов. Классы, подобные тем, которые вы показали, на самом деле ничего не значат, пока их не создадут.

Когда вы создаете экземпляр класса C с $c = new C;Полученный объект $c будет иметь доступ ко всем открытым и защищенным свойствам любых классов, от которых он наследует; в этом случае A а также B, Эти свойства доступны в любом месте C учебный класс. Вы можете получить к ним доступ с $this->varA, например.

Но, как вы пишете, ни у одного из классов нет открытых свойств или методов. Таким образом, любой код, который вы пишете, который использует их, не будет иметь доступа к любой свойств. protected означает, что свойство или метод будут доступны только внутри класса или классов, которые наследуются от него. Так после $c = new C;Вы не сможете позвонить $c->functionC()и вы не сможете ссылаться на $->varA, или даже $c->varC,

Если вы создаете экземпляр A и экземпляр Cэти два объекта полностью независимы друг от друга. Пример C имеет свой $varAи если вы измените $varA в случае A, это не повлияет на случай C,

Вот пара примеров классов с открытыми методами, чтобы продемонстрировать это.

class A {
protected $varA = 'a';
public function changeA ($newValue) {
$this->varA = $newValue;
}
}

class B extends A {
public function example()
{
echo $this->varA;
}
}

Если вы создаете новый B, его example метод покажет унаследованное значение в $varA,

$instanceOfB = new B;
$instanceOfB->example();  // outputs a

Затем, если вы создаете новый Aи изменить значение его $varA

$instanceOfA = new A;
$instanceOfA->changeA('something else');  // varA in this object is modified

Значение $varA в случае B не влияет.

$instanceOfB->example();  // still outputs a

Я просто использовал один уровень наследования в примере, но концепция та же, что и в настройке A / B / C, которую вы показали.

1

Другие решения

http://php.net/manual/en/language.oop5.visibility.php

class C extends B {
protected $varC;
protected function functionC() {
$this -> $varA
}
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector