Heim  >  Artikel  >  Backend-Entwicklung  >  Was wird PHPs var_dump(1...9) ausgeben?

Was wird PHPs var_dump(1...9) ausgeben?

青灯夜游
青灯夜游nach vorne
2020-04-13 09:18:093284Durchsuche

Was wird var_dump(1...9) ausgeben? Der folgende Artikel wird es für Sie analysieren. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Was wird PHPs var_dump(1...9) ausgeben?

Eine Frage: var_dump(1...9)Was ist die Ausgabe?

Praktische Überprüfung:

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

Die Ausgabe beträgt 10,9 Auf den ersten Blick ist das var_dump Die Ausgabe ist seltsam, nicht wahr? Warum?

Hier werde ich Ihnen beibringen, dass, wenn Sie einen Teil des PHP-Codes sehen und das Gefühl haben, dass die Ausgabe seltsam ist, Ihre erste Reaktion darin besteht, sich die von diesem Code generierten Opcodes anzusehen. Obwohl dieses Problem tatsächlich ein Problem ist die lexikalische Analysephase, aber immer noch verwenden Lassen Sie es uns mit phpdbg analysieren (im Allgemeinen wird -n übergeben, um den Einfluss von Opcache zu verhindern):

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

Es scheint also, dass 1...9 wird Konstante 10.9, lange bevor der Opcode generiert wird. Schauen wir uns jetzt zend_lingual_scanner.l an und finden Sie diese Zeile:

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

Dies ist das durch lexikalische Analyse definierte Format von Gleitkommazahlen. An diesem Punkt wurde uns plötzlich klar:

1 ...9 wird der Reihe nach akzeptiert als: 1. (Gleitkommazahl 1), dann (String-Verkettungssymbol) und dann .9 (Gleitkommazahl). Zahl 0,9)

, also wird es direkt während der Kompilierungsphase generiert „1“ -> String-Literal „10,9“

Okay, hier, dieses kleine „Rätsel“ wird anschaulich erklärt.

Natürlich ist dies nicht nur in PHP definiert, fast alle Sprachen definieren diese abgekürzte Gleitkommaform. Manchmal können wir in der C-Sprache beispielsweise eine Gleitkomma-Ganzzahl eingeben 1. Dem Compiler mitteilen, dass es sich um eine Gleitkommazahl handelt. Erstens hat die Zahl jedoch eine andere Bedeutung, nämlich die Zeichenfolgenverkettung Dann gibt es einen neuen Operator namens Splat-Operator, mit dem sich variable Parameterfunktionen definieren oder Arrays lösen lassen, zum Beispiel

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

Das führt also auf den ersten Blick zu diesem verwirrenden Ergebnis

Empfohlenes Lernen:

PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas wird PHPs var_dump(1...9) ausgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:laruence.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen