在php中返回值时,返回混合数据类型是不错的做法。我正在开展一个项目,我经常遇到返回id号或null
的方法。我正在通过检查null
来处理null
值,如果是-1
则返回null
。
我发现自己的另一种情况是方法应该做什么并返回一个字符串。但有时候不能返回字符串,因为它没有找到或发生异常。这里最好的事情是什么?返回像'failed'之类的字符串?然后,这会在方法之间创建一个字符串耦合,因为调用方法必须确切地知道要检查的字符串失败消息?
编辑:好的,已经有一些不同的意见了。我喜欢在失败时返回false的想法和实际结果,无论数据类型是成功的。但是......在这方面有什么最佳实践吗?我的意思是,在这些情况下,其他语言的程序员会做什么,例如java和c ++等?
答案 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。这适用于所有类型。
了解更多信息