2011-12-05 77 views
0

的說明因此,我過去的代碼需要一個變量來運行2個函數,然後返回值。非常奇怪的PHP函數返回

function 1($variable) { 
    check($variable); 
    return $variable // either a -1, -2 or true; 
} 

// pass the return to next function 

function 2($variable) { 
    check($variable); 
    return $variable // either a -1, -2 or true; 
} 

在接下來的檢查返回一條消息給用戶,例如:現在

if($variable == -1) // display message 
    if($variable == -2) // display message 
    if($variable == true) // display message 

,每個工作要求的變量必須經過第三功能檢查仍返回-1, - 2或true,然後進入最終的if語句進行顯示。 現在這是奇怪的地方。如果我把它在2個函數的if語句的工作,但是如果我在第3檢查功能運行它,我需要格式化我的,如果是這樣的,以便正確地檢查返回:

if($variable === -1) // display message 
if($variable === -2) // display message 
if($variable === true) // display message 

通知我來補充第三個'='符號。我無法弄清楚爲什麼會發生這種情況。這是正常的一些我不知道的PHP法或這是一個錯誤?

+0

沒有錯誤,你想comare類型以及值 – 2011-12-05 06:42:31

回答

1

這不是奇怪的行爲,這對PHP來說很自然。

以下表達式:

if ($variable == true) { 
} 

意味着PHP將投左操作數後這更少pretensive類型(在這種情況下,布爾值)和做對比。如果$ variable的值不是0或FALSE或NULL,或者''

這顯然會導致TRUE。在第二種情況下,即===有嚴格的檢查值和兩個操作數的類型進行比較。

1

三重等號(===)只返回true如果進行比較是相同(相同的類型和值的)的兩個對象,不只是相等。

例如:

$a = 1; 
$b = "1"; 

echo $a == $b; // True 
echo $a === $b; // False 
+0

我明白,但我不明白爲什麼PHP似乎迫使我使用'==='。如果我從第一個返回-1,從第二個返回-1,從第三個返回-1,爲什麼這在理論上不起作用。 if(-1 == -1)?它只適用於這種格式,如果(-1 === -1);這幾乎就像PHP一路上感到困惑,需要確保值的類型和價值是相同的,只是爲了讓自己放心。 – Naterade

0

您的代碼不會告訴你如何調用的函數和商店退貨,有可能是一個問題。另外,我想你稱功能1和2只是爲了說明,因爲你知道你不能用數字來啓動功能的名字。

===等於'等於'(值和類型)。通常用於邏輯測試,因爲有時您需要將0與false區分開來,將1與true區分開來。