哪种方式更有效?

时间:2014-10-08 22:00:30

标签: php performance

我会尽量保持这一点。我做了twp函数来测试一些东西:

//user valid
function validusr(){
    return true;//or false, depends
}
//user in db
function indbusr(){
    return true;//or false, depends
}

稍后,我有了这个

    if ( !validusr( $myval ) ) return validusr( $myval );       
    else if ( !indbusr( $myval ) ) return indbusr( $myval );            
        else return true;

然而,这似乎并不好看,因为我正在调用该函数2次:一次测试$myval,一次我返回它。但是,如果我说,存储这样的值:

$result1=validusr($myval);
$result2=indbusr($myval);

        if  (!$result1)  return $result1;       
        else if ( !$result2) return $result2;           
            else return true;

可能存在第二个语句永远不会运行的情况,因为第一个语句总是为真,这使得调用第二个函数无效。

哪一个效率更高?只存储价值并冒未使用的风险,或仅在需要时调用该功能两次?

1 个答案:

答案 0 :(得分:6)

你的逻辑归结为:

If the user is valid AND in the database, return true, otherwise, return false;

您可以利用PHP的内部优化器来确定要调用的函数。使用这个:

return (validusr($myval) && indbusr($myval));

PHP将执行第一个函数并展望表达式。如果函数返回true,它将继续执行下一个函数。如果它返回false,则表达式将为false,无论下一个函数返回什么,因此PHP不会打扰它并立即返回false

类似地,PHP会在遇到序列中的$a || $b ||someFunction($c)值时立即返回true来优化OR表达式true)。 (感谢dognose突出显示!)

如果您的功能没有副作用,那就太棒了。如果你依靠你的第二个功能除了回答真/假问题之外还有一些其他的影响,那么这对你不起作用。

你可以看到它正常工作here - 尝试更改函数的返回值,看看运行它时会发生什么。