PHP外掛系統的實現(二):獲取全部外掛資訊

VeryCool發表於2021-06-15

開始之前我們需要先擴充一下類的註冊方法和執行方法,然後思考一下如何獲取外掛和如何觸發.

 <?php 

class PluginManager{
    /**
      * 已經上班的員工/已經啟用的外掛:用來監聽or監控
      * @access private
      * @var array
   */
    private $_staff = [];
    /**
      * 建構函式
      *  
      * @access public
      * @return void
     */
    public function __construct(){

    }

    public function detector(){
        //主要功能為將外掛需要執行功能放入  $_staff
    }

    public function trigger(){
      //主要功能為 $_staff 中獲取需要執行的功能進行執行
    }
}

我們的類的基礎函式已經擴充,現在我們實現具體的方法detector意思為探索,探索第三方外掛,我們假定外掛目錄在根目/plugin 資料夾中

    public function detector(){
    # 獲取全部外掛的名稱和資訊 我只是簡單獲取了路徑和目錄名.
    # 不滿足可以在目錄下建立 config.php 來設定一些引數. 比如說狀態
    # 暫時沒有區分外掛是否是活躍的還是停止的
     $plugins = $this->get_active_plugins();

    }

    public function get_active_plugins(){
    # 既假定了外掛在根目錄的/plugin
    # 我們再次假定外掛的入口和外掛資料夾的名字是一樣的
    # 既假定了外掛在根目錄的/plugin
    # 注意:這個執行檔案我放在了根目錄 以下路徑請根據實際情況獲取

    $plugin_dir_path = '.'.DIRECTORY_SEPARATOR.'plugin'.DIRECTORY_SEPARATOR;

    $plugin_dir_name_arr = scandir($plugin_dir_path);

    $plugins = array();
    foreach($plugin_dir_name_arr as $k=>$v){
      if($v=="." || $v==".."){continue;}
          if(is_dir($plugin_dir_path.$v)){
              $path = $plugin_dir_path.$v.DIRECTORY_SEPARATOR.$v.'.php';
              $plugins[] = ['name'=>$v,'path'=>$path];
          }

     }
          return $plugins;
    }
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章