What will var_dump(1...9) output? The following article will analyze it for you. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to everyone.
A question, var_dump(1...9)
What is the output?
Verify it by hand:
php -r “var_dump(1...9)”; string(4) ”10.9“
Output 10.9. At first glance, the output of this var_dump seems strange, right? why?
Here we will teach you, if you see a piece of PHP code and feel that the output is strange, the first reaction is to see what the opcodes generated by this code are. Although this problem is actually a problem in the lexical analysis stage, but still use Let's analyze it with phpdbg (usually in order to prevent the influence of opcache, -n will be passed):
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
So it seems that long before the opcode is generated, 1...9 becomes the constant 10.9, considering This is a literal value. Let’s take a look at zend_language_scanner.l and find this line:
DNUM ({LNUM}?"."{LNUM})|({LNUM}"."{LNUM}?)
This is the format of floating point numbers defined by lexical analysis. It suddenly dawned on us at this point:
1 ...9 will be accepted in sequence as: 1. (floating point number 1), then . (string concatenation symbol) and then .9 (floating point number 0.9)
so it will be generated directly during the compilation phase "1" . "0.9" -> String literal "10.9"
Okay, here, this little "puzzle" is explained clearly.
Of course, this is not only defined in PHP, almost all languages will define this abbreviated floating-point form. Sometimes in C language, in order to input a floating-point integer, we can Use for example 1. to tell the compiler that this is a floating point number.
However, firstly, it happens to be in PHP. The number has another meaning, which is string concatenation. Secondly... in PHP5.6 Then there is a new operator called the Splat operator, which can be used to define variable parameter functions or solve arrays, for example,
So, at first glance, this leads to this confusing result
Recommended learning: PHP video tutorial
The above is the detailed content of What will php's var_dump(1...9) output?. For more information, please follow other related articles on the PHP Chinese website!