有什么区别,特别是在PHP中?逻辑上它们是一样的(或者看起来是一样的),但是其中一个比另一个有什么优势吗?如果有差异,包括微基准测试。
示例代码:
$a = fc();
// Example 1
if (!$a) echo "Ex. 1";
// Example 2
if (false === $a) echo "Ex. 2";
// Example 3
if (true !== $a) echo "Ex. 3";
function fc()
{
return false;
}
!
只需将结果值(布尔值或非布尔值)从真转换为假或从假转换为真
例子:
if (!file_exists('/path/file.jpg')) {
// if file NOT exists
}
=== false(或true)
比较的值必须是一个布尔值false或true。
例子:
$name = 'Patrick Maciel';
if ($name === true) {
// not is, because "Patrick Maciel" is a String
}
但是如果你那样做
if ($name == true) {
// it is! Because $name is not null
// and the value is not 'false': $name = false;
}
在这种情况下,这个操作符只是用来检查:
$connection = $this->database_connection_up();
if ($connection === true) {
echo 'connected to database';
} else {
echo 'error in connection';
}
$valid_credit_card = $this->validate_credit_card($information);
if ($valid_credit_card === false) {
echo 'Your credit card information is invalid'
}
<标题> !== true(或false)这是一样的。只能与===
相反,即不能为boolean true or false
对不起,我的英语不好。
标题>差异归结为类型杂耍。!
运算符将一个值转换成它的布尔值,然后反转该值。=== false
只是检查该值是否实际上是false
。如果不是false
,则比较值为false
。
如果被比较的值保证为布尔值,则这些操作的行为将相同。如果所比较的值可能是非布尔值,则操作将大不相同。比较:
php > $a="0";
php > var_dump(!$a);
bool(true)
php > var_dump($a === false);
bool(false)
php > $a = false;
php > var_dump(!$a);
bool(true)
php > var_dump($a === false);
bool(true)