Permalänk
Medlem

Teori bakom whileloopen i php

Tjena!

Long story short: Jag behärskar en del grundläggande PHP men vill nu utöka mina kunskaper. En del av det jag kan har jag bara lärt mig att memorera, utan att helt förstå logiken i koden. En detalj som jag inte riktigt begriper, och som jag hoppas att någon vis människa kan förklara för mig, har att göra med whileloopen.

Vi tar ett enkelt exempel. Den översta loopen nedan spottar fram talföljden 1-10. Först tilldelar vi variabeln "nummer" värdet 1. Sedan anger vi i loopen ett villkor, nämligen att den ska fortsätta upp till och med 10. Sedan skriver vi ut ett mellanrum och variabeln + 1. Varje gång servern exekverar loopen plussar den på ett heltal och resultatet blir alltså 1-10.

Vad jag inte förstår är följande: Det sista steget i loopen betyder, i min hjärna, att servern ska skriva ut variabeln "nummer" + 1. Men variabeln + 1 är ju i det här fallet 2. Så varför börjar inte talföljden med en tvåa, d.v.s. 2-10?

Jag skriver hellre koden som i loopen längst ned. Det stämmer överens med min intuition att först skriva ut variabeln en gång, sedan plussa ett heltal, och sedan köra om loopen igen med det nya värdet på variabeln. Båda exemplen ger ju samma resultat, men jag begriper inte riktigt varför det första exemplet fungerar.

Mycket tacksam för svar.

<?php $nummer = 1; while ($nummer<=10) { echo " "; echo $nummer++; } ?>

<?php $nummer = 1; while ($nummer<=10) { echo " "; echo $nummer; $nummer++; } ?>

Permalänk
Medlem

Detta kanske gör att du förstår lite bättre.

<?php $i = 1; echo $i++; // 1 $i = 1; echo ++$i; // 2 ?>

Permalänk
Medlem

Att ha plustecknen efter variabeln gör så talet ökar efter funktionen är körd, om du har plustecknen före variabeln ökar det före funktionen körs.

Visa signatur

Chassi: DAN A4 | MB: ASUS VI Impact | GPU: Titan X | CPU: 4770K | RAM: 2x8GB Corsair Vengeance | SSD: Samsung 830 512GB | Skärm: ASUS Swift IPS

Permalänk
Medlem
Skrivet av xinux:

Att ha plustecknen efter variabeln gör så talet ökar efter funktionen är körd, om du har plustecknen före variabeln ökar det före funktionen körs.

Tack för snabba svar.

Ok, men jag försöker förstå när de olika stegen sker i förhållande till läsningen av koden. I fallet med två plustecken efter variabeln, skriver programmet ut variabeln efter att den läst $i, men innan det har kommit till ++? Och behåller sedan ++ i minnet till nästa exekvering av loopen, då det återigen skriver ut variabeln innan det kommer till ++?

Hoppas att jag gör mig förståelig

syntax
Permalänk
Legendarisk

Se även http://php.net/manual/en/language.operators.increment.php

Edit:

Det här kanske hjälper till att förklara:

function postinc(&$i) // $i++ { $t = $i; $i = $i + 1; return $t; } function preinc(&$i) // ++$i { $i = $i + 1; return $i; }

Skickades från m.sweclockers.com

Visa signatur

Abstractions all the way down.

Permalänk
Hedersmedlem
Skrivet av Vienno:

Tack för snabba svar.

Ok, men jag försöker förstå när de olika stegen sker i förhållande till läsningen av koden. I fallet med två plustecken efter variabeln, skriver programmet ut variabeln efter att den läst $i, men innan det har kommit till ++? Och behåller sedan ++ i minnet till nästa exekvering av loopen, då det återigen skriver ut variabeln innan det kommer till ++?

Hoppas att jag gör mig förståelig

Det är inte nästa varv i loopen, utan direkt efter den läst värdet.

$i = 0; while ($i <= 10) { echo $i++ . "<br />"; echo ++$i . "<br />"; }

Första loopen skriver det 0 och 2, nästa loop 2 och 4, osv.
Först körs första raden, då den läser 0 och skriver ut det, och sedan ökar $i till 1; därefter ökar den $i till 2 på nästa rad och läses av det sedan.
I andra loopen läser den av 2 och skriver ut det, ökar värdet; rad två ökar värdet igen, till 4, och skriver ut, osv.

Visa signatur

Asus B550M-Plus / Ryzen 5800X / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + HDDs / Corsair RM650x / Acer XB271HU (1440p165) / LG C1 55"
Mobil: Moto G200

Permalänk
Medlem
Skrivet av Thomas:

Det är inte nästa varv i loopen, utan direkt efter den läst värdet.

$i = 0; while ($i <= 10) { echo $i++ . "<br />"; echo ++$i . "<br />"; }

Första loopen skriver det 0 och 2, nästa loop 2 och 4, osv.
Först körs första raden, då den läser 0 och skriver ut det, och sedan ökar $i till 1; därefter ökar den $i till 2 på nästa rad och läses av det sedan.
I andra loopen läser den av 2 och skriver ut det, ökar värdet; rad två ökar värdet igen, till 4, och skriver ut, osv.

Den stod där och svajade ett tag, men nu trillade polletten ner. Skönt att förstå vad det jag skriver betyder exakt i framtiden. Tack Thomas och alla andra!