这两个表达式是否相同?如果是,你能解释一下原因吗? (我是一名java程序员):
if(!$someObject)
if($someObject!==null)
由于
答案 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
测试):
==
0
'0'
''
null
false
因此,如果array()
等于任何这些情况,则语句{statement}
将为真(因此if执行)
现在,第二个比较基本上是询问!{statement}
是否不相同(值和类型,{statement}
与!==
的区别)到!=
。由于null
是特殊的,因此只有当null
正好是{statement}
时才会传递第二个if。
所以不,它们不是可以互换的,而是单独的。第一个有很多情况,if会被执行,第二个只有一个,当它不会...
答案 4 :(得分:-1)
if (!someObject)
等于if (!isset(someObject))