我有以下三類:PHP - 調用成員函數上的空
class Dom_Form_Section extends Dom {
/* ... code ommited ... */
public function addElem($Elem) {
if (is_a($Elem, 'Dom_Form_Elem')) $FormElem=$Elem;
else $FormElem=Dom_Form_Elem::create(array(), $Elem);
if ($FormElem !== false) $this->FormElems[]=$FormElem;
return $FormElem;
}
}
class Dom_Form extends Dom {
private $FormSections=array();
/* ... code ommited ... */
public function addElem($Elem) {
if (is_a($Elem, 'Dom_Form_Elem')) $FormElem=$Elem;
else $FormElem=Dom_Form_Elem::create(array(), $Elem);
if ($FormElem !== false) {
if (empty($this->FormSections)) $Section=$this->addSection();
else $Section=$this->FormSections[count($this->FormSections)];
return $Section->addElem($FormElem); // !!! this is where the error fires
} else return false;
}
public function addSection($SectionData=array()) {
$id=$this->FormId."-section-".count($this->FormSections);
if (!is_array($SectionData)) $SectionData=array();
$FormSection=new Dom_Form_Section($SectionData, $id);
$this->FormSections[]=$FormSection;
return $FormSection;
}
}
class Dom_Form_Elem extends Dom {
public static function create($data, $Elem) {
if (!is_a($Elem, 'Dom')) return false;
else {
$FormElem=new Dom_Form_Elem($data, $Elem);
return $FormElem;
}
}
/* ... code ommited ... */
}
如果我運行下面的代碼:
$Form=new Dom_Form();
$Form->addElem($Input); // $Input is of 'Dom'
我收到以下錯誤:
Fatal error: Call to a member function addElem() on null
如果我在兩個addElem
函數中包含一些回聲(012中的那個和Dom_Form
)他們都開火,但錯誤仍然存在。它看起來好像我在某處做循環,這就是爲什麼我得到錯誤。
此外,如果我var_dump $Section
變量的內容,就在錯誤觸發之前,它是一個有效的Dom_Form_Section
對象。當我嘗試調用Dom_Form_Section::addElem()
方法時,錯誤會觸發。
代碼有什麼問題?
編輯:
的幫助下@ A-2-A我已經想通了,問題是這一行:
else $Section=$this->FormSections[count($this->FormSections)];
我試圖訪問一個未聲明的成員$this->FormSections
陣列。通過將count($this->FormSections)
更改爲count($this->FormSections)-1
,代碼現在可以正常工作。
你會得到任何錯誤?在PHP日誌或顯示? – Naumov
de Dom類是什麼?並且你沒有得到任何新的Dom_Form();行上的錯誤? – TJVB
不,錯誤在調用'Dom_Form_Section :: addElem()'方法之前觸發。顯示的確切錯誤如下:*致命錯誤:調用成員函數addElem()null在/位置/ of/the/Dom_Form/class/file /在第57行*我注意到在代碼中的確切位置錯誤被解僱 –