2012-11-15 87 views
1

我想建立一個PHP語句或「||」運營商,但似乎並不工作PHP如果語句與或運算符

$country_code ="example_country_code"; 

    if ($country_code != 'example_country_code' || !clientIscrawler()) { 
      echo 'the script can be executed'; 
    } 
    else { 
    echo 'skipping'; 
    } 

與給定的示例應回顯跳過,但不會發生那樣的。我做錯了什麼?

+0

而*爲什麼*它應該回聲'跳過'?絕對不是因爲國家代碼。 – Jon

+0

'clientIscrawler()'返回的值是多少? –

+0

var_dump(!clientIscrawler());'? – Dev

回答

0

也許雙重否定是給你的問題,讓我們也改寫爲:

!($country_code == 'example_country_code') || !clientIscrawler() 

這可以變成一個等價條件與&&

!($country_code == 'example_country_code' && clientIscrawler()) 

通過反轉if你會得到這個:

if ($country_code == 'example_country_code' && clientIscrawler()) { 
    echo 'skipping'; 
} else { 
    echo 'the script can be executed'; 
} 

因此,在你的代碼,它只會打印跳過,如果clientIscrawler()是truthy。

+0

非常感謝我一直在改變一下,似乎工作!($ country_code =='example'|| $ country_code =='example2'|| clientIscrawler()) – kakuki

-2

試試這個方法:

if (($country_code != 'example_country_code') || !clientIscrawler()) { ... 
+0

什麼是點? – Dev

+0

這是一樣的 – silly

0

在你給出的代碼,這一切都取決於你的函數調用

!clientIscrawler() 

您將得到script can be executed輸出只有當你的函數調用返回FALSE。我認爲它現在正在返回TRUE,這就是爲什麼你沒有得到期望的輸出。

-1

也許這可以幫助你:

if (($country_code != 'example_country_code') || clientIscrawler() == false) { 
0

如果你有多個條件或操作者在這種情況下,你不希望if語句來計算爲真,語法是:

if(!($something == "something" || $something == 'somethingelse')){ 
    do stuff... 
} 

這裏是一個例子:

$apples = array (
1 => "Pink Lady", 
2 => "Granny Smith", 
3 => "Macintosh", 
4 => "Breaburn" 
); 

foreach($apples as $apple){ 

    // You don't wanna echo out if apple name is "Pink Lady" or "Macintosh" 

    if(!($apple == "Pink Lady" || $apple == "Macintosh")){ 

     echo $apple."<br />"; 

    } 
} 

// Output is: 
Granny Smith 
Breaburn