2016-02-11 45 views
1

我有以下三類: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,代碼現在可以正常工作。

+0

你會得到任何錯誤?在PHP日誌或顯示? – Naumov

+2

de Dom類是什麼?並且你沒有得到任何新的Dom_Form();行上的錯誤? – TJVB

+0

不,錯誤在調用'Dom_Form_Section :: addElem()'方法之前觸發。顯示的確切錯誤如下:*致命錯誤:調用成員函數addElem()null在/位置/ of/the/Dom_Form/class/file /在第57行*我注意到在代碼中的確切位置錯誤被解僱 –

回答

2

目前還不清楚你在Dom班有什麼。所以要弄清楚這個問題對我們所有人來說都有點困難。

請將該代碼添加到您的文件上以檢查所有錯誤,並且可能是您自己可以得到該解決方案的。

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

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

注:請你只<?php後,在頂部的文件添加此代碼,我已經證明給你。

+0

酷你是對的 – devpro

相關問題