在下面這個簡單的模擬PHP類中,我有兩種將JavaScript文件添加到頁面的方法。如何從父類繼承的子類PHP類將值添加到父類數組屬性中?
目標是在我的應用程序插件系統中使用此插件,以便將擴展此類PluginCore
類的用戶插件將能夠調用一個函數,允許它們將JavaScript文件從那裏插入到主應用程序中。
PluginCore
有一個數組$this->jsFilesArray
,它用於存儲應該包含在頁面中的所有JavaScript文件。
有一個setter方法來向這個數組添加新的JS文件。
還有一種方法將遍歷數組,並將每個JavaScript文件插入到帶有腳本標記的頁面中。
我現在的問題是,我怎麼能允許從PluginCore
類擴展任何插件類是能夠以某種方式到達那裏加入到父類JS文件$this->jsFilesArray
陣列,這樣當核心類插入文件到頁面,它會包含任何調用某種函數來添加文件的插件JS文件?
我的一個想法是使用WordPress風格的插件/鉤子功能,以便插件基本上會調用一個從PluginCore
類觸發的鉤子並將JS文件插入到頁面中。子插件會簡單地鉤入該動作事件。
這種方法可行,但我希望找到其他方法來實現我想要的結果以進行學習,並測試不同的方法。
另一個想法是讓子插件有一個addJsFile()
函數,該函數在調用時會爲該插件返回一個JS文件數組。然後,父類可以在子類上調用此方法,併爲每個插件執行此操作,同時將所有這些方法的結果組合到一個數組中,並將其傳遞給PluginCore類。
那麼我該如何做到這一點?
模擬類代碼給出它可能看起來像什麼?
class PluginCore {
public $jsFilesArray = array();
public function __construct() {
$this->addJsFile('jsFileCOre1', 'http://file-path-url-to-js-file/jsfilecore1.js');
}
public function addJsFile($jsFileKey, $jsFileUrl) {
if(! isset($this->jsFilesArray[$jsFileKey])){
$this->jsFilesArray[$jsFileKey] = $jsFileUrl;
}
}
public function loadJsFilesIntoDom() {
foreach($jsFiles as $fileKey => $fileValue){
echo '<script type="text/javascript" src="'.$fileValue['fileUrl'].'"></script>\n';
}
}
}
謝謝,我甚至沒有考慮過這個選項,直到現在! – JasonDavis