Головна Інтернет Софт Hardware Мобіленд Вебмайстру Адміну Coding Hackzone Форум

Coding:

Конструкція switch()


В уроці по конструкції if() ми розглядали перевірку кількох умов за допомогою if()..elseif()..else.. switch() – це дещо наочніший спосіб виконати те ж саме. Спочатку розглянемо загальну схему роботи switch():
switch(змінна){
case значення1: оператор1; break;
case значення2: оператор2: break;
...
default: оператор3;
} 
switch перевіряє, чи дорівнює змінна кожному з значень після case. Якщо дорівнює, то виконується відповідний оператор. Якщо за весь switch() змінна не співпала з жодним значенням, то виконується оператор після default. Звісно, default можна і не задавати.

Тепер – приклад, що ілюструє цю конструкцію.

<?
    $fruits = array("яблуко", "маракуйя", "груша", "банан", "апельсин", "папайя");     foreach($fruits as $f){
        echo "колір фрукту $f: ";
        switch($f){
            case "яблуко": echo "зелений"; break;
            case "груша":             case "банан": echo "жовтий"; break;
            case "апельсин": echo "помаранчовий"; break;
            default: echo "я не знаю кольору цього фрукту";
        }
        echo "<br />n";     }
?>
Подивимось, які результати видасть цей скрипт, якщо його запустити:
колір фрукту яблуко: зелений
колір фрукту маракуйя: я не знаю кольору цього фрукту
колір фрукту груша: жовтий
колір фрукту банан: жовтий
колір фрукту апельсин: помаранчевий
колір фрукту папайя: я не знаю кольору цього фрукту
Тобто ми визначили у switch() кольори усіх відомих нам фруктів та записали їх як оператори після case. Зверніть, будь ласка, увагу, як у скрипті визначено фрукти, що мають однаковий колір – груша та банан. Після case “груша” немає оператору, а йде відразу case “банан”. Так можна задавати реакцію switch() на кілька значень, що мають мати однакову реакцію. Після default ми визначили, що друкувати, якщо змінна $f у switch() приймає невідоме нам значення.

Розповсюдженою помилкою є невказаний break після оператору. Це не викликає явної помилки у скрипті, проте приводить до досить незрозумілих на перший погляд наслідків. Розглянемо як приклад той самий скрипт, у якому “забудемо” вказати один із break:

<?
    $fruits = array("яблуко", "маракуйя", "груша", "банан", "апельсин", "папайя");     foreach($fruits as $f){
        echo "колiр фрукту $f: ";
        switch($f){
            case "яблуко": echo "зелений"; break;
            case "груша":             case "банан": echo "жовтий";
            case "апельсин": echo "помаранчевий"; break;
            default: echo "я не знаю кольору цього фрукту";
        }
        echo "<br />n";     }
?>
І ось що отримаємо в результаті:
колiр фрукту яблуко: зелений
колiр фрукту маракуйя: я не знаю кольору цього фрукту
колiр фрукту груша: жовтийпомаранчевий
колiр фрукту банан: жовтийпомаранчевий
колiр фрукту апельсин: помаранчевий
колiр фрукту папайя: я не знаю кольору цього фрукту
Чому надрукувалося саме так, можна зрозуміти, якщо детально розглянути роботу switch(). switch() переглядає значення після case одне за одним. Як тільки він зустрічає значення, що співпадає зі значенням змінної, він починає виконувати усі оператори до першого break, незважаючи на наступні case – це зроблено для того, щоб можна було задавати кілька значень. Слід зауважити, що при такій схемі немає потреби у складних операторах {}, тому що немає обмеження на кількість операторів після case, важливо лише те, щоб останнім з них був break. Тоді як у конструкціях if(), while(), for() за синтаксисом після власне if(), while(), for() іде один оператор, і щоб виконалося декілька, необхідно об’єднувати їх фігурними дужками. Тут же такої потреби немає – виконуються усі оператори від case і до break. break виконує ту саму функцію, що й у циклах while(), for(), foreach(), а саме припинення виконання.

Отож, короткі висновки:

  1. switch() використовується у випадках, коли треба перевірити змінну на відповідність кільком фіксованим значенням
  2. можна задавати однакову реакцію на кілька різних значень кількома операторами case
  3. можна задавати реакцію на значення, що їх немає після жодного case, оператором default
  4. слід пам’ятати про своєчасне використання break

24.10.2006

Матеріали за темою:
Цикли for(), foreach()
Цикли while()
Програмуємо на РНР
Робота з файлами
Функції. include, require


Коментарі (1) | Залишити коментар

Tommy | 17.04.2011 05:28
fLac3s Hey, that′s the geratest! So with ll this brain power AWHFY?

Додати коментарi

Iм'я:
Код (UA):
Коментарi:





ФОРУМ



КНИГИ, ЛІТЕРАТУРА

Вишня Остап — «Мисливські усмішки» (аудіокнига MP3) Придбати на
AudioBooks.com.ua -
26,95 грн.
Вишня Остап — «Мисливські усмішки» (аудіокнига MP3)
Котляревський Іван — «Енеїда» (аудіокнига MP3) Придбати на
AudioBooks.com.ua -
27,95 грн.
Котляревський Іван — «Енеїда» (аудіокнига MP3)

Партнери