PHP:为啥 True 是数字而不是数字?

Posted

技术标签:

【中文标题】PHP:为啥 True 是数字而不是数字?【英文标题】:PHP: Why is True a Number but not Numeric?PHP:为什么 True 是数字而不是数字? 【发布时间】:2013-10-02 17:50:42 【问题描述】:

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

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

【问题讨论】:

我不得不考虑这个! PHP 记录的内部类型将是布尔值,但是当您回显它或对其执行数学运算时,它会转换为整数。 谢谢,所以如果乘以布尔值,它会被重铸!哦.... 【参考方案1】:

它不被视为数字。当您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”,因为手册说字符串被认为是数字?为什么他们不回显 0 表示错误? 它不是一个字符串。这是一个布尔值。回显时会自动转换为字符串"1" 在这种情况下引用类型杂耍的答案,例如。谢谢!【参考方案2】:

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

如果你这样做:

$a_string = "$a";

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

【讨论】:

谢谢,尽管手册确实说数字字符串被认为是数字。 没错,但您的代码中没有任何数字字符串。 如果你做了is_numeric("$a") 那将是一个数字字符串。 是的,我只是想知道 TRUE 是否为“1”,它何时变为“1”,因为等于回显的 TRUE 的变量将是数字,不是吗? 感谢您的澄清!【参考方案3】:

值 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

【讨论】:

Thnaks,虽然为什么我们被允许直接看到 TRUE 让我想知道它是否有一些数字方面...... 作为一种动态语言,一切都应该根据上下文转换为任何东西。 @Gamemorize 当您执行var_dump($var1); 时,输出为bool(true)【参考方案4】:

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

【讨论】:

谢谢,所以它从来都不是字符串? @Gamemorize 不。您需要了解 PHP 经常会根据上下文的需要将值从一种类型转换为另一种类型。但原始类型仍然不同。

以上是关于PHP:为啥 True 是数字而不是数字?的主要内容,如果未能解决你的问题,请参考以下文章

为啥十六进制数字以#而不是0x为前缀?

机器学习多分类:为啥使用“one-hot”编码而不是数字

为啥 Camunda 生成数字流程实例 ID,而不是 UUID?

C 中的这段代码决定一个数字是不是是素数,它会因大数而崩溃。为啥?

为啥某些文件的组显示数字(看起来像 ID),而不是字母字符串?

为啥我没有在 php 中将此数字作为整数