PHPDevs

Projekt obiektowy z Composerem i Twigiem? Czytaj!

Struktury kontrolne > Lekcja 2

else i elseif

Wróćmy ponownie do przykładu z poprzedniej lekcji. Mówiliśmy o sytuacji, gdy musimy sprawdzić czy klient ma określoną ilość pieniędzy w wirtualnym portfelu i tylko jeśli tak, wykonać określone operacje. Teraz dodatkowo chcielibyśmy wyświetlić mu komunikat informacyjny, jeśli ma za mało środków.

Jeśli zrozumiałeś poprzednie tematy, powinieneś już poradzić sobie z wykonaniem takiego kodu:

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

Jednak taki zapis nie wydaje się wygodny - musimy zamienić warunek na jego dokładne przeciwieństwo. Jak zapewne się domyślasz można to uprościć i służy do tego else. Działa na takiej zasadzie:

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

Poprawmy od razu powyższy przykład składający się z dwóch ifów na użycie if i else.

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

Prościej? Myślę, że tak.

Ciekawostka

Jak pewnie zauważyłeś użyłem zapisu \'. W sytuacji gdybym zapisał po prostu apostrof, przerwałbym otwarty wcześniej string i spowodowałbym błąd. Stąd poprzedzając go backslashem zostanie potraktowany jako część tekstu, a nie jego zakończenie. Podobny trik można zastosować też z cudzysłowem - \".

elseif

Istnieje jeszcze opcja połączenia else i if. Dzięki temu możemy od razu dodać kolejny warunek i wykonać go tylko wtedy, gdy wcześniejszy się nie spełni.

<?php
if (wyrażenie1) {
    // kod do wykonania jeżeli wyrażenie jest prawdziwe
} elseif (wyrażenie2) {
    // kod do wykonania jeżeli wyrażenie1 nie jest prawdziwe, a wyrażenie 2 jest prawdziwe
} else {
    // kod do wykonania jeśli żadne wyrażenie nie jest prawdziwe
}

Bazując na poprzednim przykładzie, wyświetlimy klientowi inny komunikat, gdy nie ma żadnych środków w portfelu, a inny gdy saldo jest powyżej zera.

<?php
$wallet = 15.50;
$purchaseCost = 4.99;
if ($wallet >= $purchaseCost) {
    echo 'You can purchase!';
} elseif ($wallet === 0) {
    echo 'You can\'t purchase - no money!';
} else {
    echo 'You can\'t purchase - too little money!';
}
// result: You can purchase!

Uwaga

Zauważ, że gdybyśmy zamienili elseif na zwykły if, działanie kodu byłoby inne (chociaż akurat w tym przypadku efekt byłby taki sam). Warunek z drugim wyrażeniem byłby sprawdzany za każdym razem, nawet jeśli pierwsze wyrażenie byłoby prawdziwe.

Uwaga

elseif możemy też zapisać jako else if (ze spacją). Efekt działania będzie taki sam. Standard PSR-2 nakazuje używania zapisu elseif, dlatego też taki będziemy stosować. Dodatkowo zwróć uwagę na ułożenie klamer w moich przykładach - zapisane są właśnie tak jak, zalecają standardy PSR.

Skrócony zapis warunku

W zasadzie nazywane jest to operatorem, jednak pomyślałem, że zrozumienie tego razem z warunkami będzie bardziej proste i logiczne, dlatego mówię o nim dopiero teraz.

Możemy skrócić zapis przy użyciu konstrukcji z ? i :.

<?php
(wyrażenie ? co jeśli prawda : co jeśli fałsz)

Nie służy on jednak do wykonywania całych instrukcji, a tylko prostych operacji - na przykład przypisań czy wyświetleń.

<?php
$hour = 18;
if ($hour >= 22) {
    echo 'night';
} else {
    echo 'day';
}
// result: day
<?php
$hour = 18;
echo $hour >= 22 ? 'night' : 'day';
// result: day

Efekt działania obydwu przykładów jest taki sam.

Ćwiczenia

  1. Rozbuduj ćwiczenie 1. z poprzedniej lekcji. Jeśli osoba o wieku $age jest pełnoletnia wyświetl komunikat "Adult!", a jeśli nie wyświetl "Teenager!". Użyj else.
    <?php
    $age = 22;
    // your code
    

    Przykładowe rozwiązanie

  2. Podziel liczbę osób $people na 4-osobowe zespoły.
    • Jeżeli liczba osób będzie odpowiednia wyświetl komunikat: "Teams: [liczba zespołów]".
    • Jeśli tylko jedna osoba pozostanie bez zespołu, wyświetl sam komunikat "Too few people!".
    • W sytuacji gdy zabraknie miejsca dla większej liczby ludzi, wypisz: "Missing: [liczba brakujących osób do pełnego zespołu]".

    Skorzystaj z elseif. Podpowiedź: przypomnij sobie operator modulo.

    <?php
    $people = 34;
    // your code
    

    Przykładowe rozwiązanie

Poprzednia lekcja Następna lekcja

Udostępnij

  • Facebook
  • Twitter
  • Google+

Komentarze