Heim >Backend-Entwicklung >PHP-Tutorial >Was wird PHPs var_dump(1...9) ausgeben?
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.
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-TutorialDas 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!