2012-08-25 54 views
1

我有一些腳本,這叫一個錯誤:Fatal error: Call to a member function GetData() on a non-object in ...。我試圖抓住這個錯誤,但它不起作用,請看下面的代碼:嘗試捕捉異常?

try { 

    if ($data = $m->users()->GetData()) { 

    print_r($data); 

} 

} 
catch (Exception $e) { 

    echo 'Hey, it is an error man!'; 

} 

如何捕捉它?關閉所有在PHP中的錯誤是不可能的。我的意思是有時候我真的需要這個錯誤。

UPD 1.好了,解決方法很簡單:

if (is_object($m->users()) && ($data = $m->users()->GetData())) { 
    print_r($data); 
} else { 
echo 'Hey, it is an error man!'; 

謝謝大家!

+0

首先,呼應 '嘿,這是一個錯誤的人!';應該回聲「嘿,這是一個錯誤的人!」; –

+0

對不起,我正在輸入它,而不是複製過去。 –

回答

1

在PHP中,錯誤和異常來自不同的世界。看起來更 PHP: exceptions vs errors?

您可以檢查返回的對象調用方法之前GetData()

try { 
    if (is_object($m->users()) && ($data = $m->users()->GetData())) { 
     print_r($data); 
    } 
} catch (Exception $e) { 
    echo 'Hey, it's an error man!'; 
} 
+0

真的,這是我的錯,該死的,我能否避免這個消息,除了PHP的使用配置?我試着如果/別的,但它是......同樣的t-r-o-u-b-l-e。 –

+0

查看更新的答案 – ruX

+0

是的,這很有幫助,但仍有一點奇怪,如果它不是一個對象,它就什麼都沒有回聲(如果它真的會很高興)。 –

0

致命錯誤是不一樣的例外,他們通常不會恢復。但是,它們通常是可以避免的,有時它們通過PHP5的set_error_handler函數「捕捉」。

然而,最好的做法是在嘗試調用有效對象之前簡單地執行檢查有效對象的工作。

1

使用以下來避免你的錯誤,你應該使用關機錯誤處理程序。

try { 

    $obj = $m->users(); 
    if ($data =$obj->GetData()) { 

    print_r($data); 

} 

} 
catch (Exception $e) { 

    echo 'Hey, it's an error man!'; 

} 

//關閉錯誤處理程序

function shutdownErrorHandler() { 
    $error = error_get_last(); 
    if ($error !== NULL) { 
     echo "Error: [SHUTDOWN] error type: " . $error['type'] . " | error file: " . $error['file'] . " | line: " . $error['line'] . " | error message: " . $error['message'] . PHP_EOL; 
    } else { 
     echo "Normal shutdown or user aborted"; 
    } 
} 

register_shutdown_function('shutdownErrorHandler');