我在考慮在我的網站上實現一個類似於觀察者模式的邏輯來實現鉤子。沒有OOP的觀察者模式邏輯?
我所尋找的是類似這樣Best way to allow plugins for a PHP application
然而,代碼中有太有限了,因爲我不能附加多個鉤子一樣的東西聽衆。
我對如何放大該代碼以使其能夠在一個事件中監聽多個操作一無所知。
謝謝
我在考慮在我的網站上實現一個類似於觀察者模式的邏輯來實現鉤子。沒有OOP的觀察者模式邏輯?
我所尋找的是類似這樣Best way to allow plugins for a PHP application
然而,代碼中有太有限了,因爲我不能附加多個鉤子一樣的東西聽衆。
我對如何放大該代碼以使其能夠在一個事件中監聽多個操作一無所知。
謝謝
你可以這樣做ircmaxell建議:添加鉤子。但很明顯,他提供的信息對你來說還不夠。
如果您喜歡通過示例進行學習,您可以查看CMS Drupal,這不是面向對象,而是使用觀察者模式,在整個地方調用hooks以允許模塊化設計。
鉤的工作原理如下:
例如:
魔法發生在所謂的user_callbacks中。 An example:
$hook = 'insert'
foreach (module_implements($hook) as $module) {
$function = $module .'_'. $hook;
$result = call_user_func_array($function, $args);
}
而且功能module_implements
可能看起來像:
$list = module_list(FALSE, TRUE, $sort); //looks for files that are considered "modules" or "addons".
foreach ($list as $module) {
if (function_exists($module.'_'.$hook)) { //see if the module has the hook 'registered'
$implementations[$hook][] = $module; //if so: add it to a list with functions to be called.
}
}
只需添加一個「*」掛鉤,並修改hook()
函數來調用兩個命名事件和「*」所有事件「掛鉤」。
然後,只需做:
add_listener('*', 'mycallback');
看看Spl_Observer。
你說你不想要OOP,但是你可以很容易地實現一個非OOP包裝。
嗨夥計,我不明白這一點? – 2010-07-28 18:48:48
基本上,創建一個由'*'標識的新鉤子。然後,編輯'hook()'函數來調用所有這些監聽器以及指定名稱的監聽器...... – ircmaxell 2010-07-28 18:50:12