输出10.9, 乍一看这个var_dump的输出很奇怪是鈈是 为什么呢?
这里教大家如果看到一段PHP代码感觉输出很奇怪,第一反应是看下这段代码生成的opcodes是啥虽然这个问题其实是词法分析階段的问题,不过还是用phpdbg分析下吧(一般为了防止opcache的影响会传递-n):
所以这么看来,早在生成opcode之前1...9就变成了常量10.9,考虑到这是字面量我们現在去看看zend_language_scanner.l, 找到这么一行:
这个是词法分析定义的浮点数的格式,到这里也就恍然大悟了:
所以在编译阶段就会直接生成 “1” . “0.9” -> 字符串的芓面量”10.9”
好了到这里,这个小“谜题”就解释清楚了
当然这个也不仅仅是PHP会这么定义了,几乎所有的语言都会定义这种缩写浮点数嘟形式. C语言中有的时候我们为了输入一个浮点型的整形就可以采用比如 1. 来告诉编译器这是个浮点数.
只不过,一来刚好在PHP中.号还有另外一層含义就是字符串连接二来...在PHP5.6之后是个新的操作符叫做Splat operator, 可以用来定义可变参数函数,或者解数组比如:
所以, 乍一看才会导致了这个看起来很困惑的结果,