【问题标题】:Why won't my PHP plugin system work?为什么我的 PHP 插件系统无法工作?
【发布时间】:2014-02-05 13:08:44
【问题描述】:

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

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

索引文件使用我在Plugins 类(__BASE.php) 中定义的函数检查'oncall' 方法是否属于插件文件夹中的一个类。如果它确实存在,它将执行它。

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!

有人可以帮忙吗?谢谢。

【问题讨论】:

    标签: php function class object plugins


    【解决方案1】:

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

    【讨论】:

    • 是的 __BASE.php 位于 Plugins 文件夹中,但您包含在索引页中,而索引页不在。它对我有用。
    猜你喜欢
    • 1970-01-01
    • 2020-01-25
    • 2014-08-30
    • 2016-06-03
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多