2013-04-04 31 views
1

我有一個函數可以返回true;返回'空';返回'only_site';並返回'only_user';正確解析函數的返回語句在PHP中

所以有4個可能的回報。在此聲明:

if(parse_ratings($user_rating, $st_rating, $rating_id) === 'empty') 
{ 
    $errors[] = 'Neither user_rating, nor site_rating cpule be spidered.'; 
} 

    elseif(parse_ratings($user_rating, $st_rating, $rating_id) === 'only_site')   
     $errors[] = 'Only site rating was spidered'; 

elseif(parse_ratings($user_rating, $st_rating, $rating_id) === 'only_user')  
     $errors[] = 'Only user rating was spidered'; 

請問如果()還記得第一次運行它的函數的輸出,或者它運行每次有一個if()時間;

假設腳本解析函數,並且第一個IF語句爲負數;那麼它會再次運行該函數以查看第二個IF是否爲負數,或者它是否在第一次運行時記得返回值。

我想知道這一點,因爲我期望它在大多數情況下都是真實的,並且不希望函數被連續調用4次。

希望這是有道理的。

謝謝。

+1

它每次都運行。 PHP不會「知道」你的函數在做什麼,因此不能確定它是否可緩存 - 這是你的工作。首先將結果保存在變量中。 – 2013-04-04 15:31:18

+0

好的,那回答了我的問題。謝謝 – Koffeehaus 2013-04-04 15:34:19

+0

縮進你的代碼將會使你對我們更具可讀性,你知道的。 – Mido 2013-04-04 15:34:25

回答

2

if()語句中的代碼每次都會執行,使PHP「記得」的值是使用一個變量的唯一途徑:

$rating = parse_ratings($user_rating, $st_rating, $rating_id); 
if($rating === 'empty') { 
    $errors[] = 'Neither user_rating, nor site_rating cpule be spidered.'; 
} elseif($rating === 'only_site') { 
    $errors[] = 'Only site rating was spidered'; 
} elseif($rating === 'only_user') } 
    $errors[] = 'Only user rating was spidered'; 
} 

或者您可以使用一個switch()聲明:

switch(parse_ratings($user_rating, $st_rating, $rating_id)) { 
    case 'emtpy': 
     $errors[] = 'Neither user_rating, nor site_rating cpule be spidered.'; 
     break; 
    case 'only_site': 
     $errors[] = 'Only site rating was spidered'; 
     break; 
    case 'only_user': 
     $errors[] = 'Only user rating was spidered'; 
     break; 
    case true: 
     break; 
    default: 
     $errors[] = 'An unhandle value was returned'; 
     break; 
}