考慮下面的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
。有什麼方法可以檢測這些錯誤嗎? 這種類型的錯誤是否有特殊名稱?
好吧,它不是一個解析錯誤,它是完全有效的語法。這也是它出現致命錯誤的原因,因爲它不可恢復。 您也可以使用php -l檢查代碼中的這些錯誤。 解析器仍然會給出錯誤,因此不會運行時「錯誤解析broken_parser.php」 – 2011-08-19 08:07:39