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 是数字而不是数字?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Camunda 生成数字流程实例 ID,而不是 UUID?
C 中的这段代码决定一个数字是不是是素数,它会因大数而崩溃。为啥?