【问题标题】:Why does this code only print zero? [duplicate]为什么这段代码只打印零? [复制]
【发布时间】:2017-05-08 09:36:21
【问题描述】:

为什么这段代码只打印零?为什么不打印a的值?

<?php
$a=099;
echo $a;
?>

【问题讨论】:

  • 八进制无效
  • echo 是为了打印一个string 而你的$a 是一个整数,试试这个 - $a='099'; echo $a;
  • 它完全按照您的要求完成了。如果要输出为字符串,则需要设置$a='099';
  • @SaumyaRastogi echo 可以打印整数。在该上下文中,它们会自动转换为字符串。我认为这里的问题只是 OP 没有意识到前导零在做什么。
  • 如果你想知道八进制的意义是什么,this SO question 对此有一些很好的答案,尽管那里也有一些愚蠢的答案。 Here is a better one on Software Engineering.

标签: php types


【解决方案1】:

正如 Ultimater 指出的那样,您已将 $a 分配给无效的八进制数。

解析器假定以零开头的数值(在这种情况下称为“整数文字”)是八进制(以 8 为基数)数。由于您的数字包含不在基数中的 9(基数 8 位为 0-7),因此它无效,解析器将其评估为零。

例如,这个确实工作:

$a = 077;
echo $a;  //63

http://php.net/manual/en/language.types.integer.php

【讨论】:

    【解决方案2】:

    以“0”开头的数字是八进制数。 但是八进制数有0~7,没有8、9。 所以$a 设置为零。 如果要打印“099”,请尝试

    $a = '099'; 
    echo $a;   //print 099 
    

    如果你想得到号码,试试

    $a = 045; 
    echo $a;    //print 37(Decimal number)
    

    【讨论】: