[英]Which way is more efficient?
我会尽量保持简单。 我做了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;
但是,这似乎不太好,因为我两次调用该函数:一次测试$myval
,返回一次。 但是,如果我说的话,按如下方式存储值:
$result1=validusr($myval);
$result2=indbusr($myval);
if (!$result1) return $result1;
else if ( !$result2) return $result2;
else return true;
在某些情况下,第二条语句永远不会运行,因为第一条语句始终为真,这使得调用第二条函数毫无用处。
那么哪一个更有效? 存储值并冒着不使用该值的风险,或者仅在需要时调用该函数两次?
您的逻辑可以归结为:
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将在遇到序列中的true
值后立即返回true
来优化OR表达式( $a || $b ||someFunction($c)
)。 (感谢dognose为突出这一点!)
如果您的功能没有副作用,那就太好了。 如果您仅依靠第二个功能来回答其他问题,那么这将对您不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.