处理 PHP 7 返回类型的正确方法

2022-08-30 15:39:26

我正忙于创建一个应用程序,我想使用PHP 7返回类型。现在我读到 php.net,这是一个设计决策,在定义返回类型时不允许返回。null

处理这个问题的正确方法是什么?

一种选择是尝试...捕获块:

public function getMyObject() : MyObject
{ 
     return null;
}

try
{
    getMyObject();
}
catch(Exception $e)
{
    //Catch the exception
}

我对此没有很好的感觉,因为我的代码将是一个巨大的尝试......捕获块,因为我需要写一个尝试...返回对象的每个方法的 catch 块。

Null 对象模式是一个很好的解决方案,但我不喜欢在我的应用程序中的每个对象创建一个的想法。有没有正确的方法来做到这一点?NullObject


答案 1

如果你的代码期望返回一个类的实例,在这种情况下,但它没有,那么这确实是一个例外,应该这样处理。MyObject

但是,您应该自己抛出此异常。

public function getMyObject() : MyObject
{
    throw new MyCustomException("Cannot get my object");
}

然后,您可以捕获该特定异常并相应地继续。


答案 2

我对此没有很好的感觉,因为我的代码将是一个巨大的尝试/捕获块,因为我需要为每个返回对象的方法编写一个try/catch块。

另一种选择(使用您的代码)是始终检查返回值,以免在用作对象时出错。nullnull

使用异常更具表现力,并使错误尽早可见,这是一件好事。因此,要么确保方法始终返回对象,要么在无法实现其协定时引发异常。否则,返回类型没有实际值。


推荐