PHP: вызов частного метода из класса, плохо умирающего

Так что это может показаться немного запутанным. Пальцы пересеклись, я натолкнулся на него.

Я работаю в среде MVC в PHP.

Я загружаю контроллер / отчет / индекс, который вызывает помощника

<? class ReportController extends Controller { public function index() { $foo = MainReport::get_data($_REQUEST); } } ?> 

Внутри помощника

 <? class MainReport extends foo { public function get_data($_REQUEST) { // do stuff return $stuff_done; } } ?> 

Я бегу, как будто все хорошо и хорошо. К сожалению, я хочу запустить его следующим образом:

 <? class MainReport extends foo { private function do_stuff() { // do even better stuff here! return $better_stuff; } public function get_data($_REQUEST) { // do stuff $x = $this->do_stuff(); } } ?> 

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

Мне кажется очевидным, что у меня невероятно сложная проблема с синтаксисом … но как правильно получить доступ к закрытым функциям внутри класса?

Может быть, что-то вроде: self :: do_stuff ();

Как объявить и получить доступ к переменным частного класса?

  private $bar = array(); 

Любая помощь приветствуется.

Вы вызываете свою функцию из статического контекста,

 MainReport::get_data($_REQUEST) 

поэтому $ this не существует внутри этой функции.

Если вы хотите вызвать другую функцию класса, находясь внутри статического контекста, вы также должны называть ее статически.

т.е.

 public function get_data($_REQUEST) { // do stuff $x = MainReport::do_stuff(); } 

Кроме того, вы можете создать экземпляр своего класса в исходном вызове и использовать экземпляр:

 $myMainReport = new MainReport(); $myMainReport->get_data($_REQUEST); 

Тогда ваш код класса будет работать как ожидалось

Я только что нашел, что self :: работает

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

 private static $foo 

а также

 self::$foo = "foo"; 

Кроме того, к частной функции можно

 self::function_foo();