PHPDevs

Projekt obiektowy z Composerem i Twigiem? Czytaj!

Struktury kontrolne > Lekcja 3

switch

Nazywany jest też instrukcją wyboru. Można porównać go do użycia kilku ifów w celu sprawdzenia wartości tej samej zmiennej. Jak wygląda switch?

<?php
switch (wartość) {
    case 0:
        // wykonaj jeśli wartość będzie wynosiła 0
        break;
    case 1:
        // wykonaj jeśli wartość będzie wynosiła 1
        break;
    case 2:
        // wykonaj jeśli wartość będzie wynosiła 2
        break;
}

Zauważ, że w przeciwieństwie do warunków, nie zapisujemy tutaj instrukcji do wykonania w klamrach. Wpisujemy je po case i koniecznie kończymy poprzez break. Bez problemu możemy również operować na stringach.

Spójrz na przykład zapisu tego samego kodu przy użyciu if oraz switch.

<?php
$name = 'Marek';
if ($name === 'Jan') {
    echo 'Your name is Jan';
} elseif ($name === 'Marek') {
    echo 'Your name is Marek';
} elseif ($name === 'Eryk') {
    echo 'Your name is Eryk';
}
// result: Your name is Marek
<?php
$name = 'Marek';
switch ($name) {
    case 'Jan':
        echo 'Your name is Jan';
        break;
    case 'Marek':
        echo 'Your name is Marek';
        break;
    case 'Eryk':
        echo 'Your name is Eryk';
        break;
}
// result: Your name is Marek

Tak, można było po prostu zapisać echo $name, jednak chodziło mi o pokazanie na prostym przykładzie jak to działa :)

Istnieje także możliwość wykonania tego samego kodu dla kilku wariantów. Kopiowanie linijek w kilka miejsc byłoby kiepskim sposobem, chociażby dlatego, że w razie konieczności zmiany trzeba byłoby kilka razy poprawiać to samo i zapis niepotrzebnie by się wydłużał.

<?php
$name = 'Marek';
switch ($name) {
    case 'Anna':
    case 'Maria':
        echo 'You are a woman';
        break;
    case 'Jan':
    case 'Marek':
    case 'Eryk':
        echo 'You are a man';
        break;
}
// result: You are a man

Mamy również opcję ustalenia wartości domyślnej, która wykona się, jeśli wcześniej żadna nie zostanie dopasowana. Definiujemy ją poprzez default.

<?php
$name = 'Katarzyna';
switch ($name) {
    case 'Anna':
    case 'Maria':
        echo 'You are a woman';
        break;
    case 'Jan':
    case 'Marek':
    case 'Eryk':
        echo 'You are a man';
        break;
    default:
        echo 'I don\'t know you';
        break;
}
// result: I don't know you

Alternatywny zapis

Podobnie, jak w przypadku instrukcji warunkowej, istnieje alternatywna składnia - z użyciem : i endswitch. Rzadko się ją spotyka, dlatego w razie potrzeby doczytaj w dokumentacji. Nie zapominaj jednak, że takowa istnieje, abyś nie był kiedyś zaskoczony.

Ćwiczenia

  1. Przygotuj prosty kalkulator wykorzystujący switch. Wykonaj działanie określone w zmiennej $operation (+, -, *, /) na liczbach $number1 i $number2 oraz wyświetl jego wynik. W przypadku niewybrania żadnego z podanych działań wyświetl komunikat "Invalid operation".
    <?php
    $operation = '*';
    $number1 = 6;
    $number2 = 4;
    // your code here
    

    Przykładowe rozwiązanie

Poprzednia lekcja Następna lekcja

Udostępnij

  • Facebook
  • Twitter
  • Google+

Komentarze