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