php返回混合数据类型 - 好的或坏的

时间:2010-08-19 19:30:45

标签: php

在php中返回值时,返回混合数据类型是不错的做法。我正在开展一个项目,我经常遇到返回id号或null的方法。我正在通过检查null来处理null值,如果是-1则返回null

我发现自己的另一种情况是方法应该做什么并返回一个字符串。但有时候不能返回字符串,因为它没有找到或发生异常。这里最好的事情是什么?返回像'failed'之类的字符串?然后,这会在方法之间创建一个字符串耦合,因为调用方法必须确切地知道要检查的字符串失败消息?

编辑:好的,已经有一些不同的意见了。我喜欢在失败时返回false的想法和实际结果,无论数据类型是成功的。但是......在这方面有什么最佳实践吗?我的意思是,在这些情况下,其他语言的程序员会做什么,例如java和c ++等?

7 个答案:

答案 0 :(得分:8)

我通常做的是如果方法有效,则返回值,如果失败则返回FALSE。这就是许多PHP的内置方法所做的事情。那么,你可以检查函数是否返回FALSE。

答案 1 :(得分:5)

Null是一个相当常见的返回值,表示没有返回值。如果函数想要根本不返回任何ID,则应返回null(不是“失败”或-1)。

如果例外未找到ID,则应抛出异常。

答案 2 :(得分:4)

我认为返回混合数据类型是不好的做法。正如您所指出的那样,可以考虑代码的可读性和可维护性。确保你评论你要回归的内容以及为什么,我认为这将是最重要的。如果你期望返回一个int并且你返回-1而不是null,请注释,这样你(或其他人)就不会发疯,试图找出你想要做的事情。

答案 3 :(得分:4)

我同意上述答案。

但是,如果你设计一个完整的系统,那么“最佳实践”就是使用异常:总是返回有意义的东西,如果出现异常,则抛出异常。然后呼叫者可以处理他知道如何面对的情况,并让更高的人抓住其余部分。

答案 4 :(得分:3)

至少今天在2013年,回归混合型是不好的。轰!要走的路是分开这个:

BAD,混合返回式样式:

function checkResult($data)
{
    if ($data) {
        ...
        return $stuff;
    } else {
        return false;
    } 
}

人们需要额外的逻辑来处理checkRsult(),他们永远不知道究竟会返回什么类型。

GOOD,明确修复了返回类型样式:

也许这个例子不是很好,但它显示了可行的方法。

function doesResultExist($data)
{
    if ($data) {
        return true;
    }
    // default return
    return false;
}

function getResultData()
{
    ...
    return $stuff;   
}

答案 5 :(得分:0)

返回混合值的函数不被认为是坏的。实际上这就是php的美妙之处,它是一种动态语言。所以要做的就是在失败时返回false,如果函数正确执行则返回所需的值,

if( false == ( $data = do_something() ) ) return false;
else print_r( $data );

答案 6 :(得分:0)

此答案需要更新。从PHP 7.1起,有更好的解决方案:

这是我要返回字符串但它可能为空的方法:

    function myFunction(): ?string{
        //do things here and return string or null
    }

?在字符串之前,本质上意味着null或字符串作为返回类型。这使您可以使用有限的返回类型,但仍允许为null。这适用于所有类型。

您可以在此处PHP Manual - returning values

了解更多信息