if(!$ someObject)是否等效于if($ someObject!== null)?

时间:2010-09-12 16:57:50

标签: php

这两个表达式是否相同?如果是,你能解释一下原因吗? (我是一名java程序员):

if(!$someObject)

if($someObject!==null)

由于

5 个答案:

答案 0 :(得分:4)

您可以在php.net上查看type comparisons table

另外在您的情况下,如果$someObject = true,则if($someObject!==null)有效但if(!$someObject)则无效。

在PHP中,您有两种不同类型的比较,松散的比较(==!=)和严格比较(===!==)。
if与松散的比较有效 您使用的第二个if 基本使用严格比较,因此其中两个不能等效。

拥有真正等价物的唯一方法是在两个if中使用相同的比较“type”。


if(!$someObject)仅相当于if($someObject == false)

答案 1 :(得分:2)

$ someObject!== null与!$ someObject相比更具限制性, !$ someObject如果$ someObject不为null,'',false或0

,则返回true

答案 2 :(得分:2)

通过使用诸如(!变量)之类的表达式匹配主要否定词,例如null,false,0

具有这些值的任何变量都将使用感叹号运算符返回true。没有。

我确定你知道你的数据类型,例如booleons,strings,ints,doubles/floats,但我不确定你是否理解逻辑运算符在php中是如何工作的,生病给你一个例子。

$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

希望这有助于你

答案 3 :(得分:1)

好的,为了找出原因,让我们为第一个if语句创建一个真值表。

!{statement}{statement} != false基本相同。现在,考虑到{statement}在这种情况下是一个变量,对于所有这些条件,它将等效(==)为false(考虑到松散的类型,所以所有这些都等同于{{1对于false测试):

  1. ==
  2. 0
  3. '0'
  4. ''
  5. null
  6. false
  7. 因此,如果array()等于任何这些情况,则语句{statement}将为真(因此if执行)

    现在,第二个比较基本上是询问!{statement}是否不相同(值和类型,{statement}!==的区别)到!= 。由于null是特殊的,因此只有当null正好是{statement}时才会传递第二个if。

    所以不,它们不是可以互换的,而是单独的。第一个有很多情况,if会被执行,第二个只有一个,当它不会...

答案 4 :(得分:-1)

if (!someObject)等于if (!isset(someObject))