@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.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект