不等于 != 和 !== 在 PHP

Posted

技术标签:

【中文标题】不等于 != 和 !== 在 PHP【英文标题】:Not equal to != and !== in PHP 【发布时间】:2011-04-08 04:41:25 【问题描述】:

我一直这样做:if ($foo !== $bar)

但我意识到if ($foo != $bar) 也是正确的。

Double = 仍然有效并且一直对我有效,但是每当我搜索 php 运算符时,我都找不到关于 double = 的信息,所以我认为我一直都做错了,但它仍然有效。我应该为了它而将我所有的!== 更改为!= 吗?

【问题讨论】:

How do the PHP equality (== double equals) and identity (=== triple equals) comparison operators differ?的可能重复 【参考方案1】:

==!= 不考虑您比较的变量的数据类型。所以这些都会返回 true:

'0'   == 0
false == 0
NULL  == false

===!== 考虑数据类型。这意味着将字符串与布尔值进行比较永远不会为真,因为它们属于不同的类型。这些都将返回 false:

'0'   === 0
false === 0
NULL  === false

您应该比较函数的数据类型,这些函数返回的值可能是模棱两可的真值/假值。一个著名的例子是strpos()

// This returns 0 because F exists as the first character, but as my above example,
// 0 could mean false, so using == or != would return an incorrect result
var_dump(strpos('Foo', 'F') != false);  // bool(false)
var_dump(strpos('Foo', 'F') !== false); // bool(true), it exists so false isn't returned

【讨论】:

【参考方案2】:

$a !== $b TRUE 如果$a 不等于$b,或者它们不是同一类型

请参考http://php.net/manual/en/language.operators.comparison.php

【讨论】:

【参考方案3】:

!== 应该匹配值和数据类型

!= 只匹配忽略数据类型的值

$num = '1';
$num2 = 1;

$num == $num2; // returns true    
$num === $num2; // returns false because $num is a string and $num2 is an integer

【讨论】:

【参考方案4】:

您可以在这里找到信息:http://www.php.net/manual/en/language.operators.comparison.php

它很稀缺,因为它直到 PHP4 才添加。不过,您所拥有的很好,如果您知道可能存在类型差异,那么这是一个更好的比较,因为它在比较中测试值 类型,而不仅仅是值。

【讨论】:

以上是关于不等于 != 和 !== 在 PHP的主要内容,如果未能解决你的问题,请参考以下文章

PHP中“不等于”运算符<>和!=之间的区别

PHP基础解惑===和==的区别

php 使用操作符

php curl 忽略ssl 不是否等于ssl没有用

PHP PDO ODBC - 等于运算符中的数据类型不兼容

循环 bash 脚本,直到 cURL 响应不等于字符串