【发布时间】:2015-09-19 07:28:38
【问题描述】:
如果之前的某个方法返回null,有没有办法“安全地”链接PHP 中的方法并简单地返回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
}
【问题讨论】:
-
if ($oldPrimaryPhone = $old->getPrimaryPhone()) ... !== $oldPrimaryPhone->getFreeFormNumber() -
即使这些方法具有相同的名称,即使两个对象具有相同的
getFreeFormNumber()值,有时属性存储在索引 0 处的数组中,有时存储为基元价值。因此,我无法比较更高级别的对象。同样,不在我的控制范围内。 -
根据实际的链组合,返回 NullObject 有时是有意义的。
-
@mario,没错。我想找到一种方法让
$old->getPrimaryPhone()->getFreeFormNumber()返回 null 或空对象,而不是抛出错误trying to get property on non object