【发布时间】:2014-02-05 13:08:44
【问题描述】:
我正在尝试制作一个简单的插件系统的原型,我计划在我的一个项目中实施。我有 4 个文件:
Index.phpPlugins/__BASE.phpPlugins/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