2011-07-06 26 views
0

我剛剛在PHP腳本中找到以下代碼,並想知道爲什麼它不會導致PHP報告錯誤?PHP相等性檢查不會拋出錯誤

$current_name == ($type != 3) ? $name : '' ; 

這是一個錯字和代碼應該改爲:

$current_name = ($type != 3) ? $name : '' ; 
+0

你不需要那些偏執[我的意思是:(($ type!= 3)?$ name:'')],但你將有效地比較$ current_name和($ type!= 3) – Jauzsika

+2

爲什麼要它,這個聲明沒有錯。它返回一個布爾值到無處。嘗試'var_dump($ current_name ==($ type!= 3)?$ name:'');' – feeela

+0

@feeela由於某種原因我雖然不允許內聯比較,因爲它們什麼都不做。 – Jon

回答

3

這是一個奇怪的代碼,但只是因爲它是無法讀取和無用的,不是因爲它是無效的。它使用ternary operator,它基本上是格式爲condition ? if true : if false的構造的簡寫if

此代碼執行以下操作:

  1. 檢查是否$type != 3。如果$type3,則返回false,否則返回true
  2. 將#1的結果與$current_name進行比較。
  3. 如果#2是true(即$current_name == true),則返回$name。否則(即$current_name == false)返回''

當然,這一切都沒有什麼,因爲在聲明中沒有賦值。

+0

你確定它實際上沒有評估爲:'($ current_name == true)'或'($ current_name == false)'取決於'($ type!= 3)',然後返回'$ name'或' '''基於'$ current_name == x'來作廢? –

+0

@Alexander是的,你是對的 - 我認爲'':'有更高的[優先](http://php.net/manual/en/language.operators.precedence.php)比它。 – lonesomeday

3

語法正確。評估三元表達,然後與$current_name比較。整個表達式的結果不被使用。