如果我需要访问这样的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方法?
答案 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) {
...
}
...
反复调用每个方法的链越来越长,浪费资源,难以阅读。