我剛剛在PHP腳本中找到以下代碼,並想知道爲什麼它不會導致PHP報告錯誤?PHP相等性檢查不會拋出錯誤
$current_name == ($type != 3) ? $name : '' ;
這是一個錯字和代碼應該改爲:
$current_name = ($type != 3) ? $name : '' ;
我剛剛在PHP腳本中找到以下代碼,並想知道爲什麼它不會導致PHP報告錯誤?PHP相等性檢查不會拋出錯誤
$current_name == ($type != 3) ? $name : '' ;
這是一個錯字和代碼應該改爲:
$current_name = ($type != 3) ? $name : '' ;
這是一個奇怪的代碼,但只是因爲它是無法讀取和無用的,不是因爲它是無效的。它使用ternary operator,它基本上是格式爲condition ? if true : if false
的構造的簡寫if
。
此代碼執行以下操作:
$type != 3
。如果$type
是3
,則返回false
,否則返回true
。$current_name
進行比較。true
(即$current_name == true
),則返回$name
。否則(即$current_name == false
)返回''
。當然,這一切都沒有什麼,因爲在聲明中沒有賦值。
你確定它實際上沒有評估爲:'($ current_name == true)'或'($ current_name == false)'取決於'($ type!= 3)',然後返回'$ name'或' '''基於'$ current_name == x'來作廢? –
@Alexander是的,你是對的 - 我認爲'':'有更高的[優先](http://php.net/manual/en/language.operators.precedence.php)比它。 – lonesomeday
語法正確。評估三元表達,然後與$current_name
比較。整個表達式的結果不被使用。
你不需要那些偏執[我的意思是:(($ type!= 3)?$ name:'')],但你將有效地比較$ current_name和($ type!= 3) – Jauzsika
爲什麼要它,這個聲明沒有錯。它返回一個布爾值到無處。嘗試'var_dump($ current_name ==($ type!= 3)?$ name:'');' – feeela
@feeela由於某種原因我雖然不允許內聯比較,因爲它們什麼都不做。 – Jon