2014-02-05 106 views
0

我試圖製作一個簡單插件系統的原型,我打算將其實施到我的一個項目中。我有4個文件:爲什麼我的PHP插件系統不能工作?

  • Index.php
  • Plugins/__BASE.php
  • Plugins/Sample.php

索引文件檢查是否 'OnCall中' 的方法屬於一類在使用I中所定義的功能的插件文件夾Plugins類(__BASE.php)。如果它確實存在,它將執行它。

require_once 'Plugins/__BASE.PHP'; 

$func = 'oncall'; 
$plugins = new Plugins(); 

if($plugins->IsPluginMethod($func)) { 
    $obj = $plugins->GetObject($func); 
    call_user_func(array($obj, $func)); 
} 
else 
    echo "'$func' isn't part of a plugin!"; 

__BASE.php是所有插件將擴展的基本插件類。它有兩種方法:IsPluginMethod()GetObject()。 IsPluginMethod檢查提供的方法名是否屬於一個類,GetObject返回方法所屬類的實例。

class Plugins { 

    public $age = "100"; 

    public function IsPluginMethod($func) { 
     foreach(glob('*.php') as, $file) { 
      if($file != '__BASE.php') { 
       require_once $file; 
       $class = basename($file, '.php'); 
       if(class_exists($class)) { 
        $obj = new $class; 
       if(method_exists($obj, $func)) 
        return true; 
       else 
        return false; 
      } 
     } 
    } 
} 

    public function GetObject($func) { 
     foreach(glob('*.php') as $file) { 
      if($file != '__BASE.php') { 
       require_once $file; 
       $class = basename($file, '.php'); 
       if(class_exists($class)) { 
        $obj = new $class; 
        return $obj; 
       } 
      } 
     } 
    } 
} 

Sample.php是一個插件示例,它打印在Plugins類中定義的$ this-> age。

class Sample extends Plugins { 

    public function oncall() { 
     echo "Age: {$this->age}"; 
    } 
} 

這是我看到的index.php:

'oncall' isn't part of a plugin! 

誰能幫助?謝謝。

回答

0

在__BASE.php文件更改(glob('*.php')glob('Plugins/*.php')

+0

我不知道怎麼說的工作,但它沒有。謝謝。 – James

+0

是__BASE.php位於Plugins文件夾中,但您包含在索引頁面中。這個對我有用。 – NemanjaLazic

相關問題