2016-03-20 44 views
0

我试图做出一些感觉出以下简写PHP速记ifelse理解

$state = $account->getCity() ? $account->getCity()->getStates() : null; 

我的理解是正确的?

如果$account->getCity()存在的$account->getCity()->getStates()的值赋给$state变量其他分配是null

原因,我问这个是因为我米得到的错误

Error: Call to a member function getCity() on a non-object

如果代码$state = $account->getCity() ? $account->getCity()->getStates() : null;不检查看看$account->getCity()是否为空,那我该如何检查它。

我想实现的输出是

如果$account->getCity()不为空分配的$account->getCity()->getStates()$state其他值只是让它空

希望我不听起来太混乱了:)

+0

你问的是*三元操作符*。这个错误并不是你的三元运算符是错的,而是你试图使用一个设计用于非物体对象上的方法的事实。你需要检查你定义'$ account'的位置,并确保它是一个对象,你可以在 – Qirel

+0

@Qirel上使用getCity()方法,谢谢,我可以证实'$ account'是一个对象,有时候'getCity()'是空的,有时它不是,当它的'null'时抛出错误,这就是我想要处理的。我希望当'$ account-> getCity()'为'null'时'$ state'为null。 – Saadia

+0

尝试'!empty($ account-> getCity())? $ account-> getCity() - > getStates():null;'代替。 – Qirel

回答

0

您目前正在使用称为“三元操作符”的简写。但是,您正在使用$account->getCity()method来尝试并检查$account->getCity()是否存在,导致此问题。

更好的做法是使用isset($account->getCity())(!empty($account->getCity()))来评估它是否存在。值得注意的是,isset()将检查它是否存在,其中empty()将检查它是否存在AND值被填充。如意见所述,您可能还需要检查object实际上是object,可以使用is_object($object)完成,例如使用(is_object($account) && !empty($account->getCity())

发现的一个常见问题是可能会分配变量或对象,但内容为空,类似于使用$variable = '';。使用empty()进行检查可以为您解决路上遇到的这个问题带来的痛苦。

另外一个值得注意的是,尽管三元运算符非常棒,但在提供truefalse条件时最好使用它们。如果您坚持,请尽量至少在操作中使用null代替''

+0

非常感谢,对于细节,非常感谢 – Saadia