作为一名php neewbie,我尝试阅读很多其他人的代码以便学习。 今天我遇到了这样一条线:
if ( stripos($post_to_check->post_content, '[' . $shortcode) !== false )
我想知道它们之间有什么区别
!==false
和==true
如果有人可以向我解释,我将不胜感激。
..如果没有真正的区别 - 使用引用的那个是什么原因?
答案 0 :(得分:6)
PHP是一种松散类型的语言。 ==
匹配这两个值,===
匹配值以及值的数据类型。
if (8 == '8') // returns true
以上条件只匹配值而非数据类型,因此if
评估为TRUE
if (8 === '8') // returns false
这个检查值的值和数据类型,因此if
评估为FALSE
您要使用===
来检查值和数据类型,并在需要仅比较值而不是数据类型时使用==
。
在你的情况下,
stripos
返回字符串中子字符串的位置,如果找不到字符串,则返回FALSE
。
if ( stripos($post_to_check->post_content, '[' . $shortcode) !== false )
上面的代码检查字符串中的子字符串,并仅在找到子字符串时才评估为TRUE
。
如果将其更改为
if ( stripos($post_to_check->post_content, '[' . $shortcode) != false )
当在0
位置找到子字符串时,即使主字符串中存在子字符串,if
也会评估为FALSE。
然后条件会变成这样
if ( 0 != false )
这将评估为FALSE
,因为0
被视为FALSE
所以你必须使用!==
if ( 0 !== false )
这将比较两个值的值和数据类型
值0
是整数类型,false
是boolean
类型,因此此处的数据类型不匹配,条件将为TRUE
PHP手册页说明了这些comparison operator你应该检查一次。
答案 1 :(得分:3)
!==false
和==true
之间的差异是PHP中相同/不相同和相等/不相等的比较之间的差异。
请参阅PHP手册中的Comparison Operators 相同和 Equal 之间的区别是什么。
答案 2 :(得分:1)
!==
是一种比较,不仅会比较值,还会比较两个变量的类型。
此处使用它是因为stripos
可以在未找到匹配时返回false
,但在字符串的第一个字符中找到匹配时也会返回0
。
==
无法区分这两种情况(它们都是“虚假”),因此在使用===
时必须使用stripos
。 manual:
此函数可能返回布尔值FALSE,但也可能返回一个非布尔值,其值为FALSE,例如0或“”。有关更多信息,请阅读有关布尔值的部分。使用===运算符测试此函数的返回值。
答案 3 :(得分:-1)
注意:== true和=== true不同。
我认为!== false类似于=== true,所以只解释== true和=== true。对于第一个==,它的值相等,因此1 == true,0 == false。对于===,它在PHP中是“相同的”,即值相等,也在类型中。
因此,如果结果位于第0位,则结果应该为真;但是,如果使用== true,它将不会作为0!= true。
例如, stripos('a sheep','a') 如果你使用== true,结果是错误的,因为它在第一位。