На сегодня у меня есть две хорошие новости. Новость первая: открылся сайт нашей рассылки. В этом мне очень помог хостинг ImHoster.Net (кстати, советую: тарифы удобные, а цены — низкие). Новость вторая: на сайте сделан форум (phpBB 2.0.11), где Вы можете обсудить
нашу рассылку, язык PHP, да и просто пообщаться друг с другом и со мной (если есть желание).
Сегодняшний наш урок посвящён условиям. В принципе, для тех, кто раньше программировал на Perl, C++ и других языках программирования этот урок будет прост и очень знаком, так как конструкции языка PHP очень схожи с конструкциями других языков.
Пользователям The Bat!: Учитывая то, что The Bat обладает ужасным HTML-парсером, советую читать рассылку не из программы, а предварительно сохранив в виде HTML-страницы (для этого можно дважды щелкнуть на значке "Сообщение.html" слева от поля с текстом рассылки, на вопрос о сохранении ответить "Да" и указать папку для сохранения файла письма).
Условия IF
Пожалуй основным и наиболее часто встречающимся элементом языка PHP (да и многих других) являются условия. В PHP существует оператор условия if.
Общий вид условия таков:
Пример 1. Внешний вид условий в PHP:
if (условие) {
код, который будет выполнен, если выполняется условие
}
Приведём несколько примеров того, как может использоваться условие if.
Пример 2. Пример использования условий IF:
$a=3;
if ($a==3) {
echo ("Число равно 3");
}
Пример 3. Пример использования условий IF:
if (!$userName) {
// если переменная $userName не была определена в программе, то
// выводим сообщение:
echo ("Вы не ввели имя пользователя!");
}
Заметьте! Во втором примере в качестве условия взята строка $a+$b==7. Я раньше не пояснял действия знака «==», однако, пришло время. Дело в том, что в PHP существует два внешне похожих знака: «=» и «==», между которыми огромная разница.
Дело в том, что знак «=» означает «приравнять» или «установить значение», то есть выражение $a=5; можно прочесть как «приравнять значение
переменной $a к пяти», или «установить значение переменной $a равным пяти». И сам оператор служит для установки значения, но не для сравнения.
Что касается оператора «==», то его смысл сводится к вопросу «равно ли?», и выражение $a==5; можно прочесть как «Проверь, равно ли значение переменной $a пяти?». Оператор этот используется исключительно для сравнения.
Недавно начавшие обучение PHP часто путают два оператора между собой. Посмотрите
на такой пример (он очень похож на пример 2):
Пример 4. Пример неправильного использования условия IF и оператора присваивания:
$a=3;
if ($a=3) {
echo ("Число равно 3");}
}
В чём ошибка данного кода? Посмотрим, что сделает PHP при обработке данного сценария:
Установит значение переменной $a равным трём
Вместо того, чтобы сравнить переменную $a с числом 3 (как во втором примере) он снова установит значение переменной $a равным трём
Установить это значение ему легко удастся, следовательно, условие выполняется и PHP выведет на экран сообщение «Число равно 3»
Вы можете легко проверить, правильно ли я говорю, сменив в начале
кода строку $a=3;, на, например, $a=5;. Условие (из-за ошибки программиста) выполнится в любом случае.
Однако, я отвлёкся от условий. Есть более простая форма условия: вы можете не использовать фигурные скобки ({ и }), в том случае, если в качестве кода у Вас будет только одна команда.
Пример 5. Использование короткой формы условий
<?php
$a=1;
// правильное использование:
if ($a==1) $a=5;
// неправильное использование:
if ($a==5) $a=1; $b=5;
// неправильность заключается в том, что если $a будет равно 5, то
// выполнится только команда $a=1. Вторая команда ($b=5) уже не
// относится к условию и будет выполнена в любом случае
// (независимо от результата проверки условия)
?>
Выражение IF может иметь неограниченную степень вложенности в другие выражения IF, то есть Вы, например, можете написать и такой код:
Пример 6. Вложенные условия
<?php
if ($a==7) {
$b=3;
if ($b+$a>=10) {
$m="Всё OK";
if ($x/3=$x+3)
$n="Интересно...";
// эти две строки (if ... и $n="...) являются
// одним условием, написанным в короткой форме
// (условие можно разбивать на строки)
}
}
?>
Условия IF ... ELSE
Поехали дальше. Представим такую ситуацию: если условие выполняется, нам нужно сделать одно, а если не выполняется – другое. Как сделать? Не писать же два раза условие! Однако, решение есть всегда. Стоит лишь немного изменить внешний вид условия и мы получим необходимый результат.
Пример 7. Внешний вид условий в PHP:
if (условие) {
код, который будет выполнен, если выполняется условие
} else {
код, который будет выполнен, если условие не выполняется
}
Примеры использования:
Пример 8. Пример использования условий
<?php
if (!$userName) {
// если имя пользователя не указано, то выводим ошибку
echo ("Введите имя пользователя");
} else {
// если имя указано, то программа продолжает нормально работать
echo ("Привет, " . $userName . "!!!");
}
?>
Следующий пример очень хорошо иллюстрирует достаточно эффективный способ обработки форм. Внимательно разберитесь с этим примером. Будут вопросы – пишите!
Пример 9. Использование условий при обработке форм
<?php
if (!$form) {
// если переменная не существует
// то есть форма ещё не была заполнена, то выводим её:
?><form action="?form=1">
Ваше имя:
<input type="text" name="user">
<input type="submit" value="Отправить">
</form><?
} else {
// если форма уже была заполнена – обрабатываем её
echo ("Здравствуйте, ");
echo ($user);
echo ("!!!");
// заметьте, что вместо трёх команд echo можно было записать
// одну, объединив три строки с помощью точки, вот так:
// echo ("Здравствуйте, " . $user . "!!!");
}
?>
Условия IF ... ELSEIF ... ELSE
Ну, думаю, что уже по подзаголовку Вы поняли, что сейчас мы разберём третий вариант написания условий. Представим себе задачу: пользователь вводит в форму число. Если это число принадлежит отрезку больше 120 — вывести одно сообщение, если оно меньше -40 — вывести другое сообщение, а во всех остальных случаях — третье сообщение. Что делать? Смотрим:
Пример 10. Сложные условные конструкции
<?php
if (!$form) {
// если переменная не существует
// то есть форма ещё не была заполнена, то выводим её:
?><form action="?form=1">
Введите число:
<input type="text" name="number">
<input type="submit" value="Отправить">
</form><?
} else {
// Если форма была заполнена — обрабатываем её
if ($number>120) {
// если число больше 120 выводим
echo ("Это число больше ста двадцати");
} elseif ($number<-40) {
// если число меньше -40 выводим
echo ("Это число меньше минус сорока");
} else {
// в остальных случаях выводим
echo ("Это вообще непонятное число");
}
}
?>
Главное для нас в этом условии — наличие elseif. Он позволяет указывать дополнительное условие. Действия PHP при обработке этого условия показано на схеме:
Рисунок 1. Схема обработки условия примера 10:
Условия elseif выполняются
до тех пор, пока не будет найдено условие, которое истинно. Так, если бы было две elseif-конструкции, то PHP сначала проверил бы первую конструкцию. Если её условие истинно, то он запустить код, находящийся в этом блоке, а все остальные блоки elseif и else пропустит. Если же условие первого блока ложен, то PHP перейдёт к следующему варианту.
Также Вы можете использовать и два и три и даже сто конструкций elseif в своих условиях. Их количество не ограничено.
Логика
Представим такую задачу: Пользователь вводит в текстовое поле логин и пароль. Дальше скрипт должен осуществить такую проверку: если логин равен «Администратор» и пароль равен «abcdef», то пользователя можно пустить в «тайный» раздел сайта, а если нет — то нельзя. Как объединить два условия в одно? Для этого существует ключевое слово: and. Посмотрите на код программы (предполагается, что форма ввода находится в отдельном файле).
Пример
11. Объединение двух условий. Ключевое слово and:
<?php
// $user - имя пользователя
// $pass - пароль
if ($user=="Администратор" and $pass=="abcdef") {
// здесь находится информация доступная только администратору
}
?>
Тело условия (код, находящийся внутри него) будет показан только в том случае, если оба условия ($user=="Администратор" и $pass=="abcdef") будут выполняться. Если хоть одно из них не выполняется, тело условия показано не будет.
Также вместо слова and можно использовать && (два знака амперсанда). Разницы — никакой.
А теперь представим себе другой вариант: например, в форме вводится только пароль и мы должны «пустить» в скрытый раздел только того, кто введёт в качестве пароля либо «12345» либо «98765». Как проверить эти два пароля в одном условии? Для этого нам понадобится ключевое слово or. Посмотрите на код:
Пример 12. Объединение двух условий. Ключевое слово or:
<?php
// $pass - пароль
if ($pass=="12345" or $pass=="98765") {
// здесь находится информация доступная только
// тому, кто введёт один из правильных паролей
}
?>
В данном случае тело условия будет показано в том случае, если хотя бы одно из требований (или $pass=="12345" или $pass=="98765") будет выполняться. Если же оба условия ложны, то тело не будет показано. Кстати, если оба условия окажутся верны (правда, в нашем примере это невозможно), то тело будет показано пользователю.
Итак, повторим ещё раз: если нужно, чтобы одновременно выполнялось несколько условий — используем and, если
нужно, чтобы хоть одно из условий выполнилось — or.
Вот, пожалуй, всё, что необходимо знать об условиях. Как я уже и говорил в начале чашечки, тем, кто уже программировал на других языках, этот выпуск будет практически бесполезен. Тем не менее, надеюсь, что тем, кто никогда программированием не занимался,
этот выпуск рассылки помог.