<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## [PHP插件技術-插件鉤子(hooks)分析](https://www.cnblogs.com/echosoar/p/4651459.html) 最近準備做一個開源的個人博客系統,因為在構想中要添加插件功能,所以就研究了一下插件功能的實現方法。 > 插件的功能按照本人自己的理解就是對已有的程序進行功能方面的添加以及改進,插件要與程序所提供的接口進行連接,然后通過已經連接的接口對程序的數據等等進行修改。 > 而插件鉤子的作用就類似于一個插件接口,插件與程序內相應的鉤子進行連接,對程序提供的內容進行修改。 我的插件機制全部是采用面向對象的方式進行架構的,在開始要對插件進行初始化,就是使用一個數組將插件的名稱存放起來,以供后續的鉤子進行調用。 ``` $plug_config[]=array( 'plug_name'=>'onePlug', 'plug_version'=>'1.01' ); ``` 這個插件的功能我就是想對一段html內容添加一個好看的樣式,插件我是放在./root/ext文件夾內,以插件名作為插件文件夾的名稱,main.php作為插件的主調用入口。 插件的內部是一個以插件名為類名的Class。 ``` <?php class onePlug{ function __construct(){ global $plug_tem_global; $temarr=explode('<br>',$plug_tem_global); $plug_tem_global='<div style="width:200px;padding:100px 80px;border-radius:200px;margin:100px auto;background-color:#c33;text-align:center;color:#fff;font-family:微軟雅黑;">'.implode("<br><br>",$temarr).'</div>'; } } ``` 這個?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(); } } } ``` 下面就是我不使用插件與使用插件后的效果對比,哈哈~ 從前有座山…… :-: ![](https://img.kancloud.cn/7d/ae/7daed91c4066f095f05d4d92d708ccc7_600x400.png) :-: ![](https://img.kancloud.cn/8a/ee/8aeea17fc20c672f9d6fd0911396a03f_600x400.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看