2011-02-26 65 views
13

我很好奇插件如何工作,我只是知道,而不是改變我們使用插件的代碼,但他們如何在不更改代碼的情況下完成他們的工作?編碼人員在編寫新項目時應該考慮什麼,以便可以擁有插件?並非常感謝你:D插件系統如何工作(wordpress,mybb ...)?

+0

好的,謝謝你告訴我這件事,因爲我以前不知道,謝謝:D – Peter 2011-02-26 15:14:47

+0

你能分享一下你自己的經驗嗎?你問這個問題已經有一段時間了。 – 2016-01-15 13:58:43

回答

19

關於如何實現插件系統有多種變化。 WordPress的使用一個相當常見的方案,通常被稱爲「鉤子」。我不知道確切的實現,但它基本上是這樣的:

// plugin.php script registers its own callback function 
register_plugin("hook_type", "plugin_function_123"); 

function plugin_function_123($params) { ... } 

hook_type往往是一個動作名字什麼的。當主應用程序通過一個特殊點(或如需要processsed一些數據),它會調用所有註冊的回調函數:

$output = call_plugins("hook_type", $param1, $param2); 

這通常是在幕後實現爲一個簡單的循環:

foreach ($registered_plugins[$action] as $func) { 
    $func($param1, $param2, ...); // or call_user_func_ 
} 

現在,它取決於鉤子/動作類型的參數是什麼,以及是否有預期的結果文本。參數傳遞也有差異(例如,某些回調需要& $ var引用)。而一些插件系統依賴於對象(如果不是那麼多的不同的動作類型存在或更復雜的結構將被處理)。

+0

謝謝你這個詳細的答案:D – Peter 2011-02-26 15:16:20