Область видимости и private метод
Разбираюсь с областью видимости методов и свойств классов. Казалось, что в теме разобрался, но есть недопонимание одного момента. Вот простой кусок кода с комментами:
<?php
class Base {
public function test() {
$this->testPrivate();
}
private function testPrivate() {
echo "Base::testPrivate\n";
}
}
class SubBase extends Base {
private function testPrivate() {
echo "SubBase::testPrivate\n";
}
}
$obj = new SubBase();
echo $obj->test(); // Почему результат: Base::testPrivate?
В данном конкретном примере $this указывает на экземпляр класса SubBase, поэтому эта запись равносильна примерно следующему: SubBase:: testPrivate();
Понятно, что мы вызываем этот метод все-таки из класса Base и не можем получить доступ к приватному методу SubBase. Тогда по логике вещей должны получить ошибку, но почему же в этом случае подтягивается приватный метод родительского класса Base? Или это такая логика: если не могу получить метод из дочернего класса, то получаю его из родительского?
Ответы (1 шт):
потому что test() публичный ключ имеет и потому через неё и получаем доступ - см.инкапсуляция. Как геттеры и сеттеры. Напрямую обратиться не можешь, а через посредника - пожалуйста. PS и суперкласс в приоритете исполнения.