1

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

<?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

4 回答 4

3

它不被视为数字。当您使用它时,它会自动转换为 1 echo。这被称为类型杂耍,它意味着这样的东西在 PHP 中实际上是合法的:

php > $a = true;
php > $b = $a + 5;
php > echo $b;
6

php > $c = "hello ".$a;
php > echo $c;
hello 1

您可以使用is_bool它来找出它实际上是布尔值。

于 2013-10-02T17:52:49.990 回答
2

true不是数字,但是当它转换为字符串进行连接时,它会转换为"1". 同样,false被转换为空字符串""

如果你要这样做:

$a_string = "$a";

Thenis_numeric($a_string)会是真的,因为 的值$a_string会是"1"。在需要字符串的上下文中使用布尔值会将值转换为"1"""

于 2013-10-02T17:53:20.767 回答
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) 

 ?>

参考:

布尔

var_dump

于 2013-10-02T17:58:34.070 回答
1

$a不被认为是 1。它在回显时表示为字符串“1”。

于 2013-10-02T17:55:23.277 回答