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!
誰能幫助?謝謝。
我不知道怎麼說的工作,但它沒有。謝謝。 – James
是__BASE.php位於Plugins文件夾中,但您包含在索引頁面中。這個對我有用。 – NemanjaLazic