PHP:为什么True是数字而不是数字?

时间:2013-10-02 17:50:42

标签: php boolean isnumeric

所以我试图了解为什么会发生这种情况:

<?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”这样的字符串是数字化的。

4 个答案:

答案 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) 

 ?>

参考文献:

Bool

var_dump

答案 3 :(得分:1)

$a不被视为1.当回显时,表示为字符串“1”。