【问题标题】:PHP - What is the difference between '!== false' and ' == true'?PHP - '!== false' 和 '== true' 有什么区别?
【发布时间】:2018-12-20 15:54:04
【问题描述】:

有时我看到人们写这样的条件语句:

if($var !== false) {...}

而不是这样:

if($var == true) {...}

这些是一样的,对吧?

我看到前者的使用频率更高,我想知道这背后是否有原因,或者这只是个人喜好。

我很欣赏这可能是基于意见的,但我很想知道这背后是否有正当的理由。

【问题讨论】:

  • 我认为个人喜好
  • 我会说使用 === true 或 !== false 可能是基于代码可读性和不使用 cmets 等清楚地描述业务规则的偏好。
  • 与第二个建议不同,他们在第一个中严格检查。
  • @UpsideDownRide 这与stripos无关。
  • 任何“假”(但实际上不是false)在两种情况下的行为都会有所不同 - null、零、空字符串等

标签: php evaluation


【解决方案1】:

这个:

 if($var !== false) {...}

仅当 $var 正好是 false 时才会评估为 false。如果 $var 是任何其他值,无论是否为 'false-y',它都不会评估为 false。

这个:

if($var == true) {...}

对于任何 'false-y' 值都将评估为 false。例如0, '0'.

除此之外:

if($var === true) {...}

仅当 $var 完全设置为 true 时才会评估为 true,而不是其他 'truthy-y' 值。

因此,如果您知道 $var 仅是 true 或 false 之一,那么您是正确的,但对于其他值,它们的行为不同。

【讨论】:

    【解决方案2】:

    $var !== false 可用于可读性或个人偏好以外的其他用途。各种 PHP 函数预计会在错误的情况下返回 false,并且它们可能会在成功时返回一个虚假值。以strpos 为例:

    返回针存在的位置相对于 haystack 字符串的开头(与偏移量无关)。另请注意 字符串位置从 0 开始,而不是 1。

    如果没有找到针,则返回 FALSE。

    这意味着该函数可以返回一个整数,如果在开头找到了针,则返回0,如果没有找到针,则返回false。您必须使用!== false 来检查表达式是否为false,而不是虚假的。

    【讨论】:

      【解决方案3】:

      它们不一样。

      !== 是比较值和类型的严格比较。 $var 必须等于 (bool) false。这意味着如果返回一个 'false' 字符串,它将失败。

      == 是一个松散的比较,只检查值。这意味着$var 可以等于“(字符串)字符串”并且为真。检查这样的变量时:

      if ($var == true) {
      
      }
      

      您检查$var 中是否有任何内容/已定义。只要有东西反对它(并且不等于(bool) false),它就会通过条件。这意味着 '(string) false' 将通过该条件。

      一些函数(如 strpos)返回 (bool) false 毫无价值,因此执行第一个函数(IMO)对这类函数更好。

      【讨论】:

        【解决方案4】:

        当你使用 ==

        首先,它对变量进行类型转换并比较这些值是否相同。 你可以在下面的例子中看到

        var_dump(0==FALSE);  // ( 0 == ( int ) false  )  bool(true) 
        var_dump(0=='anystring'); //  ( 0 == ( int ) 'anystring' ) bool(true)  
        

        当你使用 ===

        它也比较值和类型

        所以应该是这样的

        var_dump(  gettype( 0  )  == gettype( false  ) && 0 == false  )
        

        如果您的类型检查失败,这会更快,因为如果类型检查失败,它不必对值进行类型转换以进行进一步的“值检查”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-14
          • 2018-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-13
          相关资源
          最近更新 更多