我有以下三个类:
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
函数(Dom_Form_Section
中的一个和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
,代码现在可以正常运行。
答案 0 :(得分:2)
您不清楚Dom
课程中的内容。所以要弄清楚问题对我们所有人来说都有点困难。
请在您的文件中添加此代码以检查所有错误,并且您可以自己获得解决方案。
<?php
error_reporting(-1);
ini_set('display_errors', 1);
........ rest of your code
注意:请在我向您展示的<?php
后面的文件中添加此代码。