我已经创建了一个插件系统,并且我已经在该系统中创建了所有内容,除了如何包含插件文件来执行它。
我试图创建一个方法,它正在包含插件文件来执行它。
-- 首先 -- :
获取所有插件文件的方法,以index
表示插件主文件的单词开头(ig index-pluginName.php),并将路径和文件名添加到数组中。
public function getPluginFiles($plugin_folder) {
$dir = opendir($plugin_folder);
while ($files = readdir($dir)) {
if ($files == '.' || $files == '..')
continue;
if (is_dir($plugin_folder.'/'.$files))
$this->getPluginFiles($plugin_folder.'/'.$files);
if (preg_match('/^[index]+/i', $files)) {
$this->plugins_path[$plugin_folder.'/'.$files] = $files;
}
}
closedir($dir);
}
-- 其次 -- :
包含所有要执行的插件主文件的方法,该方法从之前创建的数组中获取插件文件的路径和名称。
public function includePlugFiles() {
$this->getPluginFiles($this->plugin_folder);
foreach ($this->plugins_path as $dir=>$file) {
include_once (dirname($dir)."/".$file);
}
}
另请参阅插件文件中存在的代码示例:
function test() {
echo " This is first plugin <br/>";
}
$plugin->addHook('top', test); // parameters(top=position, test=callback)
现在,当我创建对象的一个实例时,它就是这种形式。
$plugin = new plugin;
$plugin->includePlugFiles();
但毕竟这一切,显示错误信息
Fatal error: Call to a member function addHook() on a non-object in .... projects\plugins\index-test.php on line 7
这是第 7 行的代码:
$plugin->addHook('top', test); // parameters(top=position, test=callback)
我知道问题的发生是因为不会创建对象。问题是无法在每个主插件文件中创建对象。