PHP -如何捕捉'试图获得非对象的属性'错误


PHP - How to catch a 'Trying to get property of non-object' error

我试图抓住'试图获得非对象的属性'错误与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是一种异常情况,那么异常当然是合适的。