[英]Unable to catch PHP file_get_contents error using try catch block
[英]Error even when using a Try/Catch block in PHP
我有一個帶有以下代碼的Laravel / PHP應用程序:
try {
//gets the day of the last record for logged in user
$lastRecord = $user->records()->orderBy('date', 'DESC')->first()->date;
//convert to date
$lastTime = \Carbon\Carbon::createFromFormat('Y-m-d', $lastRecord);
}
catch(Exception $e) {
$lastTime = \Carbon\Carbon::now($user->timezone)->addDays(-1);
}
但我仍然收到錯誤:
ErrorException in Habit.php line 104:
Trying to get property of non-object
現在我很困惑。主要思想是有時失敗,然后繼續努力。 為什么它仍然引發錯誤?
只是一個猜測,請嘗試嘗試
try {
//gets the day of the last record for logged in user
$lastRecord = $user->records()->orderBy('date', 'DESC')->first()->date;
//convert to date
$lastTime = \Carbon\Carbon::createFromFormat('Y-m-d', $lastRecord);
}
catch(\Exception $e) {
$lastTime = \Carbon\Carbon::now($user->timezone)->addDays(-1);
}
也就是說,在Exception
前面添加一個領先的名稱空間分隔符。 我的猜測是您在命名空間文件中使用此代碼。 當你做這樣的事情
namespace App\Some\Somenamespace;
...
catch(Exception $e) {
...
PHP假定您想捕獲名稱為App\\Some\\Somenamespace\\Exception
。 由於這不是引發異常,並且全局PHP \\Exception
沒有第二個catch
,PHP抱怨未捕獲的異常。 您需要明確地將該異常稱為全局
catch(\Exception $e) {
或將其導入當前名稱空間
namespace App\Some\Somenamespace\;
use Exception;
...
catch(Exception $e) {
...
FWIW,我一直都在這樣做。 舊習慣很難打破。
異常表明您正在訪問非對象的屬性。 這意味着$user
本身或鏈中的屬性之一都不存在。 通過檢查返回值可以避免這種情況。
但是,如果您仍然想捕獲致命錯誤,則可以安裝全局關閉處理程序,如下所示:
register_shutdown_function( "shutdown_handler" );
function fatal_handler() {
$errfile = "unknown file";
$errstr = "shutdown";
$errno = E_CORE_ERROR;
$errline = 0;
$error = error_get_last();
if( $error !== NULL) {
$errno = $error["type"];
$errfile = $error["file"];
$errline = $error["line"];
$errstr = $error["message"];
error_mail(format_error( $errno, $errstr, $errfile, $errline));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.