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!';

谢谢你们!

4

3 回答 3

1

在 PHP 中,错误和异常来自不同的独立世界。查看更多 PHP:异常与错误?

您可以在调用方法之前检查返回的对象GetData()

try {
    if (is_object($m->users()) && ($data = $m->users()->GetData())) {
        print_r( $data );
    }
} catch (Exception $e) {
    echo 'Hey, it's an error man!';
}
于 2012-08-25T07:22:28.843 回答
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');
于 2012-08-25T07:27:34.793 回答
0

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

然而,最佳实践是在尝试对其调用方法之前简单地检查有效对象。

于 2012-08-25T07:27:08.873 回答