Coding:
Конструкція if()
<? $a = 3;
if( $a < 5 )
echo "а менше п’яти";
else
echo "a не менше п’яти"; ?> Має бути ясно, що робить такий скрипт. Залежно від того, менше $a п’яти чи ні, виконується або оператор після if() (якщо таки менше), або після else (якщо не менше).
Ясно, що виникає необхідність виконувати не один, а кілька операторів в разі виконання чи невиконання умови. Для цього використовують вже описані складні оператори, тобто кілька операторів у фігурних дужках:
<?
$timestamp = time();
$hour = date("G", $timestamp); echo "життя – це боротьба. ";
if($hour<12){
echo "до обіду";
echo "– з голодом";
}
else{
echo "після обіду"; echo " – зі сном";
}
?> Дещо незрозумілими можуть бути в цьому прикладі виклики time() та date(). Функція time() (про функції – дещо пізніше, проте використовувати ми їх почнемо вже зараз) повертає (тобто в момент виконання вона має значення) поточного часу. За досить зручною традицією час вимірюється у кількості секунд, що пройшли від 1 січня 1970 року (так звана unix era). Це дозволяє зберігати час у одній змінній цілого типу (так званий timestamp), а вже потім перетворювати її на дату та час, що можуть бути прочитані людиною. Таким чином, після виконання оператору $timestamp = time(); будемо мати поточний час записаним до змінної $timestamp.
Для форматування timestamp до форми, що може бути прочитана людиною, існує функція date(). У дужках після імені функції мають бути два параметри – формат видачі дати та timestamp. Повертає ця функція відформатовану залежно від першого параметру дату, що міститься у другому параметрі. Наприклад, date(“d.m.Y”, $timestamp) для 24 листопада 2004 року поверне рядок “24.11.2004”. Тобто кожна буква, вказана у рядку формату дати має деяке значення. Повний список символів для формату можна знайти у додаткових матеріалах до цього курсу, зараз лише зазначу, що символ “G” означає годину доби у 24-годинному форматі. Тобто після виконання оператору $hour = date(“G”, $timestamp); у змінній $hour ми будемо мати поточну годину доби.
Наступна конструкція має бути зрозумілою. Якщо поточна година менше дванадцятої, то скрипт друкує рядки echo “до обіду” та “з голодом”, у іншому разі - “після обіду” та “зі сном”.
Звісно, якщо нам не потрібно визначати, які дії проводити у разі несправедливості умови після if(), то else можна не вказувати.
Крім того, для перевірки кількох умов існує конструкція if()..elseif()..else. Якщо не справедлива умова у першому if(), перевіряється умова у elseif() і так далі. Наприклад:
<?
$timestamp = time();
$hour = date("G", $timestamp); if($hour < 4){ echo "ніч";
}
elseif($hour < 12){
echo "ранок"; }
elseif($hour < 18){ echo "день";
}
else{
echo "вечір";
}
?> У прикладі, як неважко здогадатися, поточна година перевіряється на входження до того чи іншого проміжку часу та друкується відповідне слово.
Слід також згадати про логічні операції, що дозволяють конструювати складні умови. Наприклад, наступний код визначає, чи є поточний день тижня вихідним.
<?
$weekday = date("w");
if($weekday == 0 || $weekday == 6){ echo "вихідний";
}
else{
echo "будень";
}
?> В цьому прикладі я використав властивість функції date() повертати форматовану дату для поточного часу, якщо не заданий другий параметр timestamp. Тобто після виконання першого оператору цього прикладу у $weekday буде поточний день тижня. Дні тижня нумеруються починаючи з неділі – 0, субота буде 6. Тобто вихідний буде у двох випадках – коли день тижня дорівнює 0 або 6. Звісно, можна було б обійтися двома умовами:
<?
$weekday = date("w");
if($weekday == 0){
echo "вихідний";
} elseif($weekday == 6){ echo "вихідний";
}
else{
echo "будень";
}
?> Проте такий підхід не є оптимальним, оскільки при двох умовах виконується однаковий код. Ми можемо скласти складну умову за допомогою логічної операції || (логічне “або”). Ця операція має результат true (істина), якщо хоча б один з операндів має значення true. Тобто у нашому випадку якщо $weekday == 0 або $weekday == 6, то умова у if() буде справедливою і надрукується рядок “вихідний”, у іншому разі – рядок “будень”.
Щоб проілюструвати застосування інших логічних операцій, трошки перепишемо приклад:
<?
$weekday = date("w");
if($weekday != 0 && $weekday != 6){ echo "будень";
}
else{
echo "вихідний";
}
?> Операція && (логічне “І”) має значення true, якщо обидва операнди мають значення true. Тобто умова у if() даного прикладу буде істинною у разі якщо $weekday не дорівнює 0 і не дорівнює 6.
При конструюванні складних умов слід також пам’ятати про приорітети операцій та доречно користуватися дужками. Наприклад, побудуємо умову, що буде спрацьовувати тільки у другій половині дня вихідних:
<?
$weekday = date("w");
$hour = date("G"); if($hour >= 12 && ($weekday == 0 || $weekday == 6)){ echo "foobar"; }
?> Дана умова у if() підраховується так: спочатку конструкція в дужках ($weekday == 0 || $weekday == 6), а потім відбувається операція логічного “І” з умовою $hour >= 12, тобто година більше або дорівнює 12. Операція && має приорітет, вищий за ||, тому якби ми не скористалися дужками, то умова підраховувалася б у іншому порядку – спочатку відбулася б операція && ($hour >= 12 && $weekday == 0), а потім - || $weekday == 6, що, звісно, було б неправильно.
Ще один підводний камінь – це досить розповсюджена помилка, коли замість операції “дорівнює” – “==” використовують оператор присвоювання “=”, наприклад
<?
$weekday = date("w");
if($weekday = 0){
echo "неділя"; } echo "weekday=$weekday";
?> Якщо запустити цей скрипт, то ми побачимо, що “неділя” не надрукується ніколи, а завжди буде друкуватися “weekday=0”. Це відбувається через те, що значенням оператору присвоювання є присвоюване значення, у даному випадку 0. Значення 0 – це все одно що false, тому умова у if() ніколи не спрацює.
Так само можна використовувати числові змінні як умови у if(). Наприклад
<?
if($count){ echo "foobar";
}
?> Ця умова спрацює, якщо $count не дорівнює 0 (або пустому рядку, що теж є еквівалентом false). Так само
<?
if(!$count){
echo "foobar"; }
?> навпаки, спрацює тільки в тому випадку, коли $count дорівнює 0 або пустому рядку.
Враховуючи все сказане вище, ми можемо конструювати навіть дещо екзотичні конструкції на зразок
<?
if( !($weekday = date("w")) ){ echo "неділя";
}
?>
Короткі висновки уроку:
- використовується у випадку коли необхідно виконати деякий код залежно від деякої умови
- Якщо умова не виконується, то виконується код після else
- Якщо потрібно виконати кілька умов, то використовують конструкцію if()..elseif()..else
Гостьова - це просто
Основи PHP
Вчимось рахувати
Як зробити Інтернет-магазин ?
Як зробити ротатор банерів на сайті
Коментарі (14) | Залишити коментар
| Jean | 17.04.2011 16:31 |
| Walking in the prseence of giants here. Cool thinking all around! |
| Kailey | 17.04.2011 18:53 |
| Tuohcowdn! That′s a really cool way of putting it! |
| cheap oem software | 11.02.2012 04:05 |
| egopPV Author, Shoot yourself a knee..!! |
| cheap oem software | 12.02.2012 21:01 |
| kOGbf6 Yeah, it is clear now !... Just can not figure out how often do you update your blog?!... |
| esalerugs promo code | 13.02.2012 18:10 |
| Last a few years has been to Ibiza, so met a person there whose style of presentation is very similar to yours. But, unfortunately, that person is too far from the Internet!.... |
| cheapoair | 13.02.2012 18:33 |
| Scribbler, give me a student′s record-book!)))) |
| followers exchanege | 13.02.2012 18:55 |
| As I have expected, the writer blurted out..!! |
| viagra | 13.02.2012 19:18 |
| Read, of course, far from my topic. But still, we can work together. How do you feel about trust management?!.... |
| Cherry Hill NJ personal trainer | 13.02.2012 19:41 |
| Comrade kill yourself.. |
| Buy Cheap OEM Software | 08.03.2012 05:56 |
| GcS9eU I really enjoy the blog post.Thanks Again. Fantastic. |
| Discount OEM Software | 08.03.2012 05:56 |
| lHvXAV Very neat post.Really thank you! Want more. |
| Adobe OEM Software | 08.03.2012 13:05 |
| iBIwQS Thanks for the article. Really Great. |
| Adobe OEM Software | 08.03.2012 17:35 |
| bDIbn6 Major thanks for the blog post.Much thanks again. Will read on... |
| wholesale men clothing | 21.03.2012 02:27 |
| A big thank you for your article.Thanks Again. Much obliged. |


