@simonnik

Магия: private vs public?

Объясните плиз следуещее.

Вот код:
<?php

class A {
    private function getName() {
        echo "Class A\n";
    }

    public function callName() {
        $this->getName();
    }
}

class B extends A {
    public function getName() {
        echo "Class B\n";
    }
}

$b = new B();
$b->callName();


Почему выведется
Class A
, а если в классе А метод getName поменять на protected или public выведется
Class B


Уже перечитал документацию про наследования и области видимости и не нашёл ответа на мой вопрос. Может не туда смотрю или упустил чего? Расскажите плиз. Заранее благодарю
  • Вопрос задан
  • 283 просмотра
Решения вопроса 1
egor_nullptr
@egor_nullptr
Для private свойств/методов нельзя повысить видимость при наследовании, поэтому в контексте родительского класса (А) всегда будет вызывается private метод getName, а public версия из дочернего класса (B) будет вызывается только в контексте этого дочернего класса. Для protected свойств/методов повышение видимости при наследовании допустимо, поэтому вызывается переопределённая версия метода getName.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы