Začínáme s PHP - cykly (17. díl)

Napsal O webu (») 12. 4. 2005 v kategorii PHP/HTML, přečteno: 3848×

Dnes si vezmeme na paškál cykly.

Dnes se podíváme na cykly. Cykly umožňují opakování určité části programu. Dohromady máme tři druhy cyklů: while, do-while a for.

While

Začneme u toho nejjednoduššího cyklu - while. While má velmi jednoduchou syntaxi a provádí se tak dlouho dokud platí podmínka. Zápis příkazů můžeme uskutečnit pomocí již známého bloku nebo jen tak (pouze ale v případě jednoho příkazu!) nebo prostřednictvím alternativního zápisu (dvojtečky a ukončujícího příkazu endwhile). // způsob zápisu jednoho příkazu
while (podminka)
prikaz;

// způsob zápisu více příkazů v cyklu prostřednictvím složených závorek (bloku)
while (podminka)
{
prikaz1;
prikaz2;
}

// způsob zápisu více příkazů v cyklu prostřednictvím alternativního zápisu
while (podminka):
prikaz1;
prikaz2;
endwhile;
Tyto tři způsoby zápisu jsou shodné u většiny cyklů, podmínek apod. Já používám první dva způsoby zápisu, především kvůli přehlednosti (PSPad mi zvýrazňuje počáteční i koncovou závorku, takže v tom mám pořádek; u prvního způsobu nepotřebuji závorky - zase o něco kratší zápis kódu). Příklad je docela pěkný uveden již ve 13. díle tohoto seriálu, takže se podívejte na něj. Další není potřeba.

Do-while

Za zmínku také rozhodně stojí cyklus do-while. Narozdíl od cyklu while, který se provede pouze v případě, že platí podmínka, se provede vždy alespoň jednou. Teprve potom se prověřuje, zda platí podmínka. To je v mnohých případech užitečné. do {
prikaz1;
prikaz2;
} while (podminka);

// příklad
do {
$nahodne_cislo = mt_rand(5, 30);
} while (!($nahodne cislo % 7));
V příkladu generujeme náhodné číslo pomocí funkce mt_rand() s parametry 5 a 30 (zde určují interval pro generovaná čísla) - náhodné generování čísel si rozebereme v některém jiném díle tohoto seriálu. Funkce nám sice generuje čísla, ale my nechceme, aby byla dělitelná sedmi (tj. čísla 7,14,21 a 28). Proto nejprve provedeme generování čísla a teprve poté ověřujeme, zda není dělitelné sedmi. Není-li, je vše v pořádku a cyklus se ukončí.

For

Cyklus for v podstatě dělá to samé, co ostatní cykly, ale dává nám možnost si potřebné proměnné apod. vytvořit uceleně, pod kontrolou: for(výraz1; výraz2; výraz3)
příkaz;
// výraz1: inicializace čítací proměnné, např. $i = 0;
// výraz2: vlastní podmínka cyklu, např. $i < 10;
// výraz3: změna hodnoty čítací proměnné, např. $i++

// příklad
for ($i = 1; $i < 7; $i++)
echo "Tohle je nadpis $i. úrovně ";
U tohoto cyklu můžete navíc některý výraz z hlavičky odstranit, dokonce můžete vypustit všechny (viz. nekonečný cyklus), nebo naopak můžete zadat příkazů více a oddělit je čárkou, např. for ($i = 0, $j = 100; $i hodnota) příkaz; Nezáleží přitom na tom, jak si pojmenujeme proměnné pro uložení hodnoty, resp. indexu. Využití tohoto cyklu je veliké, uvedeme si jeden příklad, kdy procházíme superglobální proměnnou $_GET (o superglobálních proměnných si povíme později), která je zároveň polem a uchovává veškeré informace o hodnotách předávaných v adresním řádku: echo "$_GET:
";
foreach($_GET as $index => $hodnota)
{
echo "$index => $hodnota
"; // postupně si vytiskneme veškeré indexy pole i s jejich hodnotami
}

Prázdný výraz

V PHP existuje i tzv. prázdný výraz. Jeho použití je mnohdy užitečné, např. tam, kde je očekáván nějaký příkaz, ale Vy tam, ať už z jakéhokoliv důvodu, žádný dát nechcete. Tak použijete právě tento výraz. Navíc je vždy vyhodnocován jako pravda, tudíž se jeho spektrum využití ještě více rozšiřuje. Pár příkladů využití:

; // nejobyčejnější - především v tělech cyklů, podmínek apod., kde nechcete použít blok, popř. alternativní zápis
if () // v podstatě také prázdný výraz; je vyhodnocen jako true, podmínka se provede
// v tomto případě je koncový výsledek shodný např. s těmito výrazy:
if (1)
// nebo
if (true) // apod.

// to samé platí u cyklů - např. for
for($i = 0; ; $i++)

// v tomto případě doporučuji použít někde v těle cyklu příkaz break;, který cyklus ukončí, např. pokud tam platí nějaká podmínka

Nekonečný cyklus

Nekonečný cyklus je věc, na kterou byste si měli dávat pozor, přestože není zase tak nebezpečný, jak se o něm říká, protože pokud se Vám ho podaří nějakou náhodou vytvořit, většinou tím webový server příliš neohrozíte. A to především z důvodu, že PHP má implicitně nastavenou maximální dobu provádění skriptu na 30 sekund. Přestože to je relativně krátká doba, dokáže takový cyklus vypisující dva znaky 'vyrobit' přes 10 MB dat! 

A kód: for (;;)
echo "x ";

Závěr

Cykly máme úspěšně za sebou, přesto se jim příště budeme ještě trochu věnovat. Prozradím, že se to bude týkat příkazů break a continue.


Autor: mzima

Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel jedenáct a dvě