2010-09-07 3 views
2

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

Любая помощь будет радушна.

ответ

6

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

MainReport::get_data($_REQUEST) 

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

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

т.е.

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

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

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

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

+0

не должна быть «государственная статическая функция get_data ($ _ REQUEST) "? – sled

+0

вы можете вызвать функцию в php статически, если она не зависит от классов vars или вызовов метода на основе экземпляра – Zak

+0

Ahhh .... :) Большое вам спасибо :) Это убило меня! –

1

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

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

private static $foo 

и

self::$foo = "foo"; 

дополнительно частные функции могут быть доступны с

self::function_foo();