почему этот абстрактный класс возвращает фатальную ошибку в php - PullRequest
1 голос
/ 17 февраля 2011
abstract  class MyAbstractClass{
    abstract  protected function doSomeThing();
    function threeDots(){
        return  "...";
    }
}
class MyClassA extends  MyAbstractClass{
    protected function doSomeThing(){
        $this->threeDots();
    }
}
$myclass = new MyClassA();
$myclass->doSomething();

это ошибка, которая выводится "Неустранимая ошибка: вызов защищенного метода MyClassA :: doSomething () из контекста в test.php в строке 10". Я пытаюсь выяснить причину этой ошибки.

Ответы [ 4 ]

3 голосов
/ 17 февраля 2011

Вы объявили функцию doSomething для защиты, что означает, что она может использоваться только внутри родительских классов, дочерних классов или самой себя. Вы используете это вне этого.

Вы можете попробовать изменить

abstract  protected function doSomeThing();

в

abstract public function doSomeThing();

и

protected function doSomeThing(){

в

public function doSomeThing() {
2 голосов
/ 17 февраля 2011

Защищенный означает, что этот метод доступен внутри класса и для класса, который наследует этот класс. Вы должны использовать Public, если хотите позвонить «извне».

1 голос
/ 17 февраля 2011

Метод защищен, вы не можете вызывать этот метод вне класса и класса, который наследуется этим классом.

Сделайте это публичным, если вы хотите позвонить вне класса.

0 голосов
/ 17 февраля 2011

Вы можете вызывать защищенный метод только внутри самого класса или любых подклассов.Я бы рекомендовал взглянуть на запись о видимости в руководстве по PHP .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...