PHP Ciklai
Parašė N3PST3R 2006 spalio 26 21:10:26
Ciklai
Jei ne ciklai, programavimas būtų gana nuobodus užsiėmimas. Ciklas, tai priemonė, kurios pagalba galima vykdyti kodą nurodytą skaičių kartų arba tol, kol nebus įvykdyta kokia nors sąlyga. PHP kalboje yra du ciklų tipai: while ir for. Ciklai while tikrina sąlygas prieš arba po kiekvieno ciklo pakartojimo ir kartoja ciklą tik tuo atveju, jei sąlyga vis dar netenkinama. Cikle for, prieš pirmą ciklo pakartojimą, nurodomas ciklo kartojimų skaičius, kuris negali būti keičiamas ciklo vykdymo metu.
Ciklai while
Šio ciklo sintaksė panaši į operatoriaus if sintaksę.
while(sąlyga) {
...kodas...
}
Ciklo while sąlyga yra loginio tipo. Jeigu ji įgija reikšmę false, tai kodas parašytas rietiniuose skliaustuose praleidžiamas. Jei true - kodas riestiniuose skliaustuose vykdomas. Pasiekus ciklo uždarymo skliaustą }, reikšmė vėl tikrinama ir, jei ji teisinga ciklas kartojamas. Tokiu būdu ciklas yra kartojamas tol, kol [vykdoma sąlyga. Atkreipkite dėmsį į tai, jog sąlyga yra tikrinama kiekvieno ciklo pakartojimo pradžioje, todėl jei sąlyga bus pateinkinta jau kodo viduryje, tai kodas bus vis tiek vykdomas iki galo. Norint nutraukti ciklo darbą prieš laiką naudokite operatorių break.
$i=11;
while(--$i) {
if(mano_funkcija($i) == "error") {
break; //sustabdyti ciklą
}
++$kinamasis;
}
Jeigu numanoma mano_funkcija() funkcija, duotame pavyzdyje, neduos jokios klaidos, tai ciklas bus kartojamas dešimt kartų, tol, kol $i reikšmė bus lygi nuliui (priminimas: nulis grąžina reikšmę "false"). Jei funkcija mano_funkcija() grąžina klaidą, įvykdomas operatorius break ir ciklas sustabdomas. Tačiau kartais tereikia prašokti vieną ciklo kartojimą ir prieiti prie kito, nestabdant paties ciklo. Tam naudojamas operatorius continue.
$i=11;
while(--$i) {
if(mano_funkcija($i) == "error") {
continue; //pereiti prie kito ciklo kartojimo, nepadidinant $kintamasis reikšmės.
}
++$kinamasis;
}
Šis kodas taip pat yra vykdomas dešimt kartų, jei mano_funkcija() negrąžina klaidos. Tačiau priešingu atveju ciklas nėra stabdomas, o yra pereinama prie kito pakartojimo, nepakeičiant $kintamasis reikšmės.Jei po to $i reikšmė vis dar nelygi nuliui, ciklas kartojamas kaip įprasta.
Ciklai do...while
Ciklas do...while analogiškas while, tačiau sąlyga čia tikrinama ne pradžioje, bet pabaigoje kiekvieno pakartojimo. Tai reiškia, kad ciklas bus kartojamas bent vieną kartą:
echo("<SELECT name='dalys'>\n");
$i=0;
do {
echo ("\t<OPTION value=$i>$i</OPTION>\n");
} while (++$i < $kiekis);
echo("</SELECT>\n");
Vykdant šį kodą nulis bus išvedamas visada, kaip vienas iš pasirinkimų. Kitų pasirinkimų skaičius priklausys nuo $kiekis reikšmės.
Ciklai while ir do...while dažnai naudojami kartu su inkrementacijos(padidinimo vienetu) ir dekrementacijos(sumažinimo vienetu) operatoriais, siekiant nurodyti ciklo kartojimų skaičių. Operatoriai while taip pat dažnai naudojami skaitant duomenis iš duomenų bazės, eilutes iš failų, elementus iš masyvų(bet apie tai vėliau).
Ciklai for
Ciklo for sintaksė yra šiek tiek sudėtingesnė nei while, tačiau kartais naudoti for daug naudingiau.
for($i=1; $i<11; ++$i) {
echo("$i <br> \n"); // išvedami skaičiai nuo 1 iki 10
}
Ciklo for skliausteliuose nurodomi trys išsireiškimai, atskiriami kabliataškiais. Pirmuoju iš jų priskiriama reikšmė ciklo kintamajam. Šis išsireiškimas vykdomas tik prieš pirmą ciklo pakartojimą. Kitas išsireiškimas yra loginio tipo, ir yra tikrinamas kiekvieno ciklo pakartojimo pradžioje. Jei šio išsireiškimo reikšmė yra true, ciklas yra kartojamas, jei false, ciklo vykdymas sustabdomas. Trečiasis išsireiškimas vykdomas kiekvieno ciklo pakartojimo gale ir dažniausiai naudojamas ciklo kintamojo padidinimui arba sumažinimui.
Vidurinis išsireiškimas dažniausiai palygina ciklo kintamajį su kokia nors anksčiau nustatyta reikšme, tačiau taip yr nevisada. Pavyzdyje pateiktas kiek kitokio panaudojimo pavyzdys.
for($i=1; mano_funkcija($i) != "klaida"; ++$i) {
// vykdomas kodas, kol mano_funkcija() negrąžina klaidos
}
Tą patį galima padaryti ir su ciklu while.
$i=1;
while (mano_funkcija($i) != "klaida") {
// vykdomas kodas, kol mano_funkcija() negrąžina klaidos
++$i;
}
Nėra tokios užduoties, kurią būtų galima atlikti su ciklu for, bet negalima atlikti su while. Tačiau dažniausiai ciklas for atrodo daug kompaktiškesnis ir labiau organizuotas.
Kaip ir kitose į C panašiose kalbose, PHP yra leidžiama (nors sutinkama retai) palikti vieną ar daugiau iš trijų minėtų išsireiškimų tuščiais.
for( ; ; ) {
if(mano_funkcija() == "stop") break;
}
Jeigu loginis išsireiškimas yra tuščias, tai pagal nutylėjimą jis grąžina true. Tai gali sąlygoti ir begalinio ciklo atsiradimą, jei nenaudosime break, return arba exit. Be abejo, pagrindas tam, kad nenaudoti kurio nors iš išsireiškimų cikle for, atsiranda retai.