Az alapoktól...

PHP kezdőknek

PHP kezdőknek

13. lecke - Ciklusokon belül - break, continue, goto

2015. augusztus 03. - Frantique

A ciklusosan ismétlődő műveletek hatékonyságát láttuk az előző leckék során. Mi történik olyan esetben, ha valamiért meg kell szakítani a ciklust még mielőtt az természetes módon véget érne, esetleg át kell ugorni a ciklus belsejében levő kód egy részét? Ezekre az esetekre alkalmazhatjuk a break (vele már találkoztunk korábban), a continue és a goto utasításokat. 

A break csak cikluson belül használható, és a for, foreach, while, do .. while és switch szerkezetek futását szakítja meg. Az utasítás számot fogad el argumentumként: ha meg van adva, akkor ez a szám határozza meg, hogy az egymásba ágyazott ciklusokból milyen szintig kell kitörni. Az alábbi példa ezt szemlélteti:

--------------------

<?php
for ($i = 0; $i < 10; $i++) {                     //3. szint       
        for ($j = 0; $j < 10; $j++) {             //2. szint
                for ($z = 0; $z < 100; $z++) {    //1. szint
                        if ($z > 10) {
                                break 2;          //2. szintre tör ki
                        }
                        echo "i: $i, j: $j, z: $z\n";
                }
        }
}
?>

--------------------

A fenti példában látott 2. szintről való kitörés azt jelenti, hogy valójában a $j értéke sose lesz 0-nál nagyobb, mivel minden körben, amikor elkezdődik a ciklus, a benne levő $z változó értéke, amint eléri a 11-et, visszaugrik a 3. szintre. Ezzel együtt az 1. szint $z értékét sose fogjuk 10 fölött látni kiírva.

Argumentum nélkül csak az aktuális ciklusból tör ki a programunk: ezért a break; kifejezés egyenértékűnek tekinthető a break 1; kifejezéssel.

A continue utasítást olyankor használjuk, amikor a ciklusban levő, a contiue utasítás után következő kódrészletet át akarjuk ugrani:

--------------------

<?php
echo "Páros számok listája:\n";
for ($i = 0; $i <= 10; $i++) {
        if (($i % 2) === 1) {   // Ha van maradék, akkor páratlan,
                continue;       // ezért átugorjuk a többi részt.
        }
                echo "$i\n";    // Kiírjuk a páros számot.
}

?>

 

--------------------

A continue utasítás ugyanúgy elfogad szám argumentumot, mint a break - a működése is azonos: a számérték határozza meg a folyatás szintjét.

A goto ismerős lehet a 35+ korosztálynak, akik még aktívan programoztak valamely BASIC nyelvben. A logikája egyszerűnek tűnik: ugorjunk egy adott nevű címkéhez a kódban, amely címkét cimke: formában adunk meg. Van azonban jó pár megkötése a goto utasításnak: nem ugorhatunk ciklusba vagy függvénybe, csak ugyanazon fájlban levő címkére hivatkozhatunk, valamint nem ugorhatunk ki függvényből. A ciklusokból való kiugrási módszerként azonban alkalmazható. A legegyszerűbb példán keresztül szemléltetjük a goto működését:

--------------------

<?php
goto cimke; // >------->----->---+
echo 'Ezt sose fogod látni!'; // | Ezt a részt átugorjuk...
cimke:   // <------<------<------+ Ugrás ide!
echo 'Ezt viszont igen!';
?>

 

--------------------

Ciklusból való kiugrásra példa:

--------------------

<?php
for ($i = 0; $i < 100; $i++) {
        if ($i > 10) {        //Ha meghaladja a 10-et...
        goto cimke;           //ugrás a címkéhez!
        }
        echo "$i\n";
}
cimke:
echo 'Az $i értéke elérte a 10-et!';
?>

--------------------

Figyelem!

A kódban nem csak lefele, hanem visszafele is lehet ugrani, így nem nehéz végtelen ciklust létrehozni:

--------------------

<?php
eleje:
         echo 'Eleje';
         goto vege;
         echo 'Közepe, amit sose írunk ki.';
vege:
         echo 'Vége';
         goto eleje;
?>

--------------------

 

-----------------------------------------------------------------------------------------------------

Feladatok

1. Hozzunk létre egy ciklust, amely elszámol 100-ig, majd break segítségével ugorjunk ki a ciklusból, ha a változó értéke nagyobb, mint 50!

2. Ágyazzunk egymásba 3 ciklust, és próbáljuk ki, mi történik, ha break utasítást használunk argumentummal, majd írjuk át úgy, hogy a helyére continue kerüljön. Mit tapasztaltunk?

3. Goto segítségével próbáljuk ki a címkékhez ugrást tetszőleges kódon.

 

A bejegyzés trackback címe:

https://php-kezdoknek.blog.hu/api/trackback/id/tr257676224

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása