尝试捕获异常?

时间:2012-08-25 07:18:27

标签: php

我有一些脚本,调用错误: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!';

谢谢大家!

3 个答案:

答案 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!';
}

答案 1 :(得分: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');

答案 2 :(得分:0)

致命错误与异常不同,通常不会被恢复。然而,它们通常是可以避免的,有时它们可​​以通过PHP5的set_error_handler函数“捕获”。

然而,最佳做法是在尝试调用有效对象之前,先完成检查有效对象的工作。