2011-03-13 24 views
1
<?php 
    $gender = "devilcode"; 
    if (($gender == "female") || ($gender = "male")) 
     { 
      echo "ok"; 
     } 
    else echo "no"; 
    ?> 

它應輸出「否」,但輸出「ok」。我究竟做錯了什麼?我無法比較PHP中的兩個字符串

+0

像人人說的那樣,把雙等於$ man的條件。並且把OR代替||。也許它改變了一些東西而且也不需要括號來表示條件。它應該工作。 – Kemal 2011-03-13 23:26:50

回答

13

您分配$gender是男性,而不是測試它進行比較,則需要兩個等號:

$gender = "devilcode"; 
if (($gender == "female") || ($gender == "male")) 
    echo "ok"; 
else 
    echo "no"; 
+0

這不是相反嗎?分配一個等號並比較兩個等號? – Rasika 2011-03-13 21:45:46

+1

關於'=='和'==='的說明:http://stackoverflow.com/a/8494892/59087 – 2013-04-20 23:24:28

7

你錯過了等號:

($gender == "male") 

編輯:正是由於這個原因,很多程序員認爲寫的比較其他方式,與左側的靜態值:

if ("male" == $gender) { ... } 

這樣,如果您忘記並使用=而不是==,則會出現語法錯誤。

5

是IF $gender="male"的第二部分?我認爲這總是迴歸真實並導致問題。讓它$gender=="male"

2

有在測試的第二部分中的錯誤。更換

($gender = "male") // assign $gender with the value "male" 
        // this is always evaluated to TRUE in your test 

通過

($gender == "male") // test that $gender is equal to "male" 
1

的良好實踐寫作條件,從這樣的錯誤保護是利用逆符號:

if ('female' === $gender || 'male' === $gender) {...  

或:

$allowed = array('male', 'female', 'unknown'); 
if (in_array($gender, $allowed)) {... 
1

你正在分配var $gender以代替copmaring它($gender == 'male'

此外,如果你想測試對幾種可能的結果 '男'($gender = 'male')嘗試in_array()

$gender = 'devilcode' 
$genders = array('female','male','unknown') 
if(in_array($gender, $genders)){ 
echo 'ok'; 
}else{ 
echo 'no'; 
} 

問候。