Skocz do zawartości

Kurs PHP by PanKrok - Teoria #2 Struktury kontrolne, pętle


Pankrok
 Udostępnij

Rekomendowane odpowiedzi

  • Ekspert

Witam w drugiej części kursu PHP, dzisiaj zajmiemy się strukturami kontrolnymi. Owe struktury pozwalają na wykonać fragment kodu w zależności od zdefiniowanych wcześniej warunków, czyli np. dopasować kod do informacji które napłyną z formularza czy bazy danych. Poniżej graficzne przedstawienie podstawowego warunku.

Spoiler

Drawing.sketchpad.thumb.png.aaa66dd6fde7aabab2dfd05f271ffa11.png

Prawa strona rysunku przedstawia prostą zależność, jeżeli użytkownik jest zalogowany należy wyświetlić jego login w przeciwnym wypadku formularz rejestracji. Proste i piękne czyż nie 🙂 .

Zanim zaczniemy omawiania struktur kontrolnych musisz wiedzieć czym jest blok kodu. Blok kodu jest to wszystko co znajduje się pomiędzy klamrami { }
Przechodząc do meritum, PHP obsługuje następujące struktury:

  • if
  • else
  • elseif
  • switch
  • while
  • do-while
  • for
  • foreach

przyjrzyjmy się im dokładniej.

1. Instrukcje warunkowe

Warunek if (jeżeli)

Ten warunek pozwala na wykonanie bloku kodu jeżeli podany warunek został spełniony (zwraca wartość true). Powiedzmy że prowadzisz swoją stronę i chcesz coś wyświetlić tylko jeśli ktoś jest zalogowany:

<?php declare(strict_types=1);

$isLogged = true;
if ($isLogged) {
	$message = 'Jesteś zalogowny, witaj na stronie BornHub'; 
}

echo $message;

Warunek else (w przeciwnym wypadku)

zawsze powiązany z if informuje PHP jaki blok kodu ma zostać wykonana jeśli warunek if nie został spełniony (zwrócił false), tym razem na stronie nie tylko chcesz coś wyświetlić dla zalogowanego usera ale też dla niezalogowanego:

<?php declare(strict_types=1);

$isLogged = false;
if ($isLogged) {
	$message = 'Jesteś zalogowany'; 
} else {
	$message = 'Witaj nieznany użytkowniku, zarejestruj się na naszej stronie';
} 

echo $message;

możliwe jest skorzystanie ze skróconego zapisu, nie jestem jednak jego zwolennikiem ze względu na mniejszą czytelność. W skróconej wersji powyższy przykład będzie wyglądał tak:

<?php declare(strict_types=1);

$isLogged = false;
$message =  $isLogged ? 'Jesteś zalogowany' : 'Witaj nieznany użytkowniku, zarejestruj się na naszej stronie'; 
echo $message;

efekt wygląda tak samo, zwróć jednak uwagę że czytelność takiego zapisu jest zdecydowanie mniejsza. Jeśli po jakimś czasie wrócisz do swojego kodu podziękujesz sobie za dłuższy zapis 🙂

Warunek elseif (w przeciwnym wypadku jeżeli)

jeśli mamy możliwość ze warunek będzie posiadał więcej niż opcje możemy skorzystać z elseifa, załóżmy że masz na swojej stronie system reputacji i chcesz wyświetlić jej poziom w zależności od zdobytych punktów przez użytkownika:

<?php declare(strict_types=1);

$reputation = 21;
echo 'Poziom twojej reputacji to: ';
if ($reputation > 20) {
    $message = 'honorowy';
} elseif ($reputation <= 20 && $reputation > 10) {
    $message = 'przyjacielski';
} else {
    $message = 'neutralny';
}

echo $message;

wszystko fajnie ale co jak tych warunków zrobi się kilkadziesiąt, odpowiedź jest jedna: z kodu zostanie spaghetti a znany hydraulik Marian będzie bił Cię za to po głowie, od tego mamy inną instrukcję warunkową.

Warunek switch

switch to nic innego niż ataki fajny przełącznik, wyobraź sobie że siedzisz w aucie i chcesz ustawić nawiew na szybę, więc przekręcasz przełącznik/wajchę/(boję się pomyśleć co jeszcze) i od teraz powietrze dmucha pięknie na szybę, wilgoć ucieka i widzisz drogę. To teraz zapiszmy to w wersji PHP:

<?php declare(strict_types=1);

$option = 'window';
switch ($option) {
  case 'window':
    echo "I blow on window";
    break;
  case 'legs':
    echo "I blow on legs";
    break;
  case 'middle':
    echo "I blow on middle";
    break;
  case 'legs and middle':
    echo "I blow on legs and middle";
    break;
  case 'legs and window':
    echo "I blow on legs and window";
    break;
  default:
    echo "Dude just pick up some option! I'm not a teapot!";
}

ok wiemy już jak tworzyć różne proste warunki, teraz czas się zapętlić!

2. Pętle

PHP pozwala na wykonywanie kodu w pętli, zależnie od naszego warunku określoną ilość razy, zapytasz "a na jakiego grzyba mi to jest potrzebne". Już odpowiem, powiedzmy że chcesz zrobić listę punktów reputacji którą jest potrzebna do zdobycia wyższego poziomu, lista ta działa na zasadzie (x * y) + x a tych poziomów jest 100 😄 możesz to wyklinać ale po co? Zobacz na poniższy rysunek jak to działa:

Spoiler

obraz.thumb.png.c0ee3cde775ccb7eedef14cd64b04cc8.png

Pętla for

kręcimy się w kółko tyle razy aż spełnimy ustalony przez nas warunek, pętla for składa się z trzech elementów: for (1; 2; 3)
1 ustalamy od czego zaczynany naszą iterację np $i = 0 - na starcie jesteśmy na numerze 0,
2 ustalamy warunek kiedy kończymy się kręcić w pętli: $i < 100 - kręcimy się tak długi jak $i jest mniejsze od 100,
3 ustalamy co dzieje się przy każdym okrążeniu: $i++ - zwiększamy i o 1;

OK teraz rozważmy nasz przypadek z reputacją, zajrzyjmy do kodu:

<?php declare(strict_types=1);

$exp = 1;
for ($i = 0; $i < 100; $i++) {
    $exp = ($exp * $i) + $exp;
    echo $exp . PHP_EOL;
}

poszło szybko i sprawnie, tutaj jedna uwaga, zawsze dobieraj bardzo dokładnie warunki tak aby kiedyś nie zostały spełnione, inaczej wpadniesz w nieskończoną pętlę (choć i na to są sposoby).

Pętla while

zazwyczaj korzstamy z tej pętli aby wykonywać jakaś operację do czasu spełnienia wybranego warunku, ot naprzykład masz listę w której na jakiejś pozycji jest "czosnek" i chcesz wiedzeć co jest wcześniej na liście:

<?php declare(strict_types=1);

$shoplist = [
        'potato',
        'onion',
        'garlic',
        'banana'
    ];
$i = 0;    
    
while ($shoplist[$i] !== 'garlic') {
    echo $shoplist[$i] . PHP_EOL;
    $i++;
}

bang, pięknie 😄

Pętla do while

podobnie jak powyższa pętla z tym że ta wykona się przynajmniej jeden raz! Tym razem sprawzimy co jest na początku listy:

<?php declare(strict_types=1);

$shoplist = [
        'potato',
        'onion',
        'garlic',
        'banana'
    ];
$i = 0;    
    
do {
    echo $shoplist[$i] . PHP_EOL;
     $i++;
} while ($shoplist[$i] !== 'garlic');

Pętla foreach

powyższa pętla służy do iterowania tablic i jest jedną z chyba najbardziej przydatnych pętli, powiedzmy że pobierasz sobie listę aktywnych użytkowników na swojej stronie i jest ich 100, chcesz wyświetlić nazwę każdego z nich aj waj byłoby słabo, niby można policzyć długość takiej tablicy i potem zrobić pętlę for, ale prościej będzie zrobić foreach. Dodatkowo nie musisz się martwić zednym warunkiem. Pętla daje możliwość wyświetlenia wartości lub kluczy i wartości.

<?php declare(strict_types=1);

$users = [
        'Senior',
        'Mativve',
        'Niebieska',
        'Pankrok',
        'włoszka',
        '-n3veR'
    ];

// dla każdego użytkownika jako wartość
foreach ($users as $value) {
    echo $value . PHP_EOL;
}

echo '---' . PHP_EOL;
// dla każdego użytkownika jako klucz i jego wartość
foreach ($users as $key => $value) {
    echo $key . ' - ' . $value . PHP_EOL;
}

break

powższa instrukcja pozwala nam zakończyć pętlę w dowolnym momencie,  jak zawsz na sam koniec nie mam już pomysłu na przykład dlatego połamiemy pętlę kiedy trafimy na Pankroka

<?php declare(strict_types=1);

$users = [
        'Senior',
        'Mativve',
        'Niebieska',
        'Pankrok',
        'włoszka',
        '-n3veR'
    ];

foreach ($users as $value) {
    echo $value . PHP_EOL;
    if ($value === 'Pankrok') {
        break;
    }
}

Informacje dodakowe

Pętle i warunki można łączyć, zagnieżdzać:

<?php declare(strict_types=1);

$users = [
        'Senior',
        'Mativve',
        'Niebieska',
        'Pankrok',
        'włoszka',
        '-n3veR'
    ];

if ($users[1] === 'Mativve') {
    if($users[0] === 'Senior') {
        echo 'Hej to Mativve i Senior!' . PHP_EOL;
    }
}

foreach ($users as $value) {
    for ($i = 0; $i < 2; $i++) {
        echo 'user ' . $value . ' mówi: ' . $i . PHP_EOL;
    }
}

W dalszej części poruszymy ciekawsze zagadnienia takie jak tablice, funkcje, klasy i pobieranie danych od użytkownika co pozwoli napisać nam nareszcie jakiś prosty program 😄

Odnośnik do komentarza
Udostępnij na innych stronach

Dzieki wielkie za kolejną część. Pętla for, najtrudniejsza dla mnie ale robie kilka przykladow online i zaczynam pojmować.

Think New Amsterdam GIF by NBC

Napisales ze petla kreci sie do 10 a w kodzie jest 100, dlaczego tak?

Odnośnik do komentarza
Udostępnij na innych stronach

Problem wciąż nierozwiązany? Dodaj swoją odpowiedź

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto. Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
 Udostępnij

×