PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP-Bug in Prä-Inkrement?



MikeG
09-11-2004, 12:34
Hallo, ich hab hier ein kleineres Problem, bei dem ich nicht weiß, ob ich zu blöd bin oder es ein Bug in PHP ist:


for($x = 0; $x < 10; ++$x)
print("Momentan hat \$x den Wert $x<br />");

Es sollte eigentlich eine Ausgabe von 1 bis 10 kommen, aber ich bekomme 0-9. Man achte auf den Prä-Inkrement-Operator in der for-Schleife. Kann mir das jemand erklären?

Gruß
Mike

msi
09-11-2004, 13:50
ob du $x++ oder ++$x schreibst ist in diesem fall egal, das hat nur eine wirkung wenn du die variable gleichzeitg benutzt, also der rückgabewert von dieser operation.

angenommen $x ist 4 wird bei $x++ auch 4 zurückgegeben $x allerdings auf 4 gesetzt. bei ++$x wird 5 zurückgegeben und $x auch auf 5 gesetzt.

in einer forschleife allerdings wird diese operation durchgeführt und danach die bedinung $x < 10 überprüft und für 10 gilt das nunmal nicht mehr.
also erhältst du nur eine ausgabe von 0-9

will heißen eine for schleife geht so vor. sie setzt $x = 0 (also das was vor dem ersten ; steht). Dann überprüft sie die bedingung durchläuft den code.
Dann wird ++$x ausgerufen. Danach die Bedingung überprüft und der Code ausgefürt...
solange die Bedinungn eben erfüllt ist.

wenn dus anderst willst, probier das:

for ($x=0; ++$x < 10; ) {
// ...
}
Das sollte aber deinen zweck erfüllen.

undefined
09-11-2004, 15:21
Also ich sehe keinen Bug, du meinst wohl eher so ;)


for( $x = 0; $x <= 10; ++$x )
echo $x . "<br/>";

msi
09-11-2004, 17:03
Also ich sehe keinen Bug, du meinst wohl eher so ;)


for( $x = 0; $x <= 10; ++$x )
echo $x . "<br/>";


lies dir doch mal seinen beitrag durch, bevor du antwortest *g*,
es geht im darum, dass er ++$x geschribene hat und meint deswegen würde die for schleife einen wert mehr zu lassen als bei $x++.
darauf bin ich aber schon recht ausführlich eingegangen.

MikeG
09-11-2004, 19:55
Hmm, ok, das es nicht bis 10 zählt, ist nun klar. Ich habe mal irgendwo gehört, ein Prä-(In/De)krement-Operator wird am Anfang der Schleife in/dekrementiert. Post erst nach dem die Schleife einmal komplett gelaufen ist. Demzufolge müsste es bei 1 anfangen zu zählen. Ist das also falsch... Gut, dann hab ich mich wohl geirrt. Somit ist es in Schleifen also egal, ob man post- oder pre- in/dekrementiert.

Gruß
Mike