编程风格- PHP操作符(!$a vs. false === $a)


coding style - PHP operators (! $a vs. false === $a)

有什么区别,特别是在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)