PHP - 在null

时间:2016-02-11 12:59:59

标签: 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函数(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,代码现在可以正常运行。

1 个答案:

答案 0 :(得分:2)

您不清楚Dom课程中的内容。所以要弄清楚问题对我们所有人来说都有点困难。

请在您的文件中添加此代码以检查所有错误,并且您可以自己获得解决方案。

<?php
error_reporting(-1);
ini_set('display_errors', 1);

........ rest of your code

注意:请在我向您展示的<?php后面的文件中添加此代码。