在PHP中检查链式返回值的最简洁的语法是什么?

时间:2016-11-28 13:46:14

标签: php

如果我需要访问这样的getter链末尾的值:

$employeeFirstName = $company->getEmployee()
    ->getName()
    ->getFirstName()
    ->getSomethingElse()
    ->getEtc();

如果名称,名字,其他内容等等为null,则后续的getter调用将引发异常,因此通常的做法是查看这样的空检查:

if($company->getEmployee()
    && $company->getEmployee()->getName()
    && $company->getEmployee()->getName()->getFirstName()
    && $company->getEmployee()->getName()->getFirstName()->getSomethingElse()
    && $company->getEmployee()->getName()->getFirstName()->getSomethingElse()->getEtc()
) {
    // It's safe to use the value of getEtc()
}

是否有一种更简洁/读者友好的null检查链式get方法?

1 个答案:

答案 0 :(得分:0)

如果它应该是流畅的API ,则这些方法都不应该返回null,而应该抛出一些已定义的异常。这使您可以编写如下代码:

try {
    $foo = $bar->baz()->quux()->blarg()...;
} catch (FooBarBazException $e) {
    $foo = null;
}

如果API不应该流利,你应该逐步编写它,并对可能返回null的每个步骤进行明确的成功检查:

$baz = $foo->bar()->baz();
if (!$baz) {
    return false;  // or whatever
}

$quux = $baz->quux();
if (!$quux) {
    ...
}

...

反复调用每个方法的链越来越长,浪费资源,难以阅读。

相关问题