簡體   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