Так что это может показаться немного запутанным. Пальцы пересеклись, я натолкнулся на него.
Я работаю в среде 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();