2014-02-05 59 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

相关问题