Задать вопрос
@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


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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽