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

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

青灯夜游
Freigeben: 2023-04-08 14:26:01
nach vorne
3350 Leute haben es durchsucht

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“
Nach dem Login kopieren

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
Nach dem Login kopieren

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}?)
Nach dem Login kopieren

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);
?>
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:laruence.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage