Отправляет email-рассылки с помощью сервиса Sendsay

PHP за чашкой кофе

  Все выпуски  

PHP за чашкой кофе Чашечка четвёртая — условия


Информационный Канал Subscribe.Ru

PHP за чашкой кофе

Чашечка четвёртая — условия

PHP за чашкой кофе

Приветствую!

На сегодня у меня есть две хорошие новости. Новость первая: открылся сайт нашей рассылки. В этом мне очень помог хостинг 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 при обработке данного сценария:

  1. Установит значение переменной $a равным трём
  2. Вместо того, чтобы сравнить переменную $a с числом 3 (как во втором примере) он снова установит значение переменной $a равным трём
  3. Установить это значение ему легко удастся, следовательно, условие выполняется и 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:
Схема обработки условия примера 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.

Подробнее о логических операциях можно прочесть здесь: http://vrn.fio.ru/works/85/3/303/log_op.htm

И, наконец

Вот, пожалуй, всё, что необходимо знать об условиях. Как я уже и говорил в начале чашечки, тем, кто уже программировал на других языках, этот выпуск будет практически бесполезен. Тем не менее, надеюсь, что тем, кто никогда программированием не занимался, этот выпуск рассылки помог.

Если у Вас есть какие-либо вопросы, пишите!

Спасибо за внимание!


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: inet.webbuild.phplearn
Отписаться

В избранное