Закрытый метод не может быть переопределен, так как закрытый метод не виден даже его подклассам. Определение метода как защищенного означает, что он не виден вне самого класса или его подклассов.
Если у вас есть метод, который вы хотите использовать из родительского класса, но хотите, чтобы дети могли изменять его поведение, и не хотите, чтобы этот метод был доступен извне, используйте protected
. Если вы хотите, чтобы функциональность в родительском классе не могла быть изменена каким-либо образом подклассами, определите метод как private
.
РЕДАКТИРОВАТЬ: для уточнения, если у вас есть два метода с одинаковым именем в родительском и подклассе, и эти методы определены как частные, по существу, метод подкласса не имеет абсолютно никакого отношения к родительскому методу , Как уже говорилось, закрытый метод полностью невидим для подкласса.
Учтите это:
class foo {
private function m() {
echo 'foo->m() ';
}
private function z() { echo "foo->z();"; }
public function call() {
$this->m();
}
}
class bar extends foo {
private function m() {
echo 'bar->m() ';
}
public function callbar() {
$this->m();
}
public function callz()
{
$this->z();
}
}
Звонок $bar->callz()
; собирается произвести ОШИБКУ, потому что z вообще не существует в подклассе, даже как унаследованный метод.