1

Joomla! の開発中 プラグイン、私は本当に興味深いものに出くわしました。イベントの 1 つには戻り値がありませんが、関数内から変数を呼び出します。事前の知識によると、これは変数が関数内でグローバルである場合にのみ機能するはずですが、ディスパッチャーは関数の外部から変数を呼び出すことができます。

編集:関数内からアクセスされる変数は、パラメーターの1つである必要があることを発見しました! これは func_get_params() または call_user_func() でしょうか?

コーリング コード:

$instance = JDispatcher::getInstance();
$instance->trigger(onJoomCalledEvent, array(&$link, $other_params));

プラグイン (スニペット):

class plgMyPlugin extends JPlugin{

    onJoomCalledEvent($link, $other_params){
        $link = "Some Value Here";
        return false;
    }
}

この関数は false を返しますが、アプリケーション (Joomla!) は $link の値を抽出できます。これはどのように行われますか?

4

1 に答える 1

1

プラグインの定義は次のようになっていますか?

class plgMyPlugin extends JPlugin{

    onJoomCalledEvent(&$link, $other_params){
        $link = "Some Value Here";
        return false;
    }
}

それよりも参照渡しです。それが実際に上に投稿した方法である場合、非推奨であり、PHP 5.3 以降で警告を発する call time pass by reference です。

于 2012-07-25T00:15:33.910 に答える