2010-07-29 39 views
1

考慮下面的PHP類:如何判斷PHP致命錯誤是否真的是隱藏的語法錯誤,它們何時發生?

class someObject { 
    public function broken(){ 
     return isset($this->something()) ? 'worked' : 'didnt'; 
    } 

    public function something(){ 
     return true; 
    } 

    public function notBroken(){ 
     print('worked'); 
    } 
} 

比方說,我現在做的事:

$obj= new someObject(); 
$obj->broken(); 

考慮到你不能傳遞一個函數調用isset()函數,(它的副產品參考),我預計這會失敗並出現致命錯誤:PHP Fatal error: Can't use method return value in write context這很好,並且是預期的。

然而,比方說我現在做的事:

$obj= new someObject(); 
$obj->notBroken(); 

考慮,我不打broken()在此次執行中的任何地方,並在broken()錯誤是致命錯誤(而不是解析錯誤) ,我不會期望「工作」的正常輸出。 FALSE!它仍然會產生致命錯誤。

問:

除了剛剛不是在寫有錯誤代碼,是否有未解析錯誤,但依舊會觸發一個運行時錯誤的任何其他錯誤?我只知道:PHP Fatal error: Can't use method return value in write context。有什麼方法可以檢測這些錯誤嗎? 這種類型的錯誤是否有特殊名稱?

+0

好吧,它不是一個解析錯誤,它是完全有效的語法。這也是它出現致命錯誤的原因,因爲它不可恢復。 您也可以使用php -l檢查代碼中的這些錯誤。 解析器仍然會給出錯誤,因此不會運行時「錯誤解析broken_parser.php」 – 2011-08-19 08:07:39

回答

1

此特定行爲的原因可能是isset()是一種語言結構,而不是在運行時解釋的正常函數。所以它的原因是種解析錯誤

雖然我對此沒有深入的瞭解,但我不知道這類錯誤是否具有特定的名稱。

相關問題