2013-08-22 27 views
4

我有这个问题,有一个字符串:评估stripos(),!== FALSE和=== TRUE有什么区别?

$val = 'NOT NULL'; 

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

它计算罚款,但如果我使用=== TRUE作为评价者,不如意的事情。 答案回避了我,请帮助我理解。

+2

''===严格比较即匹配类型为好。由于'stripos'返回整数和整数!==布尔型'stripos(...)=== true'评估为'false'。 – Leri

+0

谢谢!事实上,现在很明显......但由于某种原因,我陷入了一个错误的逻辑。在PHP整数 – derei

+0

也被视为布尔值,并在'strpos'和'stipos'的情况下返回整数(也是字符串偏移量从0开始)。和'==='是严格的比较,即'0'不等于'假','1或更多'不等于'真'。 – Shushant

回答

1

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

1

由于===!==strict comparison operators - !== false是不一样的===true,因为例如,1!==false是确定(值和类型不相等),但1===true是不可接受(值是相等的,但类型不是) 。

该样本表明严格比较的含义 - 即不仅值重要,而且还包括比较数据的类型。

7

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

返回相对于haystack字符串的初始位置(独立于偏移量)的位置。还请注意,字符串位置从0开始,而不是1.

如果未找到针,则返回FALSE

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

如果你没有stripos($val, 'NULL') == TRUE那么如果NULL分别在0位置找到您的代码将执行 - 因为PHP会做一些类型戏法和有效0 == (int)true

适当的方法来测试使用stripos()存在是你拥有的一切:

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