這兩個表達式是否相同?如果他們是,你能解釋爲什麼嗎? (我是一個Java程序員):
if(!$someObject)
if($someObject!==null)
感謝
這兩個表達式是否相同?如果他們是,你能解釋爲什麼嗎? (我是一個Java程序員):
if(!$someObject)
if($someObject!==null)
感謝
你可以有一個看起來在type comparisons table上php.net
加在你的情況下,如果$someObject = true
,那麼if($someObject!==null)
工程,但if(!$someObject)
不會。
在PHP中,你有兩種不同類型的比較,鬆散的(==
,!=
)和嚴格的(===
,!==
)。
if
與鬆散的比較。
您使用的第二個if
將與基本上一起工作嚴格比較,所以他們兩個不能等同於。
有一個真正的等價物的唯一方法是用兩個,如果在同一個比較「類型」的工作。
if(!$someObject)
僅相當於if($someObject == false)
。
+1鏈接! – ircmaxell 2010-09-12 17:14:16
if (!someObject)
等於if (!isset(someObject))
如果'$ someObject = false',則不是如此# – 2010-09-12 17:11:34
-1'isset'與布爾測試無關。當然,如果變量沒有設置,試圖使用它將會產生一個null(因此'!null'是真實的),但是它沒有和'!$ var'幾乎相同......並且@Colin:如果' $ someObject是'0','0',''''','false','array()'... – ircmaxell 2010-09-12 17:12:58
isset用於檢查變量的狀態,而不是數據的狀態 - 類型/值,例如'$ a = false; var_dump(isset($ a));'會是真的。 – RobertPitt 2010-09-12 17:24:34
$ someObject!== null是更嚴格的比較!$ someObject, !$ someObject將通過使用表達式,比如,如果$ someObject不爲空返回true, '',虛假或0
或'「0」'或'array()' – 2010-09-12 17:13:41
( !變量)匹配主要底片,如null,false,0
具有這些值的任何變量將使用歎號操作符返回true
。並沒有假。
我敢肯定你知道你的數據類型,如booleons,strings,ints,doubles/floats
但林不知道你理解的邏輯運算符PHP中是如何工作的,我給你shour例子。
$a = $b; //This would assign $b to $a, a single = is an assignment operator.
$a == $b; //this is a value comarison operator, iot matches the VALUE not the type.
$a === $b; //This is a VALUE & TYPE Comparison, this would batch the value and data-types
即使世界,你可以使用諸如一些其他表達式:
$a != $b; //This is negative version to the second expression above - the ==,
$a !== $b; //this is a negative VALUE & TYPE comparison - the ===
看看這裏更深入的例子。
http://php.net/manual/en/language.operators.logical.php
希望這有助於
你行,所以要找出原因,讓我們創建一個真值表第一if語句。
!{statement}
基本上是相同的話說{statement} != false
。現在,考慮到{statement}
在這種情況下是一個變量,這將是相當的(==
)爲false所有這些條件(考慮弱類型,因此所有的這些等同於false
用於==
試驗):
0
'0'
''
null
false
array()
所以如果{statement}
等於如有此種情況,聲明!{statement}
將是真實的(因此,如果執行)
現在,第二比較基本上是問{statement}
不相同(在數值和類型兩者中,!==
與!=
不同)至null
。由於null
是特殊的,第二次如果不會通過的唯一時間是{statement}
正好是null
。
所以不,他們不可互換,但單獨等效。第一個有很多的情況下,如果將被執行,第二個只有一個時,它不會是...
請注意,PHP中的變量需要以'$'開始。 – 2010-09-12 17:03:16
僅供參考,簡短的答案是「否」,這些答案都沒有出現並說出來。 – mpen 2010-09-12 18:31:02