Jak sobie pościelisz, to już będzie ranek.
PHP - instrukcje sterujące
if  |   switch  |   while  |   do..while  |   for  |   foreach  |   break  |   continue  |   return  |   require()  |   include()

if

Składnia:

    <?php

    
if (warunek1)
    {    
instrukcja1;
    }
    elseif (
warunek2)
    {    
instrukcja2;
    }
    else
    {    
instrukcja3;
    }
    
    
?>

Często potrzeba wykonać jedną instrukcję programu, gdy pewien warunek jest spełniony, lub inną inną, gdy ten sam warunek nie jest spełniony. Służy do tego instrukcja if ... elseif ... else.

Jeżeli warunek1 jest równy TRUE, to instrukcja1 zostanie wykonana; w przeciwnym razie jeżeli warunek2 jest równy TRUE, to zostanie wykonana instrukcja2; w przeciwnym razie zostanie wykonana instrukcja3.

Można użyć kilku instrukcji elseif w jednym bloku instrukcji if. Wykonany będzie ten blok, który pierwszy będzie miał wartość TRUE.

 

switch

Instrukcja switch jest podobna do serii instrukcji IF z warunkiem na to samo wyrażenie. W wielu przypadkach istnieje potrzeba porównania jednej zmiennej (lub wyrażenia) z wieloma różnymi wartościami i wykonania różnych fragmentów kodu, w zależności od wyniku porównania tej zmiennej z różnymi wartościami. Do tego właśnie służy instrukcja switch.

Poniżej znajdują się dwa przykłady wykonujące dokładnie to samo, przy czym jeden z nich wykorzystuje serię instrukcji if, zaś drugi używa instrukcji switch:

    <?php

    
if ($i == 0) {
    {    echo 
"i jest równe 0";
    }
    elseif (
$i == 1)
    {    echo 
"i jest równe 1";
    }
    elseif (
$i == 2)
    {    echo 
"i jest równe 2";
    }

    switch (
$i)
    {   case 
0:
            echo 
"i jest równe 0";
            break;
        case 
1:
            echo 
"i jest równe 1";
            break;
        case 
2:
            echo 
"i jest równe 2";
            break;
    }
    
    
?>

Ważne jest by zrozumieć, jak działa instrukcja switch, żeby uniknąć błędów. Instrukcja switch jest wykonywana linia po linii (dokładnie wyrażenie po wyrażeniu). Na początku żaden fragment kodu nie jest wykonywany. Dopiero kiedy zostaje odnalezione wyrażenie case, którego wartość odpowiada wyrażeniu przy instrukcji switch, PHP rozpoczyna wykonywanie kodu od miejsca, gdzie znajduje się ta instrukcja case. PHP wykonuje instrukcje aż do momentu kiedy blok switch się skończy, lub do momentu znalezienia instrukcji break. Jeżeli nie napiszesz instrukcji break na końcu instrukcji w danym wyrażeniu case to PHP będzie wykonywać dalej instrukcje z następnego wyrażenia case. Na przykład:

    <?php

    
switch ($i)
    {   case 
0:
            echo 
"i jest równe 0";
        case 
1:
            echo 
"i jest równe 1";
        case 
2:
            echo 
"i jest równe 2";
    }
    
    
?>

W tym przypadku, jeśli $i jest równe 0, to PHP wykona wszystkie trzy instrukcje echo. Jeżeli natomiast będzie równe jeden - wtedy tylko dwie ostatnie. Zachowanie zgodne z oczekiwaniami będzie wtedy, kiedy $i będzie równe 2 - wtedy wykonane będzie tylko ostatnia instrukcja echo. Trzeba zatem pamiętać o umieszczaniu na końcu instrukcji break, chyba że planuje się wykorzystać jakieś specjalne możliwości instrukcji switch, o czym dalej.

W instrukcji switch wartość wyrażenia jest obliczana tylko raz, a następnie jest porównywana z każdym z wyrażeń przy etykiecie case. Natomiast w instrukcji elseif wartość wyrażenia jest obliczana ponownie. Dlatego, jeśli twoje wyrażenie jest bardziej skomplikowane od zwykłego porównania, lub znajduje się w zwartej pętli (tight loop), switch może być szybszy.

Po etykiecie case mogą nie występować żadne instrukcje, co oznacza po prostu, że sterowanie zostaje przekazane do następnej etykiety case.

    <?php

    
switch ($i)
    {   case 
0:
        case 
1:
        case 
2:
            echo 
"i jest mniejsze od 3, ale nie jest ujemne";
            break;
        case 
3:
            echo 
"i jest równe 3";
    }
    
    
?>

Specjalną etykietą jest etykieta warunku domyślnego - default. Etykieta ta dotyczy sytuacji, w której wyrażenie nie pasowało do wartości przy innych etykietach typu case. W instrukcji switch ta etykieta powinna być ostatnia z listy. Na przykład:

    <?php

    
switch ($i)
    {   case 
0:
            echo 
"i jest równe 0";
            break;
        case 
1:
            echo 
"i jest równe 1";
            break;
        case 
2:
            echo 
"i jest równe 2";
            break;
        default:
            echo 
"i jest różne od 0, 1 i 2";
    }
    
    
?>

Etykieta case może zawierać dowolną wartość typu prostego, czyli liczbę całkowitą, zmiennoprzecinkową lub łańcuch znaków..

 

while

Pętla while jest najprostrzym typem pętli w PHP. Zachowuje się ona identycznie jak jej odpowiednik z języka C. Jej podstawowa forma wygląda następująco:

    while (wyrażenie) instrukcja

Znaczenie instrukcji while jest bardzo proste. Nakazuje ona PHP tak długo wykonywać określone instrukcje, jak długo wyrażenie po słowie while ma wartość TRUE. Wartość tego wyrażenia jest sprawdzana za każdym razem na początku wykonywania nowej iteracji pętli, więc jeśli jego wartość zmieni się w trakcie wykonywania instrukcji, wykonanie całej pętli nie skończy się do momentu zakończenia całej iteracji. Jedna iteracja jest to jednokrotne wykonanie wszystkich instrukcji w pętli. Jeżeli wyrażenie logiczne ma wartość FALSE już na samym początku, instrukcje wewnątrz pętli nie będą w ogóle wykonane.

Podobnie jak w instrukcji if, w pętli while można grupować instrukcje za pomocą nawiasów klamrowych.

Poniższy przykład wyświetla liczby od 1 do 10:

    <?php

    $i 
1;
    while (
$i <= 10)
    {    echo 
$i++;  /* zmienna $i będzie inkrementowana po wyświetleniu
                         (post-inkrementacja) */
    
}

    
?>

 

do..while

Pętla do..while zachowuje się bardzo podobnie do pętli while, z wyjątkiem tego, że wartość wyrażenia logicznego sprawdzana jest na końcu iteracji, a nie na początku. Wynikającą z tego główną różnicą jest to, że pierwsza iteracja w pętli do..while na pewno zostanie wykonana (gdyż wyrażenie logiczne będzie sprawdzone dopiero na koniec iteracji). Natomiast w pętli while, gdzie wyrażenie logiczne jest sprawdzane na początku iteracji, może dojść do sytuacji, że pętla w ogóle nie zostanie wykonana, jeśli to wyrażenie będzie miało wartość FALSE od początku, np:

    <?php

    $i 
0;
    do {
       echo 
$i;
    } while (
$i&gt;0);
    
    
?>

Powyższa pętla zostanie wykonana tylko raz, gdyż po pierwszej iteracji, wartość wyrażenia logicznego wynosić będzie FALSE ($i nie jest większe od 0) i pętla zostanie zakończona.

 

for

Pętla for jest najbardziej skomplikowanym rodzajem pętli w PHP. Zachowuje się identycznie jak jej odpowiedniki z C++. Jej składnia wygląda następująco:

    <?php
    
    
for (wyrażenie1wyrażenie2wyrażenie3instrukcje
    
    ?>

wyrażenie1 jest wykonywane tylko raz, na początku pętli.

Na początku każdej nowej iteracji, obliczana jest wartość logiczna wyrażenia wyrażenie2. Jeżeli wynikiem obliczenia jest TRUE, to pętla kontynuuje i następuje wykonanie instrukcji umieszczonych w pętli. Jeżeli jednak wyrażenie ma wartość FALSE, to wykonanie pętli zostaje przerwane.

Na końcu każdej iteracji zostaje wykonane wyrażenie3.

Każde z wyrażeń może być puste. Puste wyrażenie2 oznacza, że pętla jest nieskończona (PHP interpretuje to jako wartość TRUE. Nie jest to jednak tak bezużyteczne, jak to się może wydawać, gdyż często stosuje się to w połączeniu z instrukcją break, co zastępuje wyrażenie2 w pętli for.

Wszystkie poniższe przykłady wyświetlają liczby od 1 do 10. Zauważ rozmaite odmiany składni:

    <?php

    
/* przykład 1 */
    
for ($i 1$i <= 10$i++)
    {   echo 
$i;
    }

    
/* przykład 2 */
    
for ($i 1;;$i++)
    {   if (
$i 10)    break;
        echo 
$i;
    }

    
/* przykład 3 */
    
$i 1;
    for (;;)
    {   if (
$i 10)    break;
        echo 
$i;
        
$i++;
    }

    
/* przykład 4 */
    
for ($i 1$i <= 10; echo $i$i++);
    
    
?>

Najbardziej czytalna składnia jest w przykładzie pierwszym albo czwartym, ale w wielu sytuacjach puste wyrażenia w pętli for bardzo się przydają.

 

foreach

Pętla foreach umożliwia łatwą iterację wewnątrz tablic. foreach działa tylko na tablicach i każda próba użycia tej pętli na innym typie lub na niezainicjowanej zmiennej będzie skwitowana komunikatem o błędzie. Istnieją dwie składnie tej konstrukcji:

    <?php

    
foreach(wyrażenie_tablicowe as $wartośćwyrażenie
    
foreach(wyrażenie_tablicowe as $klucz => $wartośćwyrażenie

    ?>

Pierwsza odmiana iteruje wewnątrz tablicy podanej w wyrażenie_tablicowe. Przy każdej iteracji, wartość aktualnego elementu tablicy jest przypisywana do zmiennej $wartość, a wewnętrzny wskaźnik tablicy jest przesuwany o jeden (więc w następnej iteracji przypisany zostanie kolejny element tablicy).

Druga odmiana działa tak samo jak pierwsza, przy czym klucz aktualnego elementu tablicy zostanie przypisany do zmiennej $klucz w każdej iteracji.

Kilka przykładów demonstrujących użycie pętli foreach:

    <?php

    
/* przykład 1 foreach: tylko wartość */
    
$a = array (12317);

    foreach (
$a as $v)
    {   echo 
"Aktualna wartość \$a: $v.<br />";
    }

    
/* przykład 2 foreach: wartość (z kluczem generowanym dla potrzeb ilustracji) */
    
$a = array (12317);

    
$i 0;     /* tylko dla potrzeb ilustracyjnych */

    
foreach($a as $v)
    {    echo 
"\$a[$i] => $v.<br />";
        
$i++;
    }

    
/* przykład 3 foreach: klucz i wartość */
    
$a = array (
        
"jeden" => 1,
        
"dwa" => 2,
        
"trzy" => 3,
        
"siedemnaście" => 17
    
);

    foreach(
$a as $k => $v
    {    echo 
"\$a[$k] => $v.<br />";
    }

    
/* przykład 4 foreach: tablice wielowymiarowe */
    
$a[0][0] = "a";
    
$a[0][1] = "b";
    
$a[1][0] = "y";
    
$a[1][1] = "z";

    foreach(
$a as $v1)
    {   foreach (
$v1 as $v2)
        {    echo 
"$v2<br />";
        }
    }

    
/* przykład 5 foreach: tablice dynamiczne */
    
foreach(array(12345) as $v)
    {    echo 
"$v<br />";
    }
    
    
?>

 

break

break przerywa wykonywanie aktualnej instrukcji for, foreach, while, do..while lub switch.

 

continue

continue używamy jest wewnątrz instukcji pętli do przerwania wykonywania danej iteracji pętli i rozpoczęcia kolejnej iteracji.

 

return

Instrukcja return(), wywołana z wnętrza funkcji, natychmiastowo zakańcza wykonywanie tej funkcji i zwraca jako jej wartość swój argument. return() zakańcza również wykonywanie instrukcji eval() lub danego pliku skryptowego.

Instrukcja ta, wywołana w zasięgu globalnym, zakańcza wykonywanie całego pliku skryptowego.

Jeżeli dany skrypt był dołączony funkcjami include() lub require(), sterowanie zostaje zwrócone do pliku wywołującego.

Jeżeli plik został dołączony funkcją include(), to argument przekazany do funkcji return() będzie zwrócony jako wartość funkcji include().

Jeżeli funkcja return() zostanie wywołana w głównym pliku skryptowym, to nastąpi zakończenie całego skryptu.

 

require(), require_once()

Instrukcja require() służy do wczytania i wykonania skryptu z określonego pliku.

require() wczytuje i wykonuje skrypt z podanego pliku. Szczegółowa informacja odnośnie tego, jak działa wczytywanie opisana jest w dokumentacji dla instrukcji include().

Instrukcje require() i include() są identyczne w każdym szczególe, z wyjątkiem obsługi błędów. W razie niepowodzenia, include() generuje ostrzeżenie (Warning), podczas gdy require() generuje błąd krytyczny (Fatal Error). Innymi słowy, instrukcji require() używa się do wczytywania plików, które są niezbędne do działania skryptu i w przypadku ich braku wykonywanie skryptu musi zostać przerwane. Instukcja include() nie zachowuje się w ten sposób. W jej przypadku, przy braku pliku wykonywanie skryptu będzie kontynuowane.

Przykłady użycia require():

    <?php
    
    
require 'naglowek.php';

    require 
$plik;

    require (
'jakis_plik.txt');

    
?>

Instrukcja require_once() zachowuje się identyczne z instrukcją require() z jednym wyjątkiem: jeśli dany plik został już raz wczytany do tego skryptu, to nie będzie wczytany ponownie.

require_once() powinno być używane w przypadku, gdy ten sam plik mógłby zostać wczytany i wykonany wielokrotnie, ale ty chcesz mieć pewność, że zostanie wczytany dokładnie raz, aby uniknąć problemów z redefiniowaniem funkcji, nadpisywaniem zmiennych itp.

 

include(), include_once()

Instrukcja include() służy do wczytania i wykonania kodu z określonego pliku w trakcie wykonywania skryptu.

Obydwie instrukcje są identyczne w każdym szczególe, z wyjątkiem obsługi błędów. include() generuje błąd typu Warning, podczas gdy require() generuje błąd Fatal Error. Innymi słowy, funkcji require() używa się, by zatrzymać przetwarzanie skryptu, gdy brakuje jakiegoś pliku. Jeżeli zostanie użyta funkcja include(), to w powyższej sytuacji skrypt będzie przetwarzany dalej.

Kiedy plik zostanie wczytany instrukcją include(), to zawarty w nim kod dziedziczy zasięg zmiennych po linii, w której znajdowała się instrukcja wczytania. Każda zmienna dostępna w linii z instrukcją include() będzie dostępna we wczytywanym pliku od miejsca wczytania naprzód.

Przykład użycia include():

    <?php
    
    
if ($warunek)
    {    include 
$plik;
    }
    else
    {    include 
$inny;
    }

    
?>

Instrukcja include_once() zachowuje się identyczne z instrukcją include() z jednym wyjątkiem: jeśli dany plik został już raz wczytany do tego skryptu, to nie będzie wczytany ponownie.

include_once() powinno być używane w przypadku, gdy ten sam plik mógłby zostać wczytany i wykonany wielokrotnie, ale ty chcesz mieć pewność, że zostanie wczytany dokładnie raz, aby uniknąć problemów z redefiniowaniem funkcji, nadpisywaniem zmiennych itp.

« wstecz   dalej »