捕获'调用非对象上的成员函数'的最安全方法

时间:2014-07-16 15:58:42

标签: php magento

继承了一段代码,其中插件的更新已经开始导致此错误

Fatal error: Call to a member function getId() on a non-object in...

有问题的行是$shippingId = $order->getShippingAddress()->getId();

对周围代码的更新意味着此函数返回任何内容都没有问题,其余代码可以在$shippingId不存在的情况下运行

我需要的是一种说法的方法

if ($shippingId = $order->getShippingAddress()->getId() WORKS)
  do_these_things()

然后而不是错误只是继续进行

2 个答案:

答案 0 :(得分:2)

我会这样做:

if (isset($order->getShippingAddress()) && is_object($order->getShippingAddress()) ) {
    /* It is an object and it isn't null */
} else {
    /* It doesn't */
}

isset()检查表达式是否为空且具有值(以避免空值)和is_object()检查这样的表达式是否为对象。

答案 1 :(得分:0)

您可以使用arielnmz提到的方法,也可以使用自定义异常处理程序。

try{
if ($shippingId = $order->getShippingAddress()->getId() WORKS)
   do_these_things();
}
catch(Exception e){
//Echo out the error msg or save it on your error log stash. up to you
   $error_msg=$e->getMessage();
}
//your regular codes

使用这种方式,如果try块中存在错误,则会在catch块上捕获错误,并且您的代码将继续执行正常的执行模式。