简体   繁体   中英

Why won't my PHP plugin system work?

I'm trying to make a prototype of a simple plugin system I plan on implementing into one of my projects. I have 4 files:

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

The index file checks if the 'oncall' method belongs to a class in the Plugins folder using functions I defined in the Plugins class ( __BASE.php ). If it does exist, it will execute it.

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 is the base plugin class which all of the plugins will extend. It has two methods: IsPluginMethod() and GetObject() . IsPluginMethod checks if the method name supplied belongs to a class and GetObject returns an instance of the class the method belongs to.

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 is a sample plugin which prints $this->age which is defined in the Plugins class.

class Sample extends Plugins {

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

This is what I see in index.php:

'oncall' isn't part of a plugin!

Can anyone help? Thanks.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM