A PHP programozási nyelv

Utasítások, vezérlési szerkezetek

A PHP vezérlési szerkezetei szinte azonosak a Perl-ben megszokottakhoz, bár a formai követelmények kissé szigorúbbak lettek, inkább a C szerkezeteihez hasonlítanak. Nem használhatunk például postfix alakot az elágazásra, valamint nincs unless sem.
A programblokkat '{ }' jelek közé írjuk:

{<utasítások>}

Használhatunk '{' és '}' helyett ':'-ot, de ekkor kell egy end<tipus> kulcsszó a blokk végére:

if (<feltétel>): <utasítások> else: <utasítások> endif;

1. Elágazás

A hagyományos egyágú elágazás általános alakja:

if (<feltétel>) {<utasítások>} [else if (<feltétel>) {<utasítások>}] [else <utasítások>}]

A Perl nyelvben gyakorlattal rendelkezők figyeljenek rá, hogy a kulcsszót itt elseif-nek hívják!
Használhatjuk a C-ből ismert '? :' operátor párt is:

(feltétel) ? érték_ha_a_feltétel_igaz : érték_ha_a_feltétel_hamis

Többágú switch elágazás (C-ből átvett):

switch (<érték>) { case <érték>: <utasítások> break; . . . default: <utasítások> }

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 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.

2. Ciklus

Ciklusszervezésre több lehetőségünk van: itt is megvan az elől tesztelős (while), a hátul tesztelős (do..while) és a különleges előltesztelős, a mindenki által jól ismert for léptetős ciklus:

$i = 0; while ($i < 10) { valami($i); $i++; } $i = 0; do { valami($i); $i++; } while ( $i < 10 ); for ($i =0; $i < 10; $i++) { valami($i); }

A do..while ciklus feltételét tartalmazó zárójel után mindig ki kell tenni a pontosvesszőt. 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 for ciklusokban. A for ciklus fejéből bármelyik kifejezés elhagyható, de figyelnünk kell arra, hogy a pontosvesszőket mindig kiírjuk.

Iterált szerkezeteket a foreach ciklussal is bejárhatunk

foreach ($tomb as $kulcs => $ertek) { echo "Kulcs: $kulcs, Érték: $ertek\n"; } // Bejárja a $tomb elemeit, amiket kulcs-érték párokban ad vissza

Természetesen a számokkal indexelt tömbnek egyszerűbb a bejárása:

foreach ($tomb as $ertek) { echo "$ertek\n"; } // Bejárja a $tomb elemeit

Ez a bejárási mód érzéketlen a kihagyott indexekre. A ciklusok természetesen tetszőlegesen egymásba ágyazhatók.

3. Vezérlésátadó utasítások

A PHP vezérlésátadó utasításai:

Utasítás Leírás
break Ciklus terminálása
break n Kilépés ciklus maximum n-edik mélységéből
continue Ciklus léptetése
continue n Ciklus léptetése
declare Direktívák megadása

A legbelső ciklust bármikor elhagyhatjuk a break utasítással.
Ha kiadjuk a continue utasítást, a vezérlés a következő iteráció elejére ugrik. A continue-nak megadhatunk egy egész számot paraméterként, amely megadja, hogy hány egymásba ágyazott struktúrának a hátralévő részét kell átugrania. Fontos felismernünk, hogy egy ciklusba ágyazott switch közepére rakott break csak a switchből lép ki.
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.
Példa continue használatára:

<?php $szamlalo = -4; for ( ; $szamlalo <= 10; $szamlalo++ ) { if ( $szamlalo == 0 ) { continue; } $seged = 4000/$szamlalo; print "4000 $szamlalo részre osztva $seged."; } ?>

A declare szerkezettel végrehajtási direktívákat adhatunk meg a blokkban lévő utasításokhoz.

Szintaxis:

declare (directive) { statement }

A blokkban a statment rész fog végrehajtódni a directive-ben meghatározott módon.
Jelenleg egyetlen direktívát ismer a PHP ez pedig a ’tricks’ futtatási direktíva. A direktíva egy pozitív egész értékét kaphatja. Ennek hatása, hogy a statment blokkban lévő alacsony szintű utasításonként az előre beállított függvények automatikusan meghívódnak:

function a() { <utasítások> } function b() { <utasítások> } register_trick_function(’a’); register_trick_function(’b’); declare(trick=2) { while(true) { sleep(1); } }

E script futása során minden második másodpercben meghívódik az a() és a b() metódus.
A szerkezet alkalmas bizonyos alacsony szintű I/O műveletre, alapvető multitasking-ra, és nyomkövetésre.