【发布时间】:2016-03-19 23:52:09
【问题描述】:
我正忙于创建应用程序,我想使用 PHP 7 返回类型。现在我在 php.net 上读到,在定义返回类型时,不允许返回 null,这是一个设计决定。
处理这个问题的正确方法是什么?
一个选项是 try...catch 块:
public function getMyObject() : MyObject
{
return null;
}
try
{
getMyObject();
}
catch(Exception $e)
{
//Catch the exception
}
对此我感觉不太好,因为我的代码将是一个巨大的 try...catch 块,因为我需要为每个返回对象的方法编写一个 try...catch 块。
Null Object Pattern 是一个很好的解决方案,但我不喜欢为我的应用程序中的每个对象创建一个NullObject 的想法。
有正确的方法吗?
【问题讨论】:
-
返回
false?简单的数据类型,仍然清楚它未能初始化对象。 -
php 7.1 接受了 void 返回类型。所以它会在未来出现。
-
明智的解决方案是确保
getMyObject返回实际对象。看起来您的对象可能处于次优的无效状态。但是在不了解您的代码的情况下很难猜测。 -
void返回类型与本案例无关 -
我真的不明白这个问题,但不管它可能是什么:你永远不应该随便捕获
Error异常。除非您有一些非常特殊的情况,否则您的应用程序应该只在一个地方捕获这些:顶级异常处理程序。我认为您在这里寻找的是简单地省略类型注释。这仍然是允许的。如果您的返回是“object or null”,那么这就是您应该做的(直到我们引入可空类型)。