我已经创建了一个插件系统,我已经在该系统中创建了所有内容,但是,如何包含插件文件来执行它。
我试图创建一个方法,其中包含插件文件来执行它。
- 首先 - :
获取所有插件文件的方法,以index
字开头,表示插件的主文件(i.g.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)
我知道问题发生的原因是,不会创建对象。 并且问题是无法在每个主插件文件中创建对象。
答案 0 :(得分:0)
这可能不是最干净的解决方案,但您可以这样做,而不是尝试引用$plugin
符号(超出插件文件的范围):
$this->addHook('top', test);
或者,您可以在includePlugFiles()
方法中明确创建引用:
public function includePlugFiles()
{
$plugin = $this;
$this->getPluginFiles($this->plugin_folder);
foreach ($this->plugins_path as $dir=>$file) {
include_once (dirname($dir)."/".$file);
}
}