首先返回False还是True之间有什么区别?

时间:2013-08-10 08:29:00

标签: php regex function return-value

我有以下功能。
我可以运行它来测试是否为true,否则为false,反之亦然,如图所示。

    $fname=$_POST['fname'];
    $lname=$_POST['lname'];

function namecheck ($fname,$lname) 
{    
    $names= array ($fname,$lname);

    $regexp ="/^[A-Za-z]+$/";

    //filter through names 
    for ($i=0; $i<2; $i++)
    if (! preg_match($regexp, $names[$i])) 
    {
         return false;
    }
    return true;
}

(替代版本):

for ($i=0; $i<2; $i++)
if (preg_match($regexp, $names[$i])) 
{
    return true;
}
return false;

在效率和良好的编码实践方面,哪种方式更好?或者没有区别?

对于像这样的小阵列来说,这可能不是问题,但我想知道它会对更大更复杂的程序产生什么影响。

3 个答案:

答案 0 :(得分:9)

不同之处在于两个循环都在检查不同的结果。

  • 1 st 循环正在检查$regexp是否匹配数组的所有元素 - 在这种情况下,它会在匹配时返回false失败,如果达到for循环后的return语句,则表示所有元素都匹配 说实话,在for循环周围没有括号通常会让人感到困惑(就像它先把我弄糊涂了)。我建议添加相关的括号:

    for ($i=0; $i<2; $i++) {
        if (preg_match($regexp, $names[$i])) {
             return true;
        }
    }
    return false;
    
  • 2 nd 循环正在检查$regexp是否匹配数组的任何元素 - 在这种情况下,只要匹配成功,它就会返回true ,如果达到for循环后的return语句,则表示没有元素匹配。

    for ($i=0; $i<2; $i++) {
        if (! preg_match($regexp, $names[$i])) {
             return false;
        }
    }
    return true;
    

答案 1 :(得分:4)

在您的代码中,您只需检查一次迭代($ i = 0)

您可以使用:

for ($i=0; $i<2; $i++){
    if (!preg_match($regexp, $names[$i])) return false;
}
return true;

如果有错误方法会返回false,如果没有 - &gt;真正。方法会在第一次错误时停止迭代。

答案 2 :(得分:4)

我建议给你的函数一个更有意义的名称,比如is_name_valid()。它有助于清晰度,您的“问题”会立即消失,因为当名称满足您的要求时它必须返回True,否则返回False。