首頁  >  文章  >  後端開發  >  插件機制在PHP中實作方案

插件機制在PHP中實作方案

高洛峰
高洛峰原創
2016-12-01 11:44:201138瀏覽

提示:PHP中插件機制的一種實現方案. 

這篇文章的出發點是我對插件機制的理解,及其在PHP中的實現。此方案僅是插件機制在PHP的實現方案之一,寫下來和大家分享,歡迎大家一起討論。

插件,亦即Plug-in,是指一類特定的功能模組(通常由第三方開發者實現),它的特點是:當你需要它的時候激活它,不需要它的時候禁用/刪除它;且無論是啟動或停用都不影響系統核心模組的運行,也就是說插件是一種非侵入式的模組化設計,實現了核心程式與插件程式的鬆散耦合。一個典型的例子就是Wordpress中眾多的第三方插件,例如Akimet插件用於對用戶的評論進行Spam過濾。

一個健全的插件機制,我認為必須具備以下特點: 

插件的動態監聽和加載(Lookup) 
插件的動態觸發 

以上兩點的實現均不影響核心程序的運行


以上兩點的實現均不影響核心程序的運行時



中實作插件,我們首先應該想到的就是定義不同的鉤子(Hooks);「鉤子」是一個很形象的邏輯概念,你可以認為它是系統預留的插件觸發條件。它的邏輯原理如下:當系統執行到某個鉤子時,會判斷這個鉤子的條件是否滿足;如果滿足,會轉而先去調用鉤子所製定的功能,然後返回繼續執行餘下的程序;如果不滿足,跳過即可。這有點像是彙編中的「中斷保護」邏輯。

某些鉤子可能是系統事先就設計好的,比如之前我舉的關於評論Spam過濾的鉤子,通常它已經由核心系統開發人員設計進了評論的處理邏輯中;另外一類鉤子則可能是由使用者自行自訂的(由第三方開發人員制定),通常存在於表現層,例如一個普通的PHP表單顯示頁面。 

可能你覺得上面的話比較無聊,讓人昏昏欲睡;但是要看懂下面我寫的程式碼,理解以上的原理是不可或缺的。 

下面進行PHP中插件機制的核心實現,整個機制核心分為三大塊: 

一個插件經理類:這是核心之核心。它是一個應用程式全域Global物件。它主要有三個職責: 

負責監聽所有已經註冊了的插件,並實例化這些插件物件。 
負責註冊所有外掛程式。 

當鉤子條件滿足時,觸發對應的物件方法。 🎜🎜插件的功能實現:這大多由第三方開發人員完成,但需要遵循一定的規則,這個規則是插件機制所規定的,因插件機制的不同而不同,下面的顯示代碼你會看到這個規則。 🎜🎜插件的觸發:也就是鉤子的觸發條件。具體來說這是一小段程式碼,放置在你需要插件實現的地方,用於觸發這個鉤子。 🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn