Vezérlési szerkezetek

Az elõzõ órában létrehozott programok minden futtatáskor ugyanazt az eredményt
adták, mindig ugyanazok az utasítások hajtódtak végre ugyanabban a sorrendben.
Ez nem biztosít túl nagy teret a rugalmasságnak.
Ebben az órában néhány olyan szerkezettel ismerkedünk meg, melyek segítségével
programunk alkalmazkodhat a körülményekhez. A következõket tanuljuk meg:
• Hogyan használjuk az if szerkezetet arra, hogy bizonyos sorok csak adott
feltételek teljesülése mellett hajtódjanak végre?
• Hogyan adhatunk meg csak bizonyos feltételek nem teljesülése esetén végrehajtand
ó mûveleteket?
• Hogyan használjuk a switch utasítást, hogy egy kifejezés értékétõl függõen
hajtsunk végre utasításokat?
• Hogyan ismételjük egy kódrészlet végrehajtását a while utasítás segítségével?
• Hogyan készíthetünk elegánsabb ciklusokat a for utasítás segítségével?
• Hogyan lépjünk ki a ciklusokból?
• Hogyan ágyazzuk egymásba a ciklusokat?
Elágazások
A legtöbb program feltételeket értékel ki és azok eredményének megfelelõen
változtatja viselkedését. A lehetõséget, hogy a PHP oldalak tartalma dinamikussá
váljék, az teszi lehetõvé, hogy a programok kimenete bizonyos feltételektõl
függhet. A legtöbb programozási nyelvhez hasonlóan a PHP 4-es változata is
biztosítja erre a célra az if utasítást.
Az if utasítás
Az if utasítás kiértékeli a zárójelek közötti kifejezést. Ha a kifejezés értéke igaz,
az utasításhoz tartozó programrész végrehajtódik. Ha a kifejezés hamis, a blokk
egyszerûen figyelmen kívül marad. Ez teszi lehetõvé a programoknak, hogy
döntéseket hozzanak.
if ( kifejezés )
{
// ha a kifejezés értéke igaz,
// ez a blokk végrehajtódik
}
Az 5.1. példaprogramban csak akkor hajtódik végre az if utáni rész, ha a kifejezés
értéke igaz
5.1. program Az if utasítás
1:
2:
3: 5.1. program Az if utasítás
4:
5:
6: 7: $hangulat = "boldog";
8: if ( $hangulat == "boldog" )
9: {
10: print "Hurrá, jó kedvem van!";
11: }
12: ?>
13:
14:
58 5. óra
A $hangulat változó értékét a "boldog"-gal az összehasonlító mûveletjel (==)
segítségével hasonlítottuk össze. Ha egyeznek, a kifejezés értéke igaz, így az if
kifejezéshez tartozó programblokk végrehajtódik. Bár az elõbbi programban
a print utasítást kapcsos zárójelek közé zártuk, ez csak akkor szükséges,
ha az if kifejezéstõl függõen több utasítást akarunk végrehajtani. A következõ
két sor így elfogadható:
if ( $hangulat == "boldog" )
print "Hurrá, jó kedvem van!";
Ha a $hangulat értékét "szomorú"-ra változtatjuk és újból lefuttatjuk programunkat,
az if kifejezés értéke hamis lesz, így a print utasítás nem hajtódik végre
és programunk nem ad kimenetet.
Az if utasítás else ága
Amikor az if utasítást használjuk, gyakran szeretnénk, hogy legyen egy olyan
alternatív programrész, amely akkor hajtódik végre, ha a vizsgált feltétel nem igaz.
Ezt úgy érhetjük el, hogy az if utasítás programrésze után kiírjuk az else kulcssz
ót, majd az alternatív programrészt. A séma a következõ:
if (feltétel)
{
// itt következik az a programrész, amely akkor kerül
// végrehajtásra, ha a feltétel értéke igaz
}
else
{
// itt pedig az a programrész található, amely akkor fut le,
// ha a feltétel értéke hamis
}
Az 5.2. példaprogram az 5.1. példaprogram kiegészített változata. Egy olyan
programblokkot tartalmaz, amely akkor hajtódik végre, ha a $hangulat értéke
nem "boldog".
5.2. program Az else ággal kiegészített if utasítás
1:
2:
3: 5.2. program Az else ággal kiegészített if<br />utasítás
4:
Vezérlési szerkezetek 59
5
5.2. program (folytatás)
5:
6: 7: $hangulat = "szomorú";
8: if ( $hangulat == "boldog" )
9: {
10: print "Hurrá, jó kedvem van!";
11: }
12: else
13: {
14: print "$hangulat vagyok, nem boldog.";
15: }
16: ?>
17:
18:
A példában a $hangulat értéke "szomorú", ami persze nem "boldog",
így az if utasítás feltétele hamis lesz, vagyis az elsõ programrész nem kerül
végrehajtásra. Az else-et követõ programblokk azonban lefut és a böngészõbe
a "szomorú vagyok, nem boldog." szöveg kerül.
Az if utasítás else ágának segítségével programunkban kifinomultabb döntéseket
hozhatunk, de egy feltétel eredménye alapján még így is csak kétféle dolgot
tehetünk. A PHP 4 azonban többre képes: több kifejezés értéke alapján sokfélek
épp reagálhatunk.
Az if utasítás elseif ága
Mielõtt az else ágban alternatív kódrészt adnánk meg, több kifejezés értékétõl
függõen – az if - elseif - else szerkezet segítségével – a programmal mást és
mást végeztethetünk. A használandó utasításforma a következõ:
if ( feltétel )
{
// ez a rész akkor fut le, ha a feltétel igaz
}
elseif ( másik feltétel )
{
// ez a rész akkor fut le, ha a másik feltétel igaz,
// és minden elõzõ feltétel hamis
}
// itt még tetszõleges számú elseif rész következhet
60 5. óra
else
{
// ez a rész akkor kerül végrehajtásra, ha egyik
// feltétel sem volt igaz
}
Ha az elsõ feltétel értéke hamis, a hozzá tartozó programrész nem kerül végrehajt
ásra. Ezután a PHP megvizsgálja az elseif kifejezés értékét. Ha a kifejezés
igaz, a hozzá tartozó programblokk fut le. Végül, ha egyik feltétel sem igaz,
az else utáni rész kerül végrehajtásra. Annyi elseif-et írhatunk a programba,
amennyi csak jólesik. Sõt, ha nincs szükségünk else ágra, vagyis olyan programr
észre, amely akkor hajtódik végre, ha egyik feltétel sem igaz, akár el is hagyhatjuk.
Az 5.3. példaprogram az elõzõeket egészíti ki egy elseif ággal.
5.3. program Egy else és elseif ággal bõvített if utasítás
1:
2:
3: 5.3. program Egy else és elseif ággal bõví-<br />tett if utasítás
4:
5:
6: 7: $hangulat = "szomorú";
8: if ( $hangulat == "boldog" )
9: {
10: print "Hurrá, jó kedvem van!";
11: }
12: elseif ( $hangulat == "szomorú" )
13: {
14: print "Szomorú vagyok.";
15: }
16: else
17: {
18: print "Sem boldog, sem szomorú nem vagyok, hanem
$hangulat.";
Vezérlési szerkezetek 61
5
A Perl nyelvben gyakorlattal rendelkezõk figyeljenek rá, hogy
a kulcsszót itt elseif-nek hívják!
5.3. program (folytatás)
19: }
20: ?>
21:
22:
A $hangulat értéke itt "szomorú". Ez nem azonos a "boldog"-gal, ezért
az elsõ blokk nem kerül végrehajtásra. Az elseif kifejezés a $hangulat változ
ó értékét hasonlítja össze a "szomorú" szöveggel. Mivel az egyenlõség fennáll,
ehhez a feltételhez tartozó programrész hajtódik végre.
A switch utasítás
A switch utasítás egy lehetséges módja annak, hogy egy kódrészletet egy kifejez
és értékétõl függõen hajtsunk végre. Van azonban néhány különbség az imént
tanult if és a switch között. Az if-et az elseif-fel használva több kifejezés
értékétõl tehetjük függõvé, hogy mi történjen. A switch esetében a program
csak egy kifejezést vizsgál meg és annak értékétõl függõen különbözõ sorokat
futtat. A kifejezésnek egyszerû típusnak kell lennie (szám, karakterlánc vagy
logikai érték). Az if feltétele csak igaz vagy hamis lehet, a switch kifejezését
akárhány értékkel összehasonlíthatjuk. De nézzük inkább az általános szerkezetet:
switch ( kifejezés )
{
case érték1:
// ez történjen, ha kifejezés értéke érték1
break;
case érték2:
// ez történjen, ha kifejezés értéke érték2
break;
default:
// ez történjen, ha a kifejezés értéke
// egyik felsorolt értékkel sem egyezett meg
break;
// az ördög nem alszik, jobban járunk, ha kitesszük
// ezt a “felesleges” break utasítást
}
A switch utasítás kifejezése gyakran egyszerûen egy változó. A switch-hez tartozó
programblokkban vannak a case címkék. Az utánuk írt érték kerül összehasonlításra
a switch kifejezésének értékével. Ha értékük megegyezik, a program ott folytató-
dik, a break utasítás pedig azt eredményezi, hogy a program futása a switch
62 5. óra
blokkja utáni részre kerül. Ha a break-et elfelejtjük, a program átlép a következõ
case kifejezéshez tartozó programrészre és azt is végrehajtja. Ha a kifejezés értéke
egyik elõzõ értékkel sem egyezik és a switch blokkján belül szerepel default
címke, akkor az utána levõ programrész kerül végrehajtásra. Ez sokszor bosszantó,
de néha hasznos is lehet. Vegyük a következõ kis példát.
switch( $hetnapja )
{
case "Péntek":
print "Kikapcsolni a vekkert, holnap nem kell
dolgozni!
";
case "Hétfõ":
case "Szerda":
print "Ma délelõtt dolgozom
";
break;
case "Kedd":
case "Csütörtök":
print "Ma délután dolgozom
";
break;
case "Vasárnap":
print "Bekapcsolni a vekkert!
";
case "Szombat":
print "Hurrá, szabadnap!
";
break;
default:
print "Azt hiszem ideje lenne egy új programoz
ót és/vagy egy jobb naptárat
keríteni
";
break;
}
A fenti kis program azt közli, mikor kell mennünk dolgozni és az ébresztõóra kezel
ésében is segít. A programot úgy építettük fel, hogy több esetben is ugyanazt a kó-
dot kelljen végrehajtani, így hasznos, hogy nem adtuk meg minden case címkénél
a break utasítást. Elég gyakori azonban, hogy a kezdõ programozó elfelejti megadni
a break utasítást. Hasonló helyzetekben jusson eszünkbe ez a példa.
Vezérlési szerkezetek 63
5
A case címkével elkezdett részeket ne felejtsük el break utasítá-
sokkal lezárni. Ha ezt nem tesszük meg, a program a következõ
case részt is végrehajtja és végül a default utáni rész is lefut.
A legtöbb esetben nem ez a switch kívánatos viselkedése.
Az 5.4. példaprogram a korábbi, if-fel megoldott példát alakítja át a switch
segítségével.
5.4. program A switch utasítás
1:
2:
3: 5.4. program A switch utasítás
4:
5:
6: 7: $hangulat = "szomorú";
8: switch ( $hangulat )
9: {
10: case "boldog":
11: print "Hurrá, jó kedvem van!";
12: break;
13: case "szomorú":
14: print "Szomorú vagyok.";
15: break;
16: default:
17: prin "Sem boldog, sem szomorú nem
vagyok, hanem $hangulat.";
18: }
19: ?>
20:
21:
A $hangulat változónak a "szomorú" értéket adtuk. A switch utasítás kifejezé-
se ez a változó lesz. Az elsõ case címke a "boldog" szöveggel való egyezést vizsg
álja. Mivel nincs egyezés, a program a következõ case címkére ugrik. A "szomor
ú" szöveg megegyezik a $hangulat változó pillanatnyi értékével, így az ehhez
tartozó programrész fog lefutni. A programrész végét a break utasítás jelzi.
A ?: mûveletjel
A ?: ternális (háromoperandusú) mûveletjel egy olyan if utasításhoz hasonlít,
amely értéket is képes visszaadni. A visszaadott értéket a vizsgált feltétel
határozza meg:
( feltétel ) ? érték_ha_a_feltétel_igaz : érték_ha_a_feltétel_hamis ;
64 5. óra
Ha a vizsgált feltétel igaz, a ? és a : közti kifejezés értékét adja, ha hamis, akkor
a : utánit. Az 5.5. példaprogram ezt a mûveletet használja, hogy egy változó
értékét a $hangulat változó értékétõl függõen állítsa be.
5.5. program A ?: mûveletjel használata
1:
2:
3: 5.5. program A ?: mûveletjel<br />használata
4:
5:
6: 7: $hangulat = "szomorú";
8: $szoveg = ( $hangulat=="boldog" ) ? “Hurrá,
jó kedvem van!" : "$hangulat vagyok, nem boldog.";
9: print "$szoveg";
10: ?>
11:
12:
A $hangulat-ot "szomorú"-ra állítottuk, majd megnéztük, hogy értéke
"boldog"-e. Mivel ez nem igaz, a $szoveg változó értéke a : utáni szöveg lesz.
Az e mûveletet használó programokat eleinte nehéz megérteni, de a mûvelet
hasznos lehet, ha csak két lehetõség közül lehet választani és szeretünk tömör
programot írni.
Ciklusok
Most már láttuk, hogyan kell döntések eredményétõl függõen különbözõ programr
észleteket futtatni. PHP programokkal arra is képesek vagyunk, hogy megmondjuk,
hányszor kell lefuttatni egy adott programrészt. Erre valók a ciklusok. Segítsé-
gükkel elérhetjük, hogy egyes programrészletek ismétlõdjenek. Szinte kivétel
nélkül igaz, hogy egy ciklus addig fut, amíg egy feltétel teljesül, vagy meg nem
mondjuk, hogy fejezõdjön be az ismétlés.
Vezérlési szerkezetek 65
5
A while ciklus
A while ciklus szerkezete rendkívül hasonlít az if elágazáséhoz:
while ( feltétel )
{
// valamilyen tevékenység
}
Amíg a while feltétele igaz, a hozzá tartozó programrész újból és újból végrehajt
ódik. A programrészen belül általában megváltoztatunk valamit, ami hatással lesz
a while feltételére; ha ezt nem tesszük meg, a ciklusunk a végtelenségig futni
fog. Az 5.6. példaprogram a while ciklus segítségével írja ki a kettes szorzótáblát.
5.6. program A while ciklus
1:
2:
3: 5.6. program A while ciklus
4:
5:
6: 7: $szamlalo = 1;
8: while ( $szamlalo <= 12 )
9: {
10: print "$szamlalo kétszerese ".($szamlalo*2)."
";
11: $szamlalo++;
12: }
13: ?>
14:
15:
A példában létrehoztuk a $szamlalo nevû változót. A while kifejezés feltétele
megvizsgálja, hogy ez a változó mekkora. Ha az érték nem nagyobb, mint 12,
a ciklus folytatódik (vagy elkezdõdik). A ciklusban a $szamlalo értéke és annak
kétszerese kiírásra kerül, majd a $szamlalo értéke eggyel nõ. Ez az utasítás
rendkívül fontos, mert ha elfelejtjük, a while feltétele soha nem lesz hamis, ezért
végtelen ciklusba kerülünk.
66 5. óra
A do..while ciklus
A do..while ciklus kicsit hasonlít a while-hoz. A lényegi különbség abban van,
hogy ebben a szerkezetben elõször hajtódik végre a kód és csak azután értékelõdik
ki a feltétel:
do
{
// végrehajtandó programrész
} while ( feltétel );
Ez a ciklus akkor lehet hasznos, ha mindenképpen szeretnénk, hogy a ciklushoz
tartozó programrész még akkor is legalább egyszer lefusson, ha a feltétel már
az elsõ végrehajtáskor hamis. Az 5.7. példaprogram a do..while szerkezet
egy alkalmazását mutatja be. A programrész mindig legalább egyszer lefut.
5.7. program A do..while ciklus
1:
2:
3: 5.7. program A do..while ciklus
4:
5:
6: 7: $szam = 1;
8: do
9: {
10: print "Végrehajtások száma: $szam
\n";
11: $szam++;
12: } while ( $szam > 200 && $szam < 400 );
13: ?>
14:
15:
A do..while ciklus megnézi, hogy a $szam változó értéke 200 és 400 között
van-e. Mivel a $szam változónak az 1 kezdeti értéket adtuk, így a feltétel hamis.
Ennek ellenére a programblokk egyszer végrehajtódik, mégpedig a feltétel kiérté-
kelése elõtt, ezért a böngészõben egy sor kiírásra kerül.
Vezérlési szerkezetek 67
5
A do..while ciklus feltételét tartalmazó zárójel után mindig ki kell
tenni a pontosvesszõt.
A for ciklus
A for semmi újat nem nyújt a while ciklushoz képest. A for ciklus használatával
azonban sokszor takarosabb, biztonságosabb módon közelíthetjük meg ugyanazt
a problémát. Korábban – az 5.6. példaprogramban – létrehoztunk egy változót
a while cikluson kívül, majd a while kifejezése megvizsgálta ennek a változónak
az értékét. Végül a változó értékét a ciklus végén eggyel növeltük. A for ciklus
mindezt egyetlen sorban teszi lehetõvé. Ez tömörebb programot eredményez és ritk
ábban fordulhat elõ, hogy a változót elfelejtjük növelni, ami végtelen ciklust okoz.
for ( változó_hozzárendelése; feltétel; számláló_növelése)
{
// a végrehajtandó programblokk
}
Az ezt megvalósító egyenértékû while:
változó_hozzárendelése;
while ( feltétel )
{
// a végrehajtandó programblokk
számláló_növelése;
}
A zárójelekben levõ kifejezéseket pontosvesszõvel kell elválasztanunk egymástól.
Az elsõ kifejezés rendszerint egy számlálónak ad kezdeti értékét, a második egy felté-
tel, ami alapján eldõl, hogy folytatódik-e a ciklus; a harmadik egy számlálót növelõ
utasítás. Az 5.8. példaprogram az 5.6. példaprogram for ciklusos megoldása.
5.8. program A for ciklus használata
1:
2:
3: 5.8. program A for ciklus használata
4:
5:
6: 68 5. óra
A feltétel, a számláló_növelése és a változó_hozzárendelése param
éterek helyére bármilyen érvényes PHP állítás írható. A kezd
õk bánjanak óvatosan ezzel a lehetõséggel.
5.8. program (folytatás)
7: for ( $szamlalo = 1; $szamlalo <= 12; $szamlalo++ )
8: {
9: print "$szamlalo kétszerese ".( $szamlalo * 2
)."
";
10: }
11: ?>
12:
13:
Az 5.6. és az 5.8. példaprogram kimenete teljesen azonos. A for ciklus használata
a programot összefogottabbá tette. Mivel a $szamlalo nevû változó létrehozása
és módosítása egy sorban van, így a ciklus egészének logikája elsõ látásra világos.
A for zárójelében az elsõ utasítás a $szamlalo változót egyre állítja. A feltételes
kifejezés megnézi, hogy a $szamlalo értéke nem nagyobb-e, mint 12. Az utolsó
kifejezés a $szamlalo-t eggyel növeli.
Amikor a program a for ciklushoz ér, megtörténik az értékadás, majd rögtön
utána a feltétel kiértékelése. Ha a feltétel igaz, a ciklus végrehajtódik, majd
a $szamlalo értéke eggyel nõ és a feltétel kiértékelése újból végrehajtódik.
A folyamat addig folytatódik, amíg a feltétel hamissá nem válik.
Ciklus elhagyása a break utasítás segítségével
A while és for ciklusok lehetõséget biztosítanak arra, hogy egy beépített felté-
teles kifejezés segítségével kilépjünk belõlük. A break utasítás lehetõvé teszi,
hogy más feltételektõl függõen megszakítsuk egy ciklus futását. Ez jó lehet például
hibakezeléskor vagy hibák megelõzésekor. Az 5.9. példaprogram egy egyszerû
for ciklusból áll, amely egy nagy számot egy egyre növekvõ számmal oszt el és
a mûvelet eredményét meg is jeleníti.
5.9. program Egy for ciklus, amely a 4000-et tíz,
egyre növekvõ számmal osztja el
1:
2:
3: 5.9. program A for ciklus használata<br />2.
4:
5:
6: Vezérlési szerkezetek 69
5
5.9. program (folytatás)
7: for ( $szamlalo=1; $szamlalo <= 10, $szamlalo++ )
8: {
9: $seged = 4000/$szamlalo;
10: print "4000 $szamlalo részre osztva $seged.
";
11: }
12: ?>
13:
14:
A példában a $szamlalo nevû változónak az 1 kezdeti értéket adjuk. A for
utasítás feltételes kifejezése ellenõrzi, hogy a $szamlalo nem nagyobb-e, mint
10. A ciklus belsejében a 4000-et elosztjuk a $szamlalo-val és az eredményt
kiírjuk a böngészõbe.
Ez elég célratörõnek tûnik. De mi a helyzet akkor, ha a $szamlalo értéke
a felhasználótól származik? A változó értéke lehet negatív szám vagy akár szöveg
is. Vegyük az elsõ esetet: változtassuk meg a $szamlalo kezdõértékét 1-rõl -4-re.
Így a ciklusmag ötödik futtatása során nullával kellene osztani, ami nem elfogadhat
ó. Az 5.10. példaprogram ezt azzal védi ki, hogy a ciklus futását befejezi,
ha a $szamlalo változóban a nulla érték van.
5.10. program A break utasítás használata
1:
2:
3: 5.10. program A break utasítás<br />használata
4:
5:
6: 7: $szamlalo = -4;
8: for ( ; $szamlalo <= 10; $szamlalo++ )
9: {
10: if ( $szamlalo == 0 )
11: break;
12: $seged = 4000/$szamlalo;
13: print "4000 $szamlalo részre osztva $seged.
";
14: }
15: ?>
16:
17:
70 5. óra
Egy if utasítással megvizsgáljuk a $szamlalo értékét. Ha nullával egyenlõ,
azonnal kilépünk a ciklusból; a program ekkor a for ciklus utáni sorokat kezdi
feldolgozni. Figyeljük meg, hogy a $szamlalo-t a cikluson kívül hoztuk létre,
hogy olyan helyzetet utánozzunk, amikor a $szamlalo értéke „kívülrõl”
származik, például egy ûrlapról vagy egy adatbázisból.
Következõ ismétlés azonnali elkezdése
a continue utasítás segítségével
A continue utasítás segítségével az éppen folyó ismétlést befejezhetjük,
mégpedig úgy, hogy ez ne eredményezze az egész ciklusból való kilépést,
csak a következõ ismétlés kezdetét jelentse. Az 5.10. példában a break utasítás
használata kicsit drasztikus volt. Az 5.11. példaprogramban a nullával való
osztást úgy kerüljük el, hogy közben programunk nem lép ki az egész ciklusból.
5.11. program A continue utasítás használata
1:
2:
3: 5.11. program A continue utasítás<br />használata
4:
5:
6: 7: $szamlalo = -4;
8: for ( ; $szamlalo <= 10; $szamlalo++ )
9: {
10: if ( $szamlalo == 0 )
11: continue;
12: $seged = 4000/$szamlalo;
13: print "4000 $szamlalo részre osztva $seged.
";
14: }
Vezérlési szerkezetek 71
5
A nullával való osztás nem eredményez végzetes hibát a PHP 4-
ben, csak egy figyelmeztetõ üzenet jelenik meg a böngészõben.
A program futása folytatódik.
A for ciklus fejébõl bármelyik kifejezés elhagyható, de figyeln
ünk kell arra, hogy a pontosvesszõket mindig kiírjuk.
5.11. program (folytatás)
15: ?>
16:
17:
Itt a break utasítást continue-ra cseréltük. Ha a $szamlalo értéke nullával egyenl
õ, az éppen folyó ismétlés véget ér, a végrehajtás pedig rögtön a következõre kerül.
Egymásba ágyazott ciklusok
A ciklusok törzsében is lehetnek ciklusok. Ez a lehetõség különösen hasznos,
ha futási idõben elõállított HTML táblázatokkal dolgozunk. Az 5.12. példaprogramban
két egymásba ágyazott for ciklus segítségével egy szorzótáblát írunk ki
a böngészõbe.
5.12. program Két for ciklus egymásba ágyazása
1:
2:
3: 5.12. program Két for ciklus egymásba<br />ágyazása
4:
5:
6: 7: print "

\n"; // HTML táblázat kezdete
8: for ( $y=1; $y<=12; $y++ )
9: {
10: print "\n"; // sor kezdete a HTML táblázatban
11: for ( $x=1; $x<=12; $x++ )
12: {
13: print "\t\n"; // cella vége
16: }
17: print "\n"; // sor vége
18: }
72 5. óra
A break és continue utasítások a ciklus logikáját bonyolultabbá,
a programot pedig nehezebben olvashatóvá teszik, így furcsa
programhibákat idézhetnek elõ, ezért óvatosan használandók.
5.12. program (folytatás)
19: print "
"; // cella kezdete
14: print ($x*$y);
15: print "
\n"; // táblázat vége
20: ?>
21:
22:
A külsõ for ciklus az $y változónak az 1 kezdeti értéket adja. A ciklus addig fog
futni, amíg a változó nem nagyobb 12-nél, az utolsó kifejezés pedig biztosítja,
hogy $y értéke minden ismétlés után eggyel nõjön. A ciklus törzse minden ismétl
és során kiír egy tr (table row – táblázatsor) HTML elemet, majd egy újabb
for ciklus kezdõdik. A belsõ ciklus az $x változó értékét a külsõ ciklushoz
hasonlóan végigfuttatja 1-tõl 12-ig. A ciklus törzsében egy td (table data –
táblázatcella) elemet ír ki, amelybe az $x*$y érték kerül. Az eredmény egy
ízlésesen formázott szorzótábla lesz.
Összefoglalás
Ebben az órában a vezérlési szerkezetekrõl tanultunk és arról, hogyan segítenek
minket programjaink változatosabbá és rugalmasabbá tételében. A legtöbb megtanult
szerkezet újból és újból meg fog jelenni a könyv hátralevõ részében.
Megtanultuk, hogyan hozzunk létre if utasításokat, hogyan egészítsük ki azokat
elseif és else ágakkal. Hallottunk arról, hogyan használjuk a switch utasítást,
hogy egy kifejezés adott értékei esetén más és más történjen. Tanultunk a ciklusokr
ól, pontosabban a while és a for ciklusokról, és arról, hogy a break és
a continue utasítások segítségével hogyan léphetünk ki végleg a ciklusból, illetve
hogyan hagyhatunk ki egy-egy ismétlést. Végül megtanultuk, hogyan kell ciklusokat
egymásba ágyazni és erre gyakorlati példát is láttunk.
Kérdések és válaszok
A vezérlési szerkezetek feltételes kifejezéseinek mindenképpen logikai
értéket kell adniuk?
Végsõ soron igen, bár a feltételes kifejezéseknél a kiértékelés szempontjából minden,
ami nulla, üres karakterlánc vagy nem meghatározott változó, false-nak,
minden egyéb true-nak számít.
A vezérlési szerkezetekhez tartozó programblokkot mindig kapcsos záró-
jelbe kell tenni?
Ha a programblokk csak egy utasításból áll, a kapcsos zárójel elhagyható, de ezt
tenni nem célszerû, mert ha a programblokkot új utasítással egészítjük ki, véletlen
ül hibákat idézhetünk elõ.
Vezérlési szerkezetek 73
5
Ez az óra bemutatta az összes ciklust?
Nem, a hetedik, tömbökkel foglalkozó órában találkozunk még a foreach
ciklussal is, melynek segítségével egy tömb elemein haladhatunk végig.
Mûhely
A mûhelyben kvízkérdések találhatók, melyek segítenek megszilárdítani az órában
szerzett tudást. A válaszokat az A függelékben helyeztük el.
Kvíz
1. Hogyan használnánk az if vezérlési szerkezetet olyan program írására, hogy
ha az $eletkor változó értéke 18 és 35 között van, az
"Üzenet fiataloknak" szöveget írja ki? Ha az $eletkor értéke
bármi más, az "Általános üzenet" szöveg jelenjen meg a böngészõben.
2. Hogyan egészíthetnénk ki az elsõ kérdésbeli programunkat úgy, hogy
az "Üzenet gyerekeknek" jelenjen meg akkor, ha az $eletkor változó
értéke 1 és 17 között van?
3. Hogyan készítenénk egy while ciklust, amely kiírja az 1 és 49 közötti
páratlan számokat?
4. Hogyan valósítanánk meg az elõzõ kérdésbeli programot for ciklus
segítségével?
Feladatok
1. Nézzük végig a vezérlési szerkezetek utasításformáját! Gondoljuk végig,
hogyan lehetnek ezek a szerkezetek a segítségünkre!
2. Nézzük meg a ?: mûveletet! Miben különbözik ez a többi vezérlési
szerkezettõl? Mikor lehet hasznos?