php之var_dump(1...9)会输出什么?-php教程

资源魔 40 0
var_dump(1...9)会输入甚么?上面本篇文章给各人剖析一下。有肯定的参考代价,有需求的冤家能够参考一下,心愿对各人有所协助。

一个成绩, var_dump(1...9)输入甚么?

入手验证下:

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

输入10.9, 乍一看这个var_dump的输入很希奇是否是? 为何呢?

这里教各人,假如看到一段PHP代码觉得输入很希奇,第一反响是看下这段代码天生的opcodes是啥,尽管这个成绩实际上是词法剖析阶段的成绩,不外仍是用phpdbg剖析下吧(普通为了避免opcache的影响,会通报-n):

phpdbg -n -p /tmp/1.php
function name: (null)
L1-35 {main}() /tmp/1.php - 0x7f56d1a63460 + 4 ops
L2 #0 INIT_FCALL<1> 96 "var_dump"
L2 #1 SEND_VAL "10.9" 1
L2 #2 DO_ICALL
L35 #3 RETURN<-1> 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
 
function  foo($a, $b, $c) {
        var_dump($a + $b + $c);
}
 
 
$parameters = array (1, 2, 3);
 
foo(...$parameters);
?>

以是, 乍一看才会招致了这个看起来很困惑的后果

保举学习:PHP视频教程

以上就是php之var_dump(1...9)会输入甚么?的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学 var_dump()

抱歉,评论功能暂时关闭!