有没有办法安全地#34; PHP中的链式方法,如果以前的某个方法返回null
,只返回null
?否则,将抛出错误:trying to get property on non-object
;
例如,以下代码使用QuickBooks SDK检查客户的电话号码是否已更改。我无法控制这些方法。
$customer->getPrimaryPhone()
将始终返回一个对象,因为该格式不会以其他方式提交,但如果之前没有电话号码,则$old->getPrimaryPhone()
可能会返回null
。
获取电话号码需要以下内容:
$old->getPrimaryPhone()->getFreeFormNumber()
如果getPrimaryPhone()
返回null,则会抛出错误。
我的问题是:在下列情况下我如何避免代码重复?
if (!empty($old->getPrimaryPhone())) {
if ($customer->getPrimaryPhone()->getFreeFormNumber() !== $old->getPrimaryPhone()->getFreeFormNumber()) {
// Repetive code here
}
} else {
// Repetive code here
}
答案 0 :(得分:4)
我倾向于在equals
课程中实施PhoneNumber
方法(或其他任何方法)。例如
public function equals(PhoneNumber $otherNumber) {
return $otherNumber !== null && $this->getFreeFormNumber() === $otherNumber->getFreeFormNumber();
}
然后你可以简单地使用
if (!$customer->getPrimaryPhone()->equals($old->getPrimaryPhone())
如果您有其他需要应用的逻辑(如您对数组的评论所示),您可以在equals
方法中轻松实现。