所以我试图了解为什么会发生这种情况:
<?php
$a = TRUE;
$b = FALSE;
echo "a is ".$a."<br/>";
if (is_numeric($a)){
echo "a is numeric<br/>";
}
echo "b is ".$b."<br/>";
if (is_numeric($b)){
echo "b is numeric<br/>";
}
?>
给出以下输出
a是1
b是
所以A被认为是1但不被认为是数字。
手册说像“42”这样的字符串是数字化的。
答案 0 :(得分:3)
它不被视为数字。当您echo
时,它会自动转换为1。这称为type juggling,这意味着这样的东西在PHP中实际上是合法的:
php > $a = true;
php > $b = $a + 5;
php > echo $b;
6
php > $c = "hello ".$a;
php > echo $c;
hello 1
您可以使用is_bool
找出它实际上是布尔值。
答案 1 :(得分:2)
true
不是数字,但当它转换为字符串进行连接时,它会转换为"1"
。同样,false
将转换为空字符串""
。
如果你这样做:
$a_string = "$a";
然后is_numeric($a_string)
会成立,因为$a_string
的值为"1"
。在需要字符串的上下文中使用布尔值会将值转换为"1"
或""
。
答案 2 :(得分:2)
值false不是数字0的常量,它是一个表示false的布尔值。值true也不是1的常量,它是一个特殊的布尔值,表示true。当你打印它或在表达式中使用它时,恰好会转换为整数1,但它与整数值1的常量不同,你不应该将它作为一个整数使用。但有时候将布尔值视为1或0可能会有所帮助。这是如何做到的。
<?php
$var1 = TRUE;
$var2 = FALSE;
echo $var1; // Will display the number 1
echo $var2; //Will display nothing
/* To get it to display the number 0 for
a false value you have to typecast it: */
echo (int)$var2; //This will display the number 0 for false.
var_dump($var1); //bool(true)
var_dump($var2); //bool(false)
?>
参考文献:
答案 3 :(得分:1)
$a
不被视为1.当回显时,表示为字符串“1”。