PHP外掛程式技術-外掛程式鉤子(hooks)分析

來源:互聯網
上載者:User
最近準備做一個開源的個人部落格系統,因為在構想中要添加外掛程式功能,所以就研究了一下外掛程式功能的實現方法。

外掛程式的功能按照本人自己的理解就是對已有的程式進行功能方面的添加以及改進,外掛程式要與程式所提供的介面進行串連,然後通過已經串連的介面對程式的資料等等進行修改。

而外掛程式鉤子的作用就類似於一個外掛程式介面,外掛程式與程式內相應的鉤子進行串連,對程式提供的內容進行修改。

我的外掛程式機制全部是採用物件導向的方式進行架構的,在開始要對外掛程式進行初始化,就是使用一個數組將外掛程式的名稱存放起來,以供後續的鉤子進行調用。

$plug_config[]=array(    'plug_name'=>'onePlug',    'plug_version'=>'1.01');

這個外掛程式的功能我就是想對一段html內容添加一個好看的樣式,外掛程式我是放在./root/ext檔案夾內,以外掛程式名作為外掛程式檔案夾的名稱,main.php作為外掛程式的主調用入口。

外掛程式的內部是一個以外掛程式名為類名的Class。

',$plug_tem_global);                $plug_tem_global=''.implode("

",$temarr).''; }}

這個 global $plug_tem_global; 是使用一個全域變數$plug_tem_global作為傳入內容的參數,對它進行修改就相當於對內容進行修改。

在外掛程式機制的主檔案中,外掛程式鉤子作為一個調用外掛程式的介面,它其實是一個字串變數,其內部的值就是存放插入當前位置外掛程式的數組的名稱

比如說上面外掛程式初始化的數組名稱為plug_config,那麼此處的外掛程式鉤子就是$plug_config,由於要在類的內部對這個變數進行操作,所以使用global將他變成了一個全域變數。

$plug_point_name='plug_config';global $$plug_point_name;

對於外掛程式的執行,在內部使用了一個迴圈來執行適用於當前鉤子的所有外掛程式

$plug_tem_arr=$$plug_point_name;$plug_num=count($plug_tem_arr);for($plug_i=0;$plug_i<$plug_num;$plug_i++){    if(isset($plug_tem_arr[$plug_i]['plug_name'])){        $plug_name=$plug_tem_arr[$plug_i]['plug_name'];        $plug_file_address=Root.'ext'.DIRECTORY_SEPARATOR .$plug_name.DIRECTORY_SEPARATOR .'main.php';        if(file_exists($plug_file_address)){            require($plug_file_address);            $plug_tem_obj=new $plug_name();        }    }}

下面就是我不使用外掛程式與使用外掛程式後的效果對比,哈哈~ 從前有座山……

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.