我应该使用哪种函数方法?

5

这是一个非常基础的问题,但我想要专家建议,所以在这里发布。

这里有两个函数,它们之间有什么区别?它们都是等效高效并包含最佳实践吗?还是其中一个更适合在编程中使用?

function is_numeric($number)
{
    if(!preg_match("/^[0-9]+$/",$number))
        return false;
    return true;
}

function is_numeric($number)
{
    if(preg_match("/^[0-9]+$/",$number))
        return true;
    else
        return false;
}
6个回答

16

一些编码规范指出,第一个分支应该是更可能发生的情况,而else分支则应处理更为异常的情况。

但这完全是玄学,选择任何你想要的都可以。

根据我的个人意见,最好使用

function is_numeric($number)
{
    return preg_match("/^[0-9]+$/",$number);
}

因为 preg_match 返回一个布尔值。


是的, 我也赞成。 非常聪明的回答。谢谢穆勒先生。 - Gaurav Sharma
1
实际上,preg_match() 函数返回的是 0 或 1。但是如果在布尔上下文中使用,PHP 会将它们转换为 FALSE 或 TRUE。在像 C# 这样的语言中,没有这样的隐式转换,你需要编写类似于 return 1===preg_match(...) 的代码。 - VolkerK

6

它们是等价的-选择你觉得更易读的。

在条件语句中,如果我不需要它们,个人倾向于省略任何else语句,但这是编程风格的问题,而不是程序性能或正确性的问题。

这两个代码示例在功能上是相同的,并且将表现出相同的性能。


同意,应该选择更易读而不是更容易编写的选项。这基于一个理论,即你只需编写代码一次,但需要多次阅读它。 - DanDan

4
如何呢:
function is_numeric($number)
{
    return preg_match("/^[0-9]+$/",$number);
}

这不会造成性能差异。

谢谢回复,但是Steffen Müller已经回答了那个问题 :) - Gaurav Sharma

4

尝试查看ctype_digit()函数。但是,我不确定输入参数是否需要明确为字符串,或者它是否接受任何对象类型。 - Martin Bean
在ctype_digit()函数中,你的参数应该用引号括起来。如果你这样写ctype_digit(57),那么它会返回false。 - Gaurav Sharma

4

从可读性的角度来看,使用肯定的子句更好,因为当人们阅读源代码时很可能会错过!,这导致对代码的错误理解,通常会产生错误。

Steffen有一个有效的观点。我认为这取决于两个代码块的大小。如果它们大小相当,我会在if语句中使用非否定子句。


是的,非常正确。在阅读源代码时很容易漏掉 "!"。 - Gaurav Sharma

3
如何考虑:
function is_numeric($number) {
    return preg_match("/^[0-9]+$/",$number);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接