繁体   English   中英

哪种方法更有效?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM