Я не понимаю, в чем разница между закрытым методом и защищенным методом в объектно-ориентированном PHP. После того как метод стал приватным, я могу получить к нему доступ из класса extends. Пожалуйста, проверьте код ниже —
<?php
class person{
private function namedilam(){
return "likhlam";
}
public function kicu(){
return $this->namedilam();
}
}
class second extends person{
}
$info = new second;
echo $info->kicu();
Разница станет понятной, когда вы сделаете это так:
class Liam {
private getFirstName() {
return "Liam";
}
public function getName() {
return $this->getFirstName();
}
}
class Max extends Liam {
private function getFirstName() {
return "Max";
}
}
class Peter extends Liam {
public function getLiamsName() {
return $this->getFirstName();
}
}
$max = new Max();
echo $max->getName();
// returns "Liam", not "Max" as you might expect
$peter = new Peter();
echo $peter->getLiamsName();
// PHP Fatal error: Uncaught Error: Call to private method Liam::getFirstName() [...]
Макс вернет «Лиам», потому что getName()
звонки getFirstName()
в классе Лиама, а не в классе, расширяющем его. Это означает, что с закрытыми методами вы можете быть уверены, что всякий раз, когда в вашем классе вы вызываете этот метод, именно этот метод используется, и он никогда не будет перезаписан.
Чтобы объяснить это в общих чертах:
Закрытые методы доступны только внутри класса. Они не могут быть перезаписаны или доступны извне или даже классам, расширяющим его.
Защищенные методы доступны внутри класса а также в расширении классов, но вы не можете вызывать их извне, как:
$max = new Max();
$max->iAmProtected();
Это не будет работать ни с частными, ни с защищенными методами.
Других решений пока нет …