Унаследованная функция не имеет доступа к закрытой переменной дочернего класса - PullRequest
0 голосов
/ 20 мая 2019

Мне нужна помощь.Этот код не означает ничего делать, я просто пытался узнать, как работают эти наследуемые функции.

Таким образом, у обоих родителей и дочернего класса есть переменная $ wheel и установлено значение private (это не имеет смысла, но я просто играл с кодом).

Метод используется для печатиколичество колес экземпляра.Этот метод не переопределяется в дочернем классе.Родительские и дочерние объекты были созданы, и wheel_details () были вызваны с использованием каждого объекта.

Однако при вызове с использованием дочернего объекта метод не использует приватную переменную дочернего объекта.Вместо этого он печатает переменную родительского объекта.

Как и почему вы думаете, что он обращается к закрытой переменной родительского класса, а не к собственной закрытой переменной.

Оцените понимание этого.TIA

class Bicycle {

    private $wheels = 2;


    public function wheel_details(){
        return " It has {$this->wheels} wheels. Invoked by ". get_class($this) ;
    }

}

class Unicycle extends Bicycle {

    private $wheels = 1;

}

$b1 =  new Bicycle;
$b2 =  new Unicycle;


echo "Bicycle1 wheels ". $b1->wheel_details(). " <br />";
echo "Bicycle2 wheels ". $b2->wheel_details(). " <br />";

/*Output
=======
Bicycle1 wheels It has 2 wheels. Invoked by Bicycle 
Bicycle2 wheels It has 2 wheels. Invoked by Unicycle
*/

1 Ответ

2 голосов
/ 20 мая 2019

Это специально:

Члены, объявленные как частные, могут быть доступны только классу, который определяет член.

Если вы хотите переопределить значение издочерний класс, используйте protected вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...