当转换为 boolean 时,以下值被认为是 FALSE
:
- 布尔值
FALSE
本身 - 整型值 0(零)
- 浮点型值 0.0(零)
- 空字符串,以及字符串 "0"
- 不包括任何元素的数组
- 不包括任何成员变量的对象(仅 PHP 4.0 适用)
- 特殊类型 NULL(包括尚未赋值的变量)
- 从空标记生成的 SimpleXML 对象
所有其它值都被认为是 TRUE
(包括任何资源)。
Warning
-1 和其它非零值(不论正负)一样,被认为是 TRUE
!
<?php
var_dump((bool) ""); // bool(false)
var_dump((bool) 1); // bool(true)
var_dump((bool) -2); // bool(true)
var_dump((bool) "foo"); // bool(true)
var_dump((bool) 2.3e5); // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array()); // bool(false)
var_dump((bool) "false"); // bool(true)
?>
几个注意的例子:
1.
<?php
$x=TRUE;
$y=FALSE;
$z=$y OR $x;
?>
$z 为FALSE 因为运算符优先级大于OR $z=$y OR $x; 为($z=$y) OR $x 非 $z=($yOR $x)
<?php
$x=TRUE;
$y=FALSE;
$z=$y || $x;
?>
$z 为TRUE ||优先级大于运算符 $z=$y || $x 为$z=($yOR $x)
2.
<?php
// Consider that the 0 could by any parameters including itself
//考虑到0可以通过任何参数,包括自己
var_dump(0 == 1); // false
var_dump(0 == (bool)‘all‘); // false
var_dump(0 == ‘all‘); // TRUE, take care
var_dump(0 === ‘all‘); // false
// To avoid this behavior, you need to cast your parameter as string like that :
var_dump((string)0 == ‘all‘); // false
?>