【问题标题】:PHP operators (! $a vs. false === $a)PHP 运算符(!$a 与 false === $a)
【发布时间】:2014-03-20 15:35:32
【问题描述】:

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

【问题讨论】:

  • 前。 1 是在类型杂耍之后测试任何错误的东西(相当于 $a == false); 2 和 3 专门测试 Boolean 类型和 false 值;所以有逻辑上的区别

标签: php coding-style operators logical-operators


【解决方案1】:

!

只需将结果值(布尔值或非布尔值)从真反转为假或从假反转为真

示例:

if (!file_exists('/path/file.jpg')) {
    // if file NOT exists
}

=== 假(或真)

比较的值必须是布尔值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'
}

!== 真(或假)

这是一样的。只有===的反义词,即:值不能是boolean true or false


对不起我的英语。

【讨论】:

    【解决方案2】:

    差异归结为type juggling! 运算符将一个值转换为其布尔值,然后反转该值。 === 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 2011-04-28
      • 2010-12-21
      • 2013-11-26
      相关资源
      最近更新 更多