PHP 8 i 8.1 - sprawdź co nowego!

Struktury kontrolne > Lekcja 1

Instrukcje warunkowe

Jako iż tłumaczenie na przykładach wydaje mi się bardziej przyjazne niż sucha teoria, znów od takowego rozpoczniemy. Załóżmy, że mamy prosty sklep internetowy z wirtualnym portfelem. W momencie, gdy klient będzie próbował zamówić jakiś towar, musimy sprawdzić, czy posiada on odpowiednią ilość pieniędzy (więcej lub dokładnie tyle, ile kosztuje towar) i tylko jeśli tak jest pozwolić na zakup.

Do tego celu użyjemy właśnie instrukcji warunkowych, nazywanych też często warunkami, czy po prostu ifami (wynika to ze składni i jednocześnie języka angielskiego). Warunki umożliwiają wykonanie kodu w sytuacji, gdy określone wyrażenie zostanie spełnione lub nie.

Podstawowa konstrukcja instrukcji warunkowej wygląda tak:

<?php
if (wyrażenie) {
    // kod do wykonania jeżeli wyrażenie jest prawdziwe
}

A czymże jest wyrażenie? Mam nadzieję, że pamiętasz jeszcze lekcję o operatorach. Tam pokazałem Ci operatory porównania i możemy ich tutaj użyć. Równie dobrze możemy też wywołać jakąś funkcję. Ogólnie rzecz biorąc, operujemy tu na wartościach typu bool. Wyrażenie uznane jest za prawdziwe, jeśli zwróci true, a fałszywe gdy false. Zobaczmy już praktyczny przykład dla opisanego powyżej koszyka:

<?php
$wallet = 15.50;
$purchaseCost = 4.99;
if ($wallet >= $purchaseCost) {
    echo 'You can purchase!';
}
// result: You can purchase!

Warunek bez klamer

Warte zaznaczenia jest też, że klamry { } w powyższych zapisach nie są obowiązkowe. Można zapisać warunek bez nich, ale uwaga: możemy wtedy wykonać tylko jedno polecenie. Nie jedną linię, czy do końca aktualnej linii, a jedną konkretną rzecz (najczęściej do najbliższego średnika).

Przykład:

<?php
$wallet = 15.50;
$purchaseCost = 20;
if ($wallet >= $purchaseCost)
    echo 'You can purchase!';
echo 'outside';
// result: outside

Być może skraca to odrobinę kod, ale też obniża jego czytelność. Sugeruję Ci, abyś zawsze, nawet przy wykonywaniu jednej instrukcji, zapisywał klamry. Podobnie mówi standard PSR-12.

Wypada mi jeszcze wspomnieć o alternatywnym zapisie instrukcji warunkowej, z użyciem dwukropka i słówka endif. Takowy istnieje, jednak nie jest zbyt często używany i w kursie najpewniej się więcej nie pojawi.

<?php
$wallet = 15.50;
$purchaseCost = 4.99;
if ($wallet >= $purchaseCost):
    echo 'You can purchase!';
endif;
// result: You can purchase!

Operatory logiczne

Myślę, że w tym miejscu warto powrócić jeszcze na moment do operatorów. Większość najbardziej przydatnych już sobie omówiliśmy, ale nie było nic o operatorach logicznych. Do czego one służą? Prosto mówiąc, możemy dzięki nim w określony sposób połączyć kilka wyrażeń w jedno.

  • &&, and i - wszystkie muszą być prawdziwe
    <?php
    $name = 'Jan';
    $age = 25;
    if ($name === 'Jan' && $age === 30) {
        echo 'OK';
    }
    // no result
    
  • ||, or lub - przynajmniej jedno musi być prawdziwe
    <?php
    $name = 'Jan';
    $age = 25;
    if ($name === 'Jan' || $age === 30) {
        echo 'OK';
    }
    // result: OK
    
  • xor - tylko jedno musi być prawdziwe
    <?php
    $name = 'Jan';
    $age = 25;
    if ($name === 'Jan' xor $age === 30) {
        echo 'OK';
    }
    // result: OK
    

Możemy oczywiście połączyć razem więcej wyrażeń i mieszać różne operatory. Co więcej, możemy je także grupować przy użyciu nawiasów ( ). Działa to w pewnym sensie podobnie jak kolejność działań w matematyce. Wymuszamy, aby coś zostało sprawdzone najpierw i dopiero jego wynik użyty dalej. Kontynuując przykład z imieniem i wiekiem wyobraź sobie, że musisz wykonać jakąś akcję, gdy osoba to przykładowo Jan w wieku 30 lat lub Andrzej mający 20 lat. Nie interesuje Cię sytuacja, gdy to będzie - załóżmy - Jan w wieku 20 lat. Zapiszemy to w ten sposób:

<?php
$name = 'Jan';
$age = 20;
if (($name === 'Jan' && $age === 30) || ($name === 'Andrzej' && $age === 20)) {
    echo 'OK';
}
// no result

Najpierw zostanie sprawdzona poprawność danych wewnątrz nawiasu i dopiero, jeśli będzie się zgadzało, wyrażenie zostanie uznane za prawdziwe. Użycie || spowoduje, że pasować musi przynajmniej jeden taki zestaw danych, aby cały warunek został uznany za prawdziwy.

Mamy też operator zaprzeczenia !, który sprawdzi, czy wyrażenie nie będzie prawdziwe.

<?php
$status = false;
if (!$status) {
    echo 'not true';
}
// result: not true

Ćwiczenia

Od dzisiejszej lekcji rozpoczynam publikowanie ćwiczeń do wykonania po zapoznaniu się z lekcją. Ma to na celu sprawdzenie i utrwalenie nowej wiedzy.

Nie spodziewaj się jednak, że dam teraz do stworzenia nie wiadomo jak trudne aplikacje, albo pokażę od razu jak je zrobić. Jest to kurs od podstaw, więc krok po kroku przechodzimy do kolejnych zagadnień. Zadawane przeze mnie do wykonania programy może i mają obecnie mało sensu, jednak z pewnością pomogą zapamiętać i przyswoić omówioną wiedzę. Wszystkie zadania będą zawsze możliwe do wykonania z wiedzy przyswojonej w kursie - jeśli któreś miałoby zawierać dodatkową wiedzę, wychodzącą poza kurs, to na pewno to zaznaczę.

Rozwiązania

Udostępniam również przykładowe rozwiązania. Jednak absolutnie nie zaglądaj do niego przed wykonaniem własnego programu! Publikuję je, abyś mógł porównać i sprawdzić swój kod po napisaniu. Jeśli po prostu wejdziesz i skopiujesz sobie gotowca to tylko Twój problem i Twoja strata. Ty obecnie próbujesz się tego nauczyć i Tobie powinno zależeć na tym, aby zrobić jak najlepiej i najwięcej samemu.

Nie martw się za bardzo, jeśli Twój kod jest nieco inny. Bardzo często można uzyskać taki sam efekt na różne sposoby. Jeżeli masz jakieś wątpliwości, zapytaj w komentarzu, postaram się wyjaśnić ewentualne różnice.

Warto wiedzieć

Rozwiązania udostępniam w serwisie GitHub. Jest to, bardzo popularny wśród programistów, serwis pozwalający na przechowywanie swoich repozytoriów systemu kontroli wersji Git. Prościej mówiąc: w serwisie tym możemy przechowywać swój kod. Zapisywana jest każda zmiana, dostępnych jest też dużo opcji ułatwiających pracę nad projektem przez wiele osób. Z pewnością z GitHubem spotkasz się jeszcze nie raz. Myślę, że z odczytaniem przykładowego kodu nie będziesz mieć żadnego problemu - podaję bezpośredniego linka przy zadaniu. A o samym Gicie i GitHubie powiemy więcej gdzieś dalej. Pomimo tego, że Git nie jest bezpośrednio powiązany z PHP, to jest obecnie tak powszechny i tak często spotykany, że będę chciał poświęcić na niego część kursu.

Dokumentacja: www.php.net/manual/en/control-structures.if.php

Ćwiczenia

  1. Przygotuj skrypt sprawdzający, czy osoba, której wiek podany zostanie w zmiennej $age, jest pełnoletnia. Jeśli tak, wyświetl komunikat Adult!.
    <?php
    $age = 22;
    // your code
    
    Przykładowe rozwiązanie
  2. Oblicz pole kwadratu o boku długości $side i jeśli będzie równe 25, wypisz na ekranie: Area: [obliczone pole].
    <?php
    $side = 5;
    // your code
    
    Przykładowe rozwiązanie
Powrót Następna lekcja

Udostępnij

  • Facebook
  • Twitter

Komentarze