【问题标题】:evaluate stripos(), what is the difference between !== FALSE and === TRUE?评估 stripos(),!== FALSE 和 === TRUE 有什么区别?
【发布时间】:2013-08-22 13:53:30
【问题描述】:

我对字符串有这个问题:

$val = 'NOT NULL';

if(stripos($val, 'NULL') !== FALSE){
    echo "IS $val";
}

它的评估结果很好,但如果我使用=== TRUE 作为评估者,事情就会出错。 答案不明白,请帮我理解。

【问题讨论】:

  • === 是严格比较,即也匹配类型。由于 stripos 返回整数和整数 !== boolean stripos(...) === true 计算结果为 false
  • 谢谢!确实,现在很明显......但由于某种原因,我陷入了错误的逻辑。
  • 在 php 中,整数也被视为布尔值,在 strposstipos 的情况下,它返回整数(字符串偏移量也以 0 开头)。而=== 是严格比较,即0 不等于false1 or more 不等于true
  • @punk ,我明白了……这很棘手。所以,如果我使用==,只要偏移量>0,我会得到TRUE,但如果偏移量=0,我会得到一个误导性的FALSE。现在很清楚,只有与严格的FALSE比较,我才能得到真实的结果。

标签: php evaluate stripos


【解决方案1】:

如果您阅读stripos() 的文档,您会发现。

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

如果找不到针,则返回FALSE

它不返回TRUE。由于您使用的是strict equality,因此您的条件永远不会是true

如果您执行了stripos($val, 'NULL') == TRUE,那么如果在位置0 找到NULL,您的代码就会执行——因为PHP 会做一些类型杂耍 并且有效地0 == (int)true

使用stripos() 测试存在的适当方法是您所拥有的:

if (stripos($val, 'NULL') !== FALSE){
    echo "IS $val";
} 

【讨论】:

    【解决方案2】:

    答案是因为您使用的是严格相等运算符。该函数本身返回一个 int(如果找不到针,则返回布尔值)。返回值不等于(严格意义上的值类型)为true,这就是检查失败的原因。

    【讨论】:

      【解决方案3】:

      由于===!==strict comparison operators - !== false===true 不同,例如,1!==false 可以(值和类型不相等),但1===true不行(值相等,但类型不相等)。

      这个示例表明了严格比较的含义——即不仅值很重要,而且比较数据的类型也很重要。

      【讨论】:

        猜你喜欢
        • 2015-03-15
        • 2018-12-20
        • 2015-03-22
        • 1970-01-01
        • 1970-01-01
        • 2016-12-02
        • 2012-03-22
        • 1970-01-01
        • 2014-02-16
        相关资源
        最近更新 更多