2013-04-30 65 views
3

我的理解是,本主题已简要接近here,但我希望了解在PHP中使用多种返回类型的一般做法和不该做的事。 似乎有关于PHP的这个功能的各种意见。PHP最佳实践:使用混合返回类型

我倾向于同意,正如在上面链接的线程中指出的那样,对于错误,使用异常可能更适合;但是,如何返回一个函数,比如两种有意义的值呢?例如,让我们说一个函数,返回所有在房子里关闭的灯(:)是的,我正在这么做!)

本质上,这是我想传达的:如果基本条件不是遇到了,我没有看到前进和计算我的列表,我返回一个布尔值。否则,继续前进,这样做的:

public function getLightsThatAreOff($house) 
    { 
     // if $house itself does not have any power, return true 
     // else 
       //compile an array of lights that are off and return then 
    } 

我认为,上面提到的用例是一个不大不小的最佳点多返回类型。无论哪种情况,如果有人提供关于如何确定是否使用此功能的一般指导方针,我将不胜感激。

谢谢!

+0

我个人说getLightsThatAreOff()当电源接通时也才有意义。当电源关闭时被调用,它会产生无意义的结果,我想说。 – 2013-04-30 05:25:55

回答

6

混合类型并不好,即使记录得很好。例如,如果某个方法正在返回一个数组,但没有返回值,那么它应该是一个空数组,而不是false或其他任何值。 即

array() 
+1

我想保守可能是一个好方法:尽可能避免混合类型? – user2334532 2013-05-02 15:55:41

+1

是的,避免混合 - 大部分时间是可能的 – 2013-05-02 18:32:03

+0

也PHP7严格类型不会允许混合类型或null。 – 2015-09-03 15:32:51

0

这实际上取决于你打算如何使用这些功能。即使你是大型开发团队的一员,只要你有效地记录你的代码,那么你应该能够安全地返回混合类型。如果你为自己开发,那么它真的没关系,只要你知道如何以及在哪里使用你的功能。

尽管从个人经验来看,我会说,只要你能够缓解错误的可能性,你应该这样做。意思是,如果函数的期望返回值是一个数组,则应该返回一个空数组而不是布尔型(false)。这样,即使有人不读你的文档,可能发生的最糟糕的情况是,当他们试图循环访问数组时,没有任何反应,并且脚本继续。如果你不能预见它会导致任何问题,我强烈建议这样做,而不是简单地返回false。如果查询失败,我甚至无法计数当我返回false而不是结果数组时返回“数据库类已损坏”的次数。

+3

无论你是不是无关紧要的团队的一部分,你总是应该以最有意义的方式编写函数,并且具有最少的缺点。混合返回类型的缺点可能是处理调用者返回值的开销。 – deceze 2013-04-30 06:28:55