我有一些脚本,调用错误: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 :(得分: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函数“捕获”。
然而,最佳做法是在尝试调用有效对象之前,先完成检查有效对象的工作。