| 本文介紹的內容是我對外掛程式機制的理解,及其在PHP中的實現,此方案僅是外掛程式機制的實現方法之一,僅供參考。 本文介紹的內容是我對外掛程式機制的理解,及其在PHP中的實現,此方案僅是外掛程式機制的實現方法之一,僅供參考。 外掛程式,亦即Plug-in,是指一類特定的功能模組(通常由第三方開發人員實現),它的特點是:當你需要它的時候啟用它,不需要它的時候禁用/刪除它;且無論是啟用還是禁用都不影響系統核心模組的運行,也就是說外掛程式是一種非侵入式的模組化設計,實現了核心程式與外掛程式程式的鬆散耦合。一個典型的例子就是Wordpress中眾多的第三方外掛程式,比如Akimet外掛程式用於對使用者的評論進行Spam過濾。 一個健壯的外掛程式機制,我認為必須具備以下特點: 外掛程式的動態監聽和載入(Lookup)外掛程式的動態觸發 以上兩點的實現均不影響核心程式的運行 要在程式中實現外掛程式,我們首先應該想到的就是定義不同的鉤子(Hooks);“鉤子”是一個很形象的邏輯概念,你可以認為它是系統預留的外掛程式觸發條件。它的邏輯原理如下:當系統執行到某個鉤子時,會判斷這個鉤子的條件是否滿足;如果滿足,會轉而先去調用鉤子所制定的功能,然後返回繼續執行餘下的程式;如果不滿足,跳過即可。這有點像彙編中的“中斷保護”邏輯。 某些鉤子可能是系統事先就設計好的,比如之前我舉的關於評論Spam過濾的鉤子,通常它已經由核心系統開發人員設計進了評論的處理邏輯中;另外一類鉤子則可能是由使用者自行定製的(由第三方開發人員制定),通常存在於表現層,比如一個普通的PHP表單顯示頁面中。請注意理解以下的說明。 下面進行PHP中外掛程式機制的核心實現,整個機制核心分為三大塊: 一個外掛程式經理類:這是核心之核心。它是一個應用程式全域Global對象。它主要有三個職責: 負責監聽已經註冊了的所有外掛程式,並執行個體化這些外掛程式對象。負責註冊所有外掛程式。當鉤子條件滿足時,觸發對應的對象方法。 外掛程式的功能實現:這大多由第三方開發人員完成,但需要遵循一定的規則,這個規則是外掛程式機制所規定的,因外掛程式機制的不同而不同,下面的顯示代碼你會看到這個規則。 外掛程式的觸發:也就是鉤子的觸發條件。具體來說這是一小段代碼,放置在你需要外掛程式實現的地方,用於觸發這個鉤子。 |