2017-02-15 4 views
1

jeder. Ich habe heute ein PHP while Loop-Beispiel gesehen, das ich nicht ganz verstehe.Benötigen Sie Hilfe, ein Beispiel PHP zu verstehen, während

Beispiel (Complete code)

// Open XML file 
$fp=fopen("note.xml","r"); 

// Read data 
while ($data=fread($fp,4096)) {   // Line about which I have questions 
    xml_parse($parser,$data,feof($fp)) or 
    die (sprintf("XML Error: %s at line %d", 
    xml_error_string(xml_get_error_code($parser)), 
    xml_get_current_line_number($parser))); 
} 

Der Ausdruck $data=fread($fp,4096) innerhalb der Schleife while Klammern scheint nicht, überhaupt zu verändern. Es ist nur eine Zuweisungsanweisung. Wie endet diese Schleife? Die Funktion xml_parse($parser,$data,feof($fp)) endet möglicherweise, wenn das Parsing abgeschlossen ist, aber ich sehe nicht, wie sich dies auf die Testbedingung für die while-Schleife auswirkt. Ich denke, das Parsen der XML-Datei würde sich unendlich wiederholen.

Auch wenn Zuweisungsausdruck als Testbedingung für eine Schleife gibt, werden wir uns wirklich nur, wenn die RIGHT Seite der Zuweisung Erträge ob TRUE oder FALSE zu sehen, um zu bestimmen, um die Schleife zu beenden? Ich habe jedoch Zweifel darüber, denn dann würde es eine Endlosschleife für dieses Beispiel erzeugen, da $data, einmal zugewiesen, immer TRUE zurückgeben wird.

Dank

+0

Wenn fread das Ende der Datei erreicht, gibt es null an $ data zurück und es wird false, so dass die while-Schleife stoppt – SIDU

Antwort

1

Es endet, wenn die fread() Funktion false zurückgibt, was tut, wenn er das Ende der Datei erreicht. Sie können dies in der PHP-Dokumentation für fread bestätigen:

http://php.net/fread

Was Ihre Frage nach der Bewertung der Zuordnung, in PHP, wenn Sie eine Zuordnung zu bewerten wird es den endgültigen Wert der Variablen zurückkehren (anders Javascript zum Beispiel, in dem die Zuweisung tatsächlich ausgewertet wird), so dass Sie im Grunde sowohl einer Variablen einen Wert aus einer Funktion zuweisen als auch das Ergebnis dieser Funktion (der Variablen zugewiesen) ohne zusätzliche Syntax auswerten.

+0

Das bedeutet also, dass die Zuweisung stattfindet, während die Datei gelesen wird, nicht nachdem der Lesevorgang abgeschlossen ist? –

+0

Ja, fread() versucht, die Daten aus der Datei zu lesen, und falls dies möglich ist, gibt sie es zurück, falls nicht, gibt dann false zurück, so dass der Variablen entweder die gelesenen Daten oder falsch.Dann wertet die 'while'-Anweisung den endgültigen Wert Ihrer' $ data' -Variable aus und kann sie einmal nicht mehr als "wahr" bewerten (zB wenn der Wert false, null, null, eine leere Zeichenkette oder ein leeres Array ist), hört es auf. – ablopez

+0

Re-Lesen Sie Ihre ursprüngliche Antwort und PHP: fread-Manual, ich glaube, ich verstehe es jetzt. Danke –

0

Arbeit

while(there is data to read) OR (!EOF) 

break when reach (EOF==true) OR no data to read OR return false 

* EOF (end of file)

0

als PHP-Handbuch sagt, gibt die Funktion freaddie Lese String oder FALSE.

Das bedeutet:

$data=fread($fp,4096)

In der obigen Aussage der Wert $data entweder den Inhalt der Datei note.xml oder false. Wie Sie vielleicht wissen, wird while-Schleife fortgesetzt, bis die Bedingung false ist. Diese Anweisung lautet false nur dann, wenn die Funktion fread($fp,4096) keine Daten aus der Datei lesen kann, wenn keine Daten mehr zu lesen sind.

+0

danke. Aber ich kann nicht verstehen, was du gesagt hast. Zum Beispiel, wenn $ data = fread ($ fp, 4096) eine reguläre Anweisung außerhalb der while-Schleife ist. $ data wäre nutzlos, weil es schließlich immer FALSCH wäre, da es immer einen Zeitpunkt geben wird, an dem keine Daten mehr zu lesen sind? –

+1

Ja, genau deshalb wurde dieser Trick innerhalb der while-Schleife verwendet, um die while-Schleife bis zu diesem Punkt auszuführen, wenn das Ergebnis "FALSE" lautet. – Imran

+0

Upvote, um dies zu verdeutlichen. –

Verwandte Themen