为什么赢了';我的PHP插件系统不能工作吗?

为什么赢了';我的PHP插件系统不能工作吗?,php,function,class,object,plugins,Php,Function,Class,Object,Plugins,我正在尝试制作一个简单插件系统的原型,我计划在我的一个项目中实现它。我有4个文件: Index.php Plugins/\uu BASE.php Plugins/Sample.php 索引文件使用我在Plugins类(\uu BASE.php)中定义的函数检查“oncall”方法是否属于Plugins文件夹中的类。如果它确实存在,它将执行它 require_once 'Plugins/__BASE.PHP'; $func = 'oncall'; $plugins = new Plugin

我正在尝试制作一个简单插件系统的原型,我计划在我的一个项目中实现它。我有4个文件:

  • Index.php
  • Plugins/\uu BASE.php
  • Plugins/Sample.php
索引文件使用我在
Plugins
类(
\uu BASE.php
)中定义的函数检查“oncall”方法是否属于Plugins文件夹中的类。如果它确实存在,它将执行它

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!";
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;
                }
            }
        }   
    }
}
php是一个样例插件,它打印Plugins类中定义的$this->age

class Sample extends Plugins {

    public function oncall() {
        echo "Age: {$this->age}";
    }
}
这是我在index.php中看到的:

'oncall' isn't part of a plugin!

有人能帮忙吗?谢谢。

在\uu BASE.php文件中将
(glob('*.php')
更改为
glob('Plugins/*.php')
是的\uu BASE.php在Plugins文件夹中,但你被包含在索引页中,而不是。这对我有用。