我創建了一個插件系統,並且我已經在該系統中創建了所有內容,除了我如何包含插件文件來執行它。在插件系統中包含插件文件的正確方法
我試圖創建一個方法,這是做包括插件文件來執行它。
- 首先 - :
是讓所有的插件文件,以及與index
字指示插件的主要文件(IG指數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)
我知道問題發生的原因,該對象將不被創建。 問題是無法在每個主插件文件中創建對象。
謝謝,您的解決方案非常好,它工作正常。但到目前爲止,我不明白它是如何工作的。你能否向我解釋它現在如何正確工作? –
另外我修改了'$ this-> addHook('top',test);''到'$ plugin-> addHook('top',test);'並且也能正常工作。這個修飾符有問題嗎? –
@LionKing它會變得更加明顯,爲什麼當你添加'error_reporting(-1); ini_set('display_errors','On');'在腳本的頂部;在插件代碼文件中,沒有稱爲'$ plugin'的變量,因爲它定義在'includePlugFiles()'方法之外。 –