2010-09-12 47 views
2

這兩個表達式是否相同?如果他們是,你能解釋爲什麼嗎? (我是一個Java程序員):

if(!$someObject) 

if($someObject!==null) 

感謝

+0

請注意,PHP中的變量需要以'$'開始。 – 2010-09-12 17:03:16

+0

僅供參考,簡短的答案是「否」,這些答案都沒有出現並說出來。 – mpen 2010-09-12 18:31:02

回答

4

你可以有一個看起來在type comparisons table上php.net

加在你的情況下,如果$someObject = true ,那麼if($someObject!==null)工程,但if(!$someObject)不會。

在PHP中,你有兩種不同類型的比較,鬆散的(==,!=)和嚴格的(===,!==)。
if與鬆散的比較。
您使用的第二個if將與基本上一起工作嚴格比較,所以他們兩個不能等同於

有一個真正的等價物的唯一方法是用兩個,如果在同一個比較「類型」的工作。


if(!$someObject)僅相當於if($someObject == false)

+0

+1鏈接! – ircmaxell 2010-09-12 17:14:16

-1

if (!someObject)等於if (!isset(someObject))

+2

如果'$ someObject = false',則不是如此# – 2010-09-12 17:11:34

+2

-1'isset'與布爾測試無關。當然,如果變量沒有設置,試圖使用它將會產生一個null(因此'!null'是真實的),但是它沒有和'!$ var'幾乎相同......並且@Colin:如果' $ someObject是'0','0',''''','false','array()'... – ircmaxell 2010-09-12 17:12:58

+1

isset用於檢查變量的狀態,而不是數據的狀態 - 類型/值,例如'$ a = false; var_dump(isset($ a));'會是真的。 – RobertPitt 2010-09-12 17:24:34

2

$ someObject!== null是更嚴格的比較!$ someObject, !$ someObject將通過使用表達式,比如,如果$ someObject不爲空返回true, '',虛假或0

+2

或'「0」'或'array()' – 2010-09-12 17:13:41

2

( !變量)匹配主要底片,如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

希望這有助於

1

你行,所以要找出原因,讓我們創建一個真值表第一if語句。

!{statement}基本上是相同的話說{statement} != false。現在,考慮到{statement}在這種情況下是一個變量,這將是相當的(==)爲false所有這些條件(考慮弱類型,因此所有的這些等同於false用於==試驗):

  1. 0
  2. '0'
  3. ''
  4. null
  5. false
  6. array()

所以如果{statement}等於如有此種情況,聲明!{statement}將是真實的(因此,如果執行)

現在,第二比較基本上是問{statement}不相同(在數值和類型兩者中,!==!=不同)至null。由於null是特殊的,第二次如果不會通過的唯一時間是{statement}正好是null

所以不,他們不可互換,但單獨等效。第一個有很多的情況下,如果將被執行,第二個只有一個時,它不會是...

相關問題