Strukturat
Sikurse gjuhët tjera programore, edhe PHP posedon struktura me anë të të cilave ndërtohet logjika e një aplikacioni. Këtu bëjnë pjesë:
- Strukturat e degëzimit
- Struktura e iteracionit
Strukturat e degëzimit
Rrjedha normale e ekzekutimit të rreshtave programor është rrjedhë lineare: pas ekzekutimi të rreshtit të parë, interpreteri kalon në të dytin, në të tretin, e kështu me rradhë deri në fund të programit.
Ekzekutimi sekuencional i rreshtave programorë është i përshtatshëm në rastet kur duhet të ekzekutohet një seri e urdhërave të përsëritshme, psh:
- Konketohu me server
- Lexoji të dhënat nga një tabelë
- Paraqiti të dhënat e lexuara në formë tabelare
Një mënyrë e këtillë e organizimit të kodit presupozon se ekzekutimi nuk do të ndërpritet në asnjërin prej rreshtave, gjë që nuk është konform kushteve reale.
Për shembull, nëse programi nuk konektohet me server, çfarë kuptimi do të kishte leximi i të dhënave nga njët tabelë? Apo, si do të paraqiteshin të dhënat në formë tabelare nëse paraprakisht programi ka dështuar në leximin e të dhënave nga tabela?
Duke u bazuar në këtë shembull të thjeshtë, nxjerrim konkluzionin dhe programi ynë duhet të ketë njëfarë “intelegjence”, e cila do të dijë ç’të bëjë në të dy situatat: edhe kur paraqitet gabimi, edhe kur nuk paraqitet.
Tash, e modifikojmë pak logjikën e algoritmit:
- Tento të konektohesh në server
- Nëse dështon, ndërpreje ekzekuzimin, duke raportuar se nuk u realizua koneksioni.
- Nëse ke sukses, vazhdo më tutje në rreshtin vijues
- Tento të lexosh të dhënat nga një tabelë
- Nëse dështon, ndërpreje ekzekutimin, duke raportuar se nuk u lexuan të dhënat nga tabela
- Nëse ke sukses, kontrollo sa rezultate kanë arritur
- Nëse rezultate ka 0, pra nuk ka rezultate, ndërpreje ekzekuzimin dhe raporto se tabela nuk ka të dhëna
- Nëse ka rezultate, atëherë paraqiti në formë tabelare.
Këtu tash shohim se programi e ndërpren ekzekutimin në 3 raste:
- Dështoi koneksioni në server
- Dështoi leximi nga tabela
- Tabela nuk ktheu rezultate
Në shembullin e mësipër, analiza “nëse-kjo-atëherë-ajo” mundëson degëzimin e programit, ku njëra degë e ndal ekzekutimin, ndërsa tjetra e vazhdon.
Degëzimi nuk bëhet vetëm kur duhet të ndalet ekzekutimi i programit, por më shpesh përdoret për degëzimin e logjikës së tij. Një veprim mund të nevojitet nëse është plotësuar kushti, ndërsa veprim tjetër nëse nuk është plotësuar. Pra, me një kusht “nëse” do të kemi dy rrjedha paralele të programit. Se cila rrjedhë do të zgjedhet, varet nga kushti i parashtruar.
if…else
Kushti mund të kthejë vetëm një nga dy përgjigjet e mundshme: TRUE ose FALSE. TRUE nëse kushti është plotësuar, FALSE nëse ai kusht nuk është plotësuar.
1 <?php
2 $emri = $_POST['emri'];
3
4 if ($emri == "")
5 {
6 echo "<p>Nuk e keni shenuar emrin</p>";
7 }
8
9 echo "<p>Ju faleminderit!</p>";
10 ?>
Në shembullin e mësipërm, fillimisht lexohet vlera e $_POST['emri'] dhe vendoset në variablin $emri.
Pastaj me if jepet kushti: $emri == "", me çka verifikohet a është ai variabël i zbrazët. Dy thonjëza të njëpasnjëshme simbolizojnë tekstin e zbrazët.
Nëse kushti plotësohet, pra nëse $emri nuk e përmban asnjë shkronjë, atëherë paraqitet raporti: “Nuk e keni shënuar emrin”. Në të kundërtën, pra, nëse kushti nuk është plotësuar, ekzekutimi vazhdon më tej nëpër rreshtat vijues programorë.
Si në rastin kur plotësohet kushti, ashtu edhe atëherë kur nuk plotësohet, programi i mësipërm do ta vazhdojë ekzekutimin te rreshti vijues: echo "<p>Ju faleminderit!</p>".
1 |
2 |
3 |\
4 | |
5 |/
6 |
7 |
Shpesh kemi nevojë që të caktojmë veprime të ndryshme për TRUE dhe FALSE. Për këtë përdorim else:
1 <?php
2 $emri = $_POST['emri'];
3
4 if ($emri == "")
5 {
6 echo "<p>Nuk e keni shenuar emrin</p>";
7 }
8 else
9 {
10 echo "<p>Ju faleminderit!</p>";
11 }
12 ?>
Këtu, nëse kushti plotësohet, jepet raporti “Nuk e keni plotësuar emrin”, e në të kundërtën - shfaqet teksti “Ju faleminderit!”. Pra, për dallim nga shembulli paraprak, kur në të dy situatat na shfaqej falënderimi, tash na shfaqet vetëm kur e kemi plotësuar emrin.
1 |
2 |
3 /\
4 / \
5 | |
6 \ /
7 \/
8 |
Analizat që i bëjmë me if...else, mund të jenë edhe më komplekse se kaq, varësisht prej logjikës që duam të implementojmë në program.
Për shembull, mund të dëshirojmë që t’i analizojmë dy kushte njëkohësisht.
1 <?php
2 $emri = $_POST['emri'];
3 $mosha = (int) $_POST['mosha'];
4
5 if ($emri == "" && $mosha == 0)
6 {
7 echo "<p>Nuk e keni shenuar emrin ose moshën, ose asnjërën!</p>";
8 }
9 else
10 {
11 echo "<p>Ju faleminderit!</p>";
12 }
13 ?>
Këtu analizuam dy kushte përnjëherë, emri dhe moshën. Cilado të jetë e paplotësuar, programi do të raportojë mbi gabimin.
Operatori logjik && që i lidh këto dy kushte, do të japë rezultat TRUE, vetëm nëse janë plotësuar të dy kushtet.
TRUE && TRUE = TRUE TRUE && FALSE = FALSE FALSE && TRUE = FALSE FALSE && FALSE = FALSE
Ndonjëherë mund të duhet që të plotësohet vetëm njëri prej dy kushteve, për të rezultuar krejt shprehja si e saktë. Psh.
1 if ($x == 2 || $y ==1)
Cilado të jetë e saktë, do të bëjë që krejt shprehja të rezultojë e sakte.
TRUE || TRUE = TRUE TRUE || FALSE = TRUE FALSE || TRUE = TRUE FALSE || FALSE = FALSE
Për krahasimin e dy vlerave përdoret barazimi i dyfishtë == dhe jo =. Shenja = është operator i caktimit të vlerës (asignment), si në rastin:
1 $cmimi = 12.50;
ku vlera 12.50 i bartet variablit $cmimi, pra nuk bëhet krahasimi se a është çmimi baras me 12.50. Për krahasime përdoren operatorët vijues:
1 ==
2 ===
3 <
4 <=
5 >=
6 !=
7 !==
Nëse analiza jonë është më komplekse, pra nuk na mjafton vetëm krahasimi se a është një shprehje e saktë apo e pasaktë, mund të konstruktojmë degëzime më të detajuara.
1 <?php
2
3 if ($x < 2)
4 {
5 //
6 }
7 elseif ($x > 5 )
8 {
9 //
10 }
11 else
12 {
13 //
14 }
15 ?>
Kushti i parë plotësohet nëse $x është më i vogël se 2, ndërsa kushti i dytë - nëse është më i madh se 5. Kushti i tretë plotësohet për të gjitha vlerat e $x prej 2 deri 5. Vlera e $x është vetëm një vlerë, ndërsa dëgëzime janë tre, varësisht prej kushteve të cakura.
Një blloku të if…else mund të fusim if…else tjera, të cilat bëjnë krahasime të tjera, më komplekse.
1 <?php
2
3 if ($x < 2)
4 {
5 if ($y > 3)
6 {
7 if ($z == 5)
8 {
9 //
10 }
11 }
12 }
13 else
14 {
15 //
16 }
17 ?>
switch
Struktura switch rëndomë gjen zbatim kur analizojmë vlera nga një listë e paracaktuar e vlerave. Psh, nëse analizojmë numrin e muajit, ai mund të jetë nga 1 deri 12, numri rendor i ditës së javës mund të jetë nga 1 deri 7, etj.
1 <?php
2
3 $dita = 5;
4
5 switch ($dita)
6 case 1:
7 echo "E hene ";
8 break;
9 case 2:
10 echo "E marte ";
11 break;
12 case 3:
13 echo "E merkure ";
14 break;
15 case 4:
16 echo "E enjte ";
17 break;
18 case 5:
19 echo "E premte ";
20 break;
21 default:
22 echo "Fundjave ";
23 }
24 ?>
Urdhëri break përdoret për ndarjen më vete të secilit rast (case). Nëse psh. pas case 1 do të largohet break, atëherë kur $dita=1, do të paraqitej raporti “E hene E marte”, pra sikur të ishin plotësuar edhe case 1, edhe case 2.
Sado komplekse të jetë një strukturë e degëzuar, ato gjithmonë shpiejnë teposhtë rrjedhës së ekzekutimit të programit. Pra, pas plotësimit (apo mosplotësimit) të një kushti, rreshtat pasardhës vijnë në radhë për ekzekutim.
Strukturat e iteracionit
Për zgjidhjen e ndonjë problemi, na nevojitet që programi ta përsërisë një bllok të rreshtave programorë. Këtë e quajmë iteracion. Iteracioni pra do të zbatohet sa herë kemi nevojë që një bllok rreshtash të përsëritet disa herë.
for
Struktura ciklike for përdoret kur na nevojitet përsëritja e një blloku për një numër fiks të herave.
Përsëritja e një blloku 10 herë:
1 <?php
2 for ($i=1; $i<=10; $i++)
3 {
4 echo "<p>".$i;
5 }
6 ?>
Ajo çka përsëritet 10 herë është rreshti echo brenda bllokut të shënuar me {}.
- $i=1 përcakton vlerën fillestare.
- $i<=10 përcakton deri në cilën vlerë do të shkojë iteratori, në këtë rast deri në 10
- $i++ e rrit vlerën e $i për 1 në secilin iteracion. Nëse kemi nevojë të përdorim ndonjë vlerë tjetër, psh. që numri të rritet për 3, atëherë shënojmë: $i = $i +3, me ç’rast numërimi do të shkonte: 1, 4, 7, 10, pra do të përsëritej 4 herë, e jo 10.
- Nëse nisemi nga një vlerë më e madhe dhe duam të “lëshohemi” në një vlerë më të vogël, atëherë përdorim $i–, ose për inkremente të tjera $i = $i - 3
Brenda një blloku mund të vendosim aq rreshta sa ka nevojë. Brenda një blloku mund të vendosim edhe struktura të tjera.
Le ta gjenerojmë tabelën e shumëzimit:
1 <?php
2 echo "<table border='1'>";
3 for ($x=1; $x<=10; $x++)
4 {
5 for ($y=1; $y<=10; $y++)
6 {
7 $z = $x * $y;
8 echo "<tr><td>".$x."</td><td>*</td><td>".$y."</td><td>=</td><td>".$z."</td><\
9 /tr>";
10 }
11 }
12 echo "</table>";
13 ?>
while
Struktura while bën përsëritjen e një blloku derisa vlen një kusht. Në momentin që kushti nuk plotësohet (kthen vlerën FALSE), cikli ndërpritet.
1 <?php
2 $x = 1;
3 while ($x < 10)
4 {
5 echo "<p>".$x;
6 $x++;
7 }
8 ?>
Kushti këtu është që $x të jetë më i vogël se 10. Për aq kohë sa vlen ky kusht, cikli do të përsëritet. Kur $x e arrin vlerën 10, blloku më nuk do të ekzekutohet.