Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-如何捕捉';正在尝试获取非对象的属性';错误_Php_Try Catch - Fatal编程技术网

PHP-如何捕捉';正在尝试获取非对象的属性';错误

PHP-如何捕捉';正在尝试获取非对象的属性';错误,php,try-catch,Php,Try Catch,我试图用try/catch语句捕获“试图获取非对象的属性”错误,但是失败了,我仍然得到一个PHP错误。我使用的是: try{ $id = Model()->find('id=1')->id; }catch(Exception $e){ echo 'failed'; } 我的find函数返回一个对象(活动记录),我可以通过object prop访问id列 但是,如果找不到AR,它将是空对象。我以为try语句会抓住这个。我自己的一个解决办法是使用isset()。但是我不明白为什

我试图用try/catch语句捕获“试图获取非对象的属性”错误,但是失败了,我仍然得到一个PHP错误。我使用的是:

try{
  $id = Model()->find('id=1')->id;
}catch(Exception $e){
  echo 'failed';
}
我的find函数返回一个对象(活动记录),我可以通过object prop访问id列


但是,如果找不到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是一种例外情况,那么异常肯定是合适的。

谢谢。我错误地认为异常和错误是同一个怪物不管怎样,这样做的方法是测试异常或任何
//处理这种情况部分
应该做的事情。我认为这应该是laravel的一个强制性功能