Делаете приватный звонок в расширенном классе? - PullRequest
4 голосов
/ 21 марта 2011

У меня есть родительский класс, содержащий функцию funcB (), которую я хотел бы переопределить лучшей функцией, внеся всего несколько изменений в эту функцию. Эта функция в родительском классе выполняет вызов другой закрытой функции в том же классе.

Пример кода:

class classA {
  private function funcA() {
    return "funcA called";
  }

  public function funcB() {
    $result = $this->funcA();
    return $result;
  }
}

class ClassB extends ClassA {
  public function funcB($a) {
    //do some more stuff
    $result = $this->funcA();
    return $result;
  }
}

Я получаю фатальную ошибку, потому что мне не разрешено делать вызов закрытой функции parent :: funcA () из ClassB. Но звонок должен быть сделан. Как это все еще возможно?

1 Ответ

11 голосов
/ 21 марта 2011

Объявите метод private как protected.

См. Документацию о visibility :

Члены классаОбнародованная публика может быть доступна везде.Члены, объявленные защищенными, могут быть доступны только внутри самого класса и унаследованных и родительских классов.Члены, объявленные как частные, могут быть доступны только классу, который определяет член.

...