2017-09-05 81 views
0

我被困在我工作的一個錯誤記錄片的工作,最終卻演化成了以下內容:PHP嘗試捕捉最後發出

$errorMsg = 'No Errors Detected'; 
try{ 
    nonexistentfunction();  //Basically something here will not work 
}catch(Exception $e){ 
    $errorMsg = 'Oh well, something went wrong'; 
}finally{ 
    $this->logger->log($errorMsg); 
} 

然而,每一次記錄儀記錄,提示「無檢測到錯誤',而應該記錄'哦,出錯了',因爲我拋出了一個異常(在這個例子中找不到方法,但是可能會發生任何異常)。

如何獲取catch()塊中的代碼執行?它似乎並沒有執行!

+0

您正在使用什麼版本的PHP? – fubar

+0

你在使用命名空間嗎?嘗試'} catch(\ Exception $ e){' – ishegg

+1

@RahulBhatnagar嘗試使用'throw new \ Exception(「Custom exception!」)''而不是'nonexistentfunction()' –

回答

3

如果你在PHP中調用一個未定義的函數,它會引發一個致命錯誤,而不是一個例外。

因此,您需要捕獲Error類型的對象。或者,您可以捕獲Throwable對象,從ErrorException類都可以擴展。

http://php.net/manual/en/language.errors.php7.php

<?php 

$errorMsg = 'No Errors Detected'; 

try { 
    nonexistentfunction(); 
} 
catch (Throwable $e) { 
    $errorMsg = 'Oh well, something went wrong'; 
} 
finally{ 
    $this->logger->log($errorMsg); 
} 
+0

謝謝,儘管我實際上並沒有調用非存在的函數,但是這個答案讓我更完整地理解了catch爲什麼不起作用,因此被標記爲正確。 –