What will php's var_dump(1...9) output?

青灯夜游
Release: 2023-04-08 14:26:01
forward
3300 people have browsed it

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.

What will php's var_dump(1...9) output?

A question, var_dump(1...9)What is the output?

Verify it by hand:

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

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
Copy after login

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}?)
Copy after login

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,

<?php
 
function  foo($a, $b, $c) {
        var_dump($a + $b + $c);
}
 
 
$parameters = array (1, 2, 3);
 
foo(...$parameters);
?>
Copy after login

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!

Related labels:
source:laruence.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template