首页 >

php之var_dump(1.9)会输出什么?

后端开发|php教程php之var_dump(1.9)会输出什么?
php,var_dump()
后端开发-php教程
var_dump(1…9)会输出什么?下面本篇文章给大家分析一下
91助手源码,vscode自定义快捷,ubuntu live版,tomcat版本如何查看,爬虫破解软件,php租车系统,免费seo推广软件代做,文件付费下载网站源码,freekan模板位置lzw
qq空间登录源码,vscode语法着色,ubuntu的文件系统结构,tomcat和nignx,sqlite修改表编码,js矢量图插件,vue前端框架搭建教程,爬虫数据挖掘书,php if 数组,ssl seo,php 企业网站 源代码,网页下载仅html,网站模板的功能,基于php的图书管理系统,猜拼音赢红包小程序lzw
一个问题, var_dump(1...9)输出什么?
修改asp源码,vscode文件格式化,ubuntu 中文命令,tomcat修改网卡地址,csharp网络爬虫,php缓存方式,巢湖seo优化排名怎么做,免费的网站下载lzw
动手验证下:

php -r “var_dump(1...9)”;string(4) ”10.9“

输出10.9, 乍一看这个var_dump的输出很奇怪是不是? 为什么呢?

这里教大家,如果看到一段PHP代码感觉输出很奇怪,第一反应是看下这段代码生成的opcodes是啥,虽然这个问题其实是词法分析阶段的问题,不过还是用phpdbg分析下吧(一般为了防止opcache的影响,会传递-n):

phpdbg -n -p /tmp/1.phpfunction name: (null)L1-35 {main}() /tmp/1.php - 0x7f56d1a63460 + 4 opsL2 #0 INIT_FCALL 96 "var_dump"L2 #1 SEND_VAL "10.9" 1L2 #2 DO_ICALLL35 #3 RETURN 1

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

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

这个是词法分析定义的浮点数的格式,到这里也就恍然大悟了:

1…9 会被依次接受为: 1. (浮点数1), 然后是 . (字符串连接符号) 然后是.9(浮点数0.9)

所以在编译阶段就会直接生成 “1” . “0.9” -> 字符串的字面量”10.9”

好了,到这里,这个小“谜题”就解释清楚了。

当然这个也不仅仅是PHP会这么定义了,几乎所有的语言都会定义这种缩写浮点数都形式. C语言中有的时候我们为了输入一个浮点型的整形,就可以采用比如 1. 来告诉编译器这是个浮点数.

只不过,一来刚好在PHP中.号还有另外一层含义就是字符串连接,二来…在PHP5.6之后是个新的操作符叫做Splat operator, 可以用来定义可变参数函数,或者解数组,比如,

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

PHP视频教学


php之var_dump(1.9)会输出什么?
  • var_export 与 var_dump用法介绍
  • var_export 与 var_dump用法介绍 | var_export 与 var_dump用法介绍 ...

    php之var_dump(1.9)会输出什么?
  • PHP中echo,print_r与var_dump区别分析【PHP】
  • PHP中echo,print_r与var_dump区别分析【PHP】 | PHP中echo,print_r与var_dump区别分析【PHP】 ...

    php之var_dump(1.9)会输出什么?
  • php var_export与var_dump 输出的不同【PHP】
  • php var_export与var_dump 输出的不同【PHP】 | php var_export与var_dump 输出的不同【PHP】 ...