Ethnaのソースコードを読み解く 第4回 Sample_Controller::trigger
Ethna_Controller.php
function main('Sample_Controller', 'index', "")
{
$c =& new Sample_Controller;
$c->trigger('index', "");
}
$c には、Sample_Controllerクラスのオブジェクトが入ります。(オブジェクトが何かわからない人は、「データ」だと思ってください。オブジェクト=「関数付きデータ」です。)
$c->trigger()で、Sample_Controllerのtrigger関数(メソッド)が実行されます。
では、Sample_Controller.phpを開いて、trigger関数を探しましょう。
ない。
ということは、Ethna_Controllerのtrigger関数が( $cのメソッドとして )呼ばれるはずです。
Ethna_Controller::triggerは・・・あった。
function trigger($default_action_name = "", $fallback_action_name = "", $enable_filter = true)
{
// フィルターの生成
if ($enable_filter) {
$this->_createFilterChain();
}
// 実行前フィルタ
for ($i = 0; $i < count($this->filter_chain); $i++) {
$r = $this->filter_chain[$i]->preFilter();
if (Ethna::isError($r)) {
return $r;
}
}
// trigger
switch ($this->getGateway()) {
case GATEWAY_WWW:
$this->_trigger_WWW($default_action_name, $fallback_action_name);
break;
case GATEWAY_CLI:
$this->_trigger_CLI($default_action_name);
break;
case GATEWAY_XMLRPC:
$this->_trigger_XMLRPC();
break;
case GATEWAY_SOAP:
$this->_trigger_SOAP();
break;
}
// 実行後フィルタ
for ($i = count($this->filter_chain) - 1; $i >= 0; $i--) {
$r = $this->filter_chain[$i]->postFilter();
if (Ethna::isError($r)) {
return $r;
}
}
}
むむむ。。ちょっと長いですね。私のようなへっぽこプログラマは、長い関数を見ると尻込みしてしまいます。
つづく
カテゴリ:
Ethna