В чем разница между частным и защищенным в ООП?

Я не понимаю, в чем разница между закрытым методом и защищенным методом в объектно-ориентированном 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();

0

Решение

Разница станет понятной, когда вы сделаете это так:

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();

Это не будет работать ни с частными, ни с защищенными методами.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]