我试图抓住'试图获得非对象的属性'错误与try/catch语句,但它失败了,我仍然得到一个PHP错误。我使用as:
try{
$id = Model()->find('id=1')->id;
}catch(Exception $e){
echo 'failed';
}
我的find函数返回一个对象(活动记录),我可以访问id列,如通过object prop所示。
但是,如果没有找到AR,它将是空对象。我认为try语句会捕捉到这个。我自己的一种解决方法是使用isset()。但是我很困惑为什么try语句不接受并捕获这个错误。
try..catch
处理抛出的异常。错误不是例外。您可以关闭错误,但请不要这样做。相反,请正确检查您得到的内容:
$result = Model()->find('id=1');
if ($result) {
$id = $result->id;
} else {
// handle this situation
}
模型需要能够抛出异常。
你的模型可能是这样的:
class Model{
public function find($id){
$result = //do stuff to find by id
if (!isset($result)){
throw new Exception("No result was found for id:$id");
}
return $result
}
}
然后使用try/catch块:
try{
$id = Model()->find('id=1')->id;
}catch(Exception $e){
echo 'failed';
}
然而,异常应该只在"异常"的情况下抛出。我不认为使用异常来指导程序流程是正确的方法。
话虽如此,如果在尝试检索ID属性时返回NULL是一种异常情况,那么异常当然是合适的。