ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 18.05.2024
Просмотров: 62
Скачиваний: 0
Лекція 3.
Тема: Управляючі конструкції
Мета: В лекції розглядаються умовні оператори (if, switch), робота з циклами (while, for, foreach) і використовування функцій include, require. Приклад – універсалізація листа залежно від ситуації і його відправка кожному з групи користувачів.
ПЛАН
1 Умовні оператори
2 Цикли
3 Оператори передачі управління
4 Оператори включення
1 Умовні оператори
1.1 Оператор if
Це один з найважливіших операторів багатьох язиків, включаючи PHP. Він дозволяє виконувати фрагменти коду залежно від умови. Структуру оператора if можна представити таким чином:
if (вираз) блок_виконання
Тут вираз є будь-який правильний PHP-вираз. В процесі обробки скрипта вираз перетвориться до логічного типу. Якщо в результаті перетворення значення виразу істинне (True), то виконується блок_виконання. Інакше блок_виконання ігнорується. Якщо блок_виконання містить декілька команд, то він повинен бути взятий у фігурні дужки { }.
Правила перетворення виразу до логічного типу:
В FALSE перетворяться наступні значення:
-
логічне False
-
цілий нуль ( 0 )
-
дійсний нуль ( 0.0 )
-
порожній рядок і рядок "0"
-
масив без елементів
-
об'єкт без змінних (детально про об'єкти буде розказано в одній з наступних лекцій)
-
спеціальний тип NULL
Вся решта значень перетвориться в TRUE.
<?
$names = array("Іван","Петро","Семен");
if ($names[0]=="Іван") {
echo "Привіт, Ваня!";
$num = 1;
$account = 2000;
}
if ($num) echo "<br>Іван перший в списку!";
$bax = 30;
if ($account > 100*$bax+3)
echo "Ця строчка не з'явиться на екрані, оскільки умова не виконана";
?>
Приклад 3.1. Умовний оператор if
1.2 Оператор else
Ми розглянули тільки одну, основну частину оператора if . Існує декілька розширень цього оператора. Оператор else розширює if на випадок, коли вираз, що перевіряється в if є невірним, і дозволяє виконати які-небудь дії за таких умов.
Структуру оператора if, розширеного за допомогою оператора else, можна представити таким чином:
If (вираз) блок_виконання
else блок_виконання1
Цю конструкцію if...else можна інтерпретувати приблизно так: якщо виконана умова (тобто вираз = true), то виконуємо дії з блока_виконання, інакше – дії з блока_виконання1. Використовувати оператор else не обов'язково.
Подивимося, як можна змінити попередній приклад, враховуючи необхідність здійснення дій і у разі невиконання умови.
<?
$names = array("Іван","Петро","Семен");
if ($names[0]=="Іван") {
echo "Привіт, Ваня!";
$num = 1;
$account = 2000;
} else {
echo "Привіт $names[0]. А ми чекали Ваню :(";
}
if ($num) echo "Іван перший в списку!";
else echo "Іван не перший в списку?!";
$bax = 30;
if ($account > 100*$bax+3)
echo "Цей рядок не з'явиться на екрані оскільки умова не виконана";
else echo "Зате з'явиться цей рядок!";
?>
Приклад 3.2. Оператор else
1.3 Оператор elseif
Ще один спосіб розширення умовного оператора if – використовування оператора elseif.
elseif – це комбінація else і if . Як і else, він розширює if для виконання різних дій в тому випадку, якщо умова, що перевіряється в if, невірна. Але на відміну від else, альтернативні дії будуть виконані, тільки якщо elseif-умова є вірною. Структуру оператора if, розширеного за допомогою операторів else і elseif, можна представити таким чином:
If (вираз) блок_виконання
elseif(вираз1) блок_виконання1
else блок_виконанняN
Операторів elseif може бути відразу декілька в одному if-блоці. Elseif-твердження буде виконано, тільки якщо попередня if-умова є False, всі попередні elseif-умови є False, а дана elseif-умова – True.
<?
$names = array("Іван","Петро","Семен");
if ($names[0]=="Іван") {
// якщо перше ім'я в масиві Іван
echo "Привіт, Ваня!";
}elseif ($names[0] == "Петро"){
// якщо перше ім'я не Іван, а Петро
echo "Привіт, Петя!";
}elseif ($names[0] == "Семен"){
// якщо перше ім'я не Іван, не Петро, а Семен
echo "Привіт, Сєня!";
}else {
// якщо перше ім'я не Іван не Петроо і не Семен
echo "Привіт $names[0]. А ти хто такий?";
}
?>
Приклад 3.3. Оператор elseif
Альтернативний синтаксис
PHP пропонує альтернативний синтаксис для деяких своїх управляючих структур, а саме для if, while, for, foreach і switch . В кожному випадку відкриваючу дужку потрібно замінити на двокрапку ( :), а закриваючу – на endif;, endwhile; і т.д. відповідно.
Наприклад, синтаксис оператора if можна записати таким чином:
іf (вираз): блок_виконання endif;
Значення залишається тим же: якщо умова, записана в круглих дужках оператора if, виявилася істиною, виконуватиметься весь код, від двокрапки " :" до команди endif;. Використовування такого синтаксису корисне при вбудовуванні php в html-код.
<?php
$names = array("Іван","Петро","Семен");
if ($names[0]=="Іван"):
?>
Привіт, Ваня!
<?php
endif; ?>
Приклад 3.4. Використовування альтернативного синтаксису
Якщо використовуються конструкції else і elseif, то також можна задіювати альтернативний синтаксис:
<?php
$a=1;
if ($a == 5):
print "а дорівнює 5";
print "...";
elseif ($a == 6):
print "а дорівнює 6";
print "!!!";
else:
print "а не дорівнює ні 5, ні 6";
endif;
?>
1.4 Оператор switch
Ще одна конструкція, що дозволяє перевіряти умову і виконувати залежно від цього різні дії, – це switch . На російську мову назву даного оператора можна перевести як "перемикач". І значення у нього саме таке. Залежно від того, яке значення має змінна, він перемикається між різними блоками дії. switch дуже схожий на оператор if...elseif...else або набір операторів if . Структуру switch можна записати таким чином:
switch (вираз або змінна){
case значення1: блок_дій1; break;
case значення2: блок_дій2; break;
...
default: блок_дій_по_замовчанню;
}
На відміну від if, тут значення виразу не приводиться до логічного типу, а просто порівнюється із значеннями, перерахованими після ключових слів case (значення1, значення2 і т.д.). Якщо значення виразу співпало з якимсь варіантом, то виконується відповідний блок_дій – від двокрапки після значення, що співпало, до кінця switch або до першого оператора break, якщо такий знайдеться. Якщо значення виразу не співпало ні з одним з варіантів, то виконуються дії за умовчанням (блок_дій_по_замовчанню), що знаходяться після ключового слова default. Вираз в switch обчислюється тільки один раз, а в операторі elseif – кожного разу, тому, якщо вираз достатньо складний, то switch працює швидше.
Приклад 3.3 можна переписати з використанням switch таким чином:
<?
$names = array("Іван","Петро","Семен");
switch ($names[0]){
case "Іван": echo "Привіт, Ваня!"; break;
case "Петро": echo "Привіт, Петя!"; break;
case "Семен": echo "Привіт, Сеня!"; break;
default: echo "Привіт $names[0]. А як Вас звуть?";
}
?>
Якщо в даному прикладі опустити оператор break, наприклад, в case "Петро":, то, якщо змінна виявиться рівному рядку "Петро", після висновку на екран повідомлення "Привіт, Петя!" програма піде далі і виведе також повідомлення "Привіт, Сеня!" і тільки потім, зустрівши break, продовжить своє виконання за межами switch .
Для конструкції switch, як і для if, можливий альтернативний синтаксис, де відкриваюча switch фігурна дужка замінюється двокрапкою, а закриваюча – endswitch; відповідно.
2 Цикли
В PHP існує декілька конструкцій, що дозволяють виконувати дії, що повторюються, залежно від умови. Це цикли while, do..while, foreach і for . Розглянемо їх більш детально.
2.1 while
Структура:
while (вираз) { блок_виконання }
або
while (вираз): блок_виконання endwhile;
while – простий цикл. Він наказує PHP виконувати команди блока_виконання до тих пір, поки вираз обчислюється як True (тут, як і в if, відбувається приведення виразу до логічного типу). Значення виразу перевіряється кожного разу на початку циклу, так що, навіть якщо його значення змінилося в процесі виконання блока_виконання, цикл не буде зупинений до кінця ітерації (тобто поки всі команди блока_виконання не будуть виконані).
<?
//ця програма надрукує всі парні цифри
$i = 1;
while ($i < 10) {
if ($i % 2 == 0) print $i;
// друкуємо цифру, якщо вона парна
$i++;
// і збільшуємо $i на одиницю
}
?>
Приклад 3.5. Оператор while
2.2 do... while
Цикли do..while дуже схожі на цикли while, з тією лише різницею, що істинність виразу перевіряється в кінці циклу, а не на початку. Завдяки цьому блок_виконання циклу do...while гарантовано виконується хоча б один раз.
Структура:
do {блок_виконання} while (вираз);
<?
// ця програма надрукує число 12, не дивлячись на те що умова циклу не виконана
$i = 12;
do{
if ($i % 2 == 0) print $i;
// якщо число парне, то друкуємо його
$i++;
// збільшуємо число на одиницю
}while ($i<10)
?>
Приклад 3.6. Оператор do..while
2.3 for
Це найскладніші цикли в PHP. Вони нагадують відповідні цикли С.
Структура:
for (вираз1; вираз2; вираз3) {блок_виконання}
або
for (вираз1; вираз2; вираз3): блок_виконання endfor;
Тут, як ми бачимо, умова складається відразу з трьох виразів. Перший вираз вираз1 обчислюється безумовно один раз на початку циклу. На початку кожної ітерації обчислюється вираз2. Якщо він є True, то цикл продовжується і виконуються всі команди блока_виконання. Якщо вираз2 обчислюється як False, то виконання циклу зупиняється. В кінці кожної ітерації (тобто після виконання всіх команд блока_виконання ) обчислюється вираз3.
Кожний з виразів 1, 2, 3 може бути порожнім. Якщо вираз2 є порожнім, то це значить, що цикл повинен виконуватися невизначений час (в цьому випадку PHP вважає цей вираз завжди істинним). Це не так безглуздо, як здається, адже цикл можна зупиняти, використовуючи оператор break .