我会尽量保持这一点。我做了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;
可能存在第二个语句永远不会运行的情况,因为第一个语句总是为真,这使得调用第二个函数无效。
哪一个效率更高?只存储价值并冒未使用的风险,或仅在需要时调用该功能两次?
答案 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 - 尝试更改函数的返回值,看看运行它时会发生什么。