变价值真实性和相同算子
在 PHP 中,变量值具有关联的真实性,因此即使非布尔值也将等于 true
或 false
。这允许在条件块中使用任何变量,例如
if ($var == true) { /* explicit version */ }
if ($var) { /* $var == true is implicit */ }
以下是不同类型的变量值的一些基本规则:
- 字符串具有非零长度等同于
true
包括仅含有 whitepace 如' '
字符串。 - 空字符串
''
等于false
。
$var = '';
$var_is_true = ($var == true); // false
$var_is_false = ($var == false); // true
$var = ' ';
$var_is_true = ($var == true); // true
$var_is_false = ($var == false); // false
- **** 如果它们非零,则整数等于
true
,而零等于false
。
$var = -1;
$var_is_true = ($var == true); // true
$var = 99;
$var_is_true = ($var == true); // true
$var = 0;
$var_is_true = ($var == true); // false
null
相当于false
$var = null;
$var_is_true = ($var == true); // false
$var_is_false = ($var == false); // true
- 空字符串
''
和字符串零'0'
等于false
。
$var = '';
$var_is_true = ($var == true); // false
$var_is_false = ($var == false); // true
$var = '0';
$var_is_true = ($var == true); // false
$var_is_false = ($var == false); // true
- 浮点值等于
true
(如果它们非零),而零值等于false
。NAN
(PHP 的非数字)等于true
,即NAN == true
是true
。这是因为NAN
是非零浮点值。- 零值包括 IEEE 754 定义的+0 和 -0.PHP 在其双精度浮点中不区分+0 和 -0,即
floatval('0') == floatval('-0')
是true
。- 事实上,
floatval('0') === floatval('-0')
。 - 此外,
floatval('0') == false
和floatval('-0') == false
。
- 事实上,
$var = NAN;
$var_is_true = ($var == true); // true
$var_is_false = ($var == false); // false
$var = floatval('-0');
$var_is_true = ($var == true); // false
$var_is_false = ($var == false); // true
$var = floatval('0') == floatval('-0');
$var_is_true = ($var == true); // false
$var_is_false = ($var == false); // true
身份运算符
在比较运算符的 PHP 文档中 ,有一个相同的运算符 ===
。此运算符可用于检查变量是否与参考值相同 :
$var = null;
$var_is_null = $var === null; // true
$var_is_true = $var === true; // false
$var_is_false = $var === false; // false
它有一个相应的不相同的运算符 !==
:
$var = null;
$var_is_null = $var !== null; // false
$var_is_true = $var !== true; // true
$var_is_false = $var !== false; // true
相同的运算符可以用作 is_null()
等语言函数的替代。
使用案例与 strpos()
strpos($haystack, $needle)
语言函数用于定位 $needle
中 $needle
发生的索引,或者它是否发生。strpos()
功能区分大小写; 如果你不需要不区分大小写,那么你可以使用 stripos($haystack, $needle)
strpos
&stripos
函数还包含第三个参数 offset
(int),如果指定,搜索将从字符串的开头开始计算这个字符数。与 strrpos 和 strripos 不同,偏移量不能为负
该函数可以返回:
- 如果在
$haystack
发现了$needle
,那么该怎么办? - 如果
$needle
位于$haystack
的开头以外的某处,则指定索引的非零整数; - 和值
false
如果$needle
是不是在$haystack
发现任何地方。
因为 0
和 false
在 PHP 中都具有真实性,但是代表了 strpos()
的不同情况,重要的是要区分它们并使用相同的运算符 ===
来准确查看 false
而不仅仅是一个等于 false
的值。
$idx = substr($haystack, $needle);
if ($idx === false)
{
// logic for when $needle not found in $haystack
}
else
{
// logic for when $needle found in $haystack
}
或者,使用不相同的运算符:
$idx = substr($haystack, $needle);
if ($idx !== false)
{
// logic for when $needle found in $haystack
}
else
{
// logic for when $needle not found in $haystack
}