我正忙着创建一个应用程序,我想使用PHP 7返回类型.现在我在php.net上读到,这是一个设计决定,null
在定义返回类型时不允许返回.
处理这个问题的正确方法是什么?
一个选项是try ... catch块:
public function getMyObject() : MyObject { return null; } try { getMyObject(); } catch(Exception $e) { //Catch the exception }
我对此没有很好的感觉,因为我的代码将是一个巨大的尝试... catch块因为我需要为每个返回对象的方法编写一个try ... catch块.
该空对象模式是一个很好的解决办法,但我不喜欢这个主意,以创建一个NullObject
在我的应用程序的每个对象.有没有正确的方法来做到这一点?
如果你的代码希望返回一个类的实例,在这种情况下MyObject
,但它没有,那么这确实是一个例外,应该这样处理.
但是,您应该自己抛出此异常.
public function getMyObject() : MyObject { throw new MyCustomException("Cannot get my object"); }
然后,您可以捕获该特定异常并相应地继续.
我对此没有很好的感觉,因为我的代码将是一个巨大的try/catch块,因为我需要为每个返回对象的方法编写一个try/catch块.
替代方法(使用您的代码)将始终检查返回的值,null
以避免错误null
用作对象.
使用异常更具表现力,并且可以及早发现错误,这是一件好事.因此,要么确保您的方法始终返回一个对象,要么在它无法履行合同时抛出异常.否则返回类型没有实际值.
您可以使用Option
数据类型.
它是一种具有Something
或Nothing
作为包裹值的类型.
你可以找到更详尽的描述在这里和PHP的开放实现一个在这里
PS请不要为这种逻辑使用异常,输出参数或其他方法,这对于工作来说是错误的工具.