PHP アプリケーションでプラグインを許可する最良の方法 [closed] 質問する

PHP アプリケーションでプラグインを許可する最良の方法 [closed] 質問する

私は PHP で新しい Web アプリケーションを開始しており、今回はプラグイン インターフェイスを使用して拡張できるものを作成したいと考えています。

プラグインが特定のイベントにアタッチできるように、コードに「フック」を記述するにはどうすればよいでしょうか?

ベストアンサー1

Observer パターンを使用できます。これを実現する簡単な関数的な方法は次のとおりです。

<?php

/** Plugin system **/

$listeners = array();

/* Create an entry point for plugins */
function hook() {
    global $listeners;

    $num_args = func_num_args();
    $args = func_get_args();

    if($num_args < 2)
        trigger_error("Insufficient arguments", E_USER_ERROR);

    // Hook name should always be first argument
    $hook_name = array_shift($args);

    if(!isset($listeners[$hook_name]))
        return; // No plugins have registered this hook

    foreach($listeners[$hook_name] as $func) {
        $args = $func($args); 
    }
    return $args;
}

/* Attach a function to a hook */
function add_listener($hook, $function_name) {
    global $listeners;
    $listeners[$hook][] = $function_name;
}

/////////////////////////

/** Sample Plugin **/
add_listener('a_b', 'my_plugin_func1');
add_listener('str', 'my_plugin_func2');

function my_plugin_func1($args) {
    return array(4, 5);
}

function my_plugin_func2($args) {
    return str_replace('sample', 'CRAZY', $args[0]);
}

/////////////////////////

/** Sample Application **/

$a = 1;
$b = 2;

list($a, $b) = hook('a_b', $a, $b);

$str  = "This is my sample application\n";
$str .= "$a + $b = ".($a+$b)."\n";
$str .= "$a * $b = ".($a*$b)."\n";

$str = hook('str', $str);
echo $str;
?>

出力:

This is my CRAZY application
4 + 5 = 9
4 * 5 = 20

ノート:

このサンプル ソース コードでは、拡張可能にする実際のソース コードの前に、すべてのプラグインを宣言する必要があります。プラグインに渡される 1 つまたは複数の値を処理する方法の例も示しました。この中で一番難しいのは、各フックに渡される引数をリストする実際のドキュメントを書くことです。

これは、PHP でプラグイン システムを実現する方法の 1 つにすぎません。より優れた代替手段があります。詳細については、WordPress ドキュメントを確認することをお勧めします。

おすすめ記事