如何安全地链接方法?

时间:2015-07-01 23:17:10

标签: php laravel-5

有没有办法安全地#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
}

1 个答案:

答案 0 :(得分:4)

我倾向于在equals课程中实施PhoneNumber方法(或其他任何方法)。例如

public function equals(PhoneNumber $otherNumber) {
    return $otherNumber !== null && $this->getFreeFormNumber() === $otherNumber->getFreeFormNumber();
}

然后你可以简单地使用

if (!$customer->getPrimaryPhone()->equals($old->getPrimaryPhone())

如果您有其他需要应用的逻辑(如您对数组的评论所示),您可以在equals方法中轻松实现。