您的位置 首页 php

「PHP编程」var_dump(1…9)输出什么?旧方法新知识

今天从鸟叔的博客看到了一篇文章,文章提出了一个问题:var_dump(1…9)输出什么?相信很多人和我一样,在看到这篇文章之前,可能都没有对这个问题作过深入的思考。

var_dump(1…9)输出什么?我们先执行一下看看!

从上图看,我们知道实际结果是10.9!是不是超出了大家的想象?

这里教大家一个查找问题的方法,如果你看到一段PHP代码输出很奇怪,第一反应是看下这段代码生成的opcodes是啥。虽然,这个问题其实是词法分析阶段的问题,不过你还是用phpdbg分析下吧,如下:

从图中我们可以看到,早在生成opcode之前,1…9就变成了常量10.9。考虑到这是字面量,我们现在去看看zend_language_scanner.l,找到这么一行:

DNUM ({LNUM}?”.”{LNUM})|({LNUM}”.”{LNUM}?)

这个是PHP定义的词法分析定义的 浮点数 格式,在上面的var_dump(1…9)中,1…9实际会被依次接受为:(1.) 浮点数1,(.) 字符串 连接符号, (.9)浮点数0.9。

其实这种浮点数格式,并不是PHP独有的,实际上几乎所有的 编程语言 都会定义。但是我们之所以容易迷惑,可能有两方面的原因,一是刚好在PHP中(.)号还有另外一层含义就是字符串连接,二是(…)在PHP5.6之后有个新的操作符叫做Splat operator,可以用来定义可变参数函数,或者解数组,比如:

所以, 乍一看才会导致了这个看起来很困惑的结果。

好了,到这里,这个小“谜题”就解释清楚了。大家懂了吗?

文章来源:智云一二三科技

文章标题:「PHP编程」var_dump(1…9)输出什么?旧方法新知识

文章地址:https://www.zhihuclub.com/149496.shtml

关于作者: 智云科技

热门文章

网站地图