- 此问题在此处已有答案**:
Is there a "nullsafe operator" in PHP?(3个答案)
两年前关闭了。
我想执行self::container()->get($path);
,但是self::container()
可以返回null
。
在链接函数调用时,有没有更快的方法来避免Call to a member function get() on null
错误,有些函数调用可能返回null而不是对象?
有没有比嘲笑预期对象/成员这一丑陋的变通方法更好的方法?
public static function getDependency($path) {
return self::container() ??
(new class{public function get($path){return null;}})->get($path);
}
我所追求的是类似于C#中的空条件成员访问运算符(?.
)的东西
2条答案
按热度按时间7cwmlq891#
在即将到来的PHP8中,将实现nullsafe_operator,并且如果其中一个调用返回null,则允许对调用链进行断路
koaltpgm2#
从PHP 8.0开始,您可以使用Nullsafe方法和属性来执行以下操作:
self::容器()?-〉get($路径);
否则,您将得到下面的原始答案,因为它针对PHP 7.3:
简短回答:不,PHP 7.3中没有这样的东西。
我会避免像你建议的那样施魔法。
执行:
会更容易阅读/理解。
现在,关于
null
,它已经被它自己的创造者(Tony Hoare)"The Billion Dollar Mistake"描述过了。一个更好的方法是
self::container()
的返回类型为ContainerInterface
,而不可能是null
。尝试返回null
时,它将抛出TypeError
,这可能会被捕获。这样,对->get()
的调用将永远不会发生,因为以前会抛出异常。允许
self::container()
返回类似ContainerInterface|null
的内容将导致所有调用者实现您所建议的逻辑,这也将导致(大量)重复代码。出于同样的原因,为依赖项指定一个特定的返回类型可能会更安全:
否则,您将在
getServiceFoo()
上遇到与self::container()
相同的问题。