Страницы

четверг, 16 февраля 2012 г.

PHP. Конструкция if — else

Конструкция if - else. Условие: если то, делай это, иначе делай другое. Сложно? Мне самому так бы было неясно:) В теме опишу все на пальцах!

Оказывается такая конструкция относится к управляющим структурам в php. Как сказала одна умная книжка:
Управляющие структуры - это средства, которые позволяют управлять поведением программ.
К таким структурам также относится и конструкция do - while, о которой я писал ранее. На самом деле, так оно и есть, ведь мы таким образом управляем нашим необъемным пространством php-сущности, дабы воссоздать чудо неземное. Это было немного отступление от темы - вернемся к нашей конструкции if - else. Сначала давайте напряжем наш мозг, вспомнив и представив себе конструкцию do-while, как она работает. Провернем многовариантные махинации с ней в голове... Теперь можно переходить!
Снова обращусь к примеру с тренером и футболистом, который пытается запинать мяч в ворота. Представим, как это будет выглядеть на php, как будто тренер смотрит на все глазами обработчика. Футболист пытается забить гол в ворота и судорожно совершает попытки удара по мячу. Вот как видит это тренер и что у него творится в мыслях в голове:
<?
if (мяч в воротах) {
я хвалю футболиста;
}
else {
он будет бить по мячу, пока не забьет}
Разберем, что же на уме у нашего обработчика-тренера: он смотрит на то, как футболист нежится на поле с мячом и ставит себе условие: если мяч в воротах  (if ( ) ), то есть футболист забил гол, я его похвалю ( { } ), так как он выполнил свою задачу - забил гол. Если же он не забивает гол, то есть ситуация происходит иначе, то я дам ему команду: бить по мячу, пока не забьет гол (else { } ). Теперь кратко: если мяч в воротах - я хвалю футболиста, иначе - говорю ему продолжать пытаться забить гол. Суть какая: здесь уже не цикл идет, а именно проверка ситуации условием нашим if - else. То есть проверка ситуации происходит однократно в момент прочтения кода обработчиком. Давайте посмотрим, как вся наша реализация будет выглядеть на территории php-области. Рассмотрим пример:
<?
$a=5;
if ($a<7) {
echo $a;
}
else {
echo "Переменная a больше 7";
}

$b=5;
if ($b<3) {
echo $b;
}
else {
echo "Переменная b больше 3";
}
?>
Конечно разберемся: рассмотрим первый случай с переменной $a. Изначально мы поместили в нее значение, равное 5. Дальше идет наше условие if - else: мы проверяем, если наша переменная $a меньше 7, то мы выводим эту нашу переменную (с помощью конструкции echo). Если же наша переменная не меньше 7, то выводим сообщение  "Переменная a больше 7". В нашем случае видно, что наша $a имеет значение 5, что соответственно меньше 7 (мне уже сложно от этой математики), поэтому выполняется условие: вывести переменную $a (echo $a). Соответственно условие, которое определяется после else (иначе) выполняться не будет, так как сработало условие - истина, что 5<7 и исполнилась только команда в первых скобках.
Второй случай с переменной $b: тут дело состоит по другому. Наша переменная имеет значение 5, что соответственно больше 3 и не определяется нашим условием: if ($b<3). Теперь условие ложь, поэтому выполнится вторая часть нашей конструкции - иначе (else). Отсюда видим, что выведется на экран сообщение  "Переменная b больше 3". Вот картина, исходящая из наших условий, уже сформированная на сайте пользователя:
5Переменная b больше 3
Вывелась переменная $a и второе условие иначе с переменной b. У нас слились эти два сообщения, потому что мы их не разделили тегом <br>. Особенность такой конструкции какая: мы можем использовать лишь первую часть нашего условия - только условие if () { }. Здесь проверка будет только на то условие, которые мы укажем в круглых скобках и теперь уже, если наше условие не соответствует выполняемому, то не выведется ничего. Вот смотрим на примере:
<?
$с=6;
if ($с>8) {
echo $с;
}
?>
После выполнения данного кода в результате не получим ничего (помимо того, что в значении переменной $c будет храниться 6) на экране, так как наше условие - ложь и оно не выполнится. А условия, определяющего иной исход событий (else) у нас нету - отсюда и не выведется ничего на наш запрос такой. Рассмотрим, как можно задавать несколько условий для нашего обработчика. Первый случай, если мы хотим, чтобы одновременно выполнялось несколько условий:
<?
$d=2;
$e=4;
$f=$d+$e;
if (($d==2) and ($e==4)) {
echo $f;
}
?>
В переменную $f мы занесли сумму двух других переменных. Мы выведем ее только в том случае, когда будет выполняться одновременно два наших условия: переменная $d=2 и переменная $e=4 (помним, что в условиях приравнивание оформляется двойным знаком равно ==). Теперь начинка нашего условия if выполнится только тогда, когжа будут истинны два этих условия. В нашем случае, исходя из начальных данных данные условия выполняются оба, соответственно команда echo $f, заданная внутри квадратных скобок, будет успешно выполнена и на экране увидим цифру 6.
Заметили, что это реализуется с помощью слова and, условия которым разделяются в круглых скобках. Их можно продолжать и далее, не ограничиваясь только двумя, каждый раз вставляя and между условиями. Другой вариант такого типажа, если мы хотим чтобы выполнялось одно из нескольких условий оформляется с помощью оператора or (или). На том же самом месте, где стоял оператор and, вставляется оператор or. То есть теперь наша команда внутри квадратных скобок будет выполняться в том случае, если даже одно из условий будет выполняться:
<?
$g=5;
$h=10;
$j=$h/$g;
if (($g<4) or ($h>8)) {
echo $j;
}
?>
Видим что первое условие ложно, переменная $g на самом деле больше 4, это условие ложно. Но второе условие, что  $h>8, истинно, соответственно проверка условия прошла и должно выполниться то, что находиться в квадратных скобках - вывод переменной $j. Вот собственно такой принцип функционирования этих символов.
Помимо and и or имееются и другие операторы, определяющие выбор условий в своих целях. Но в основном используются только данные операторы. Другой вариант использования конструкции if - else. Такую трактовку я редко встречал (да учитывая мою практику я вообще редко что встречал), но все же приведу вариант, как можно ещё использовать добро такое:
<?
$k=12;
$l=15;
if ($k>$l) {
echo "k>l";
}
elseif ($k<$l){
echo "k<l";
}
else {
echo "k=l";
}
?>
Алгоритм такой: проверяется условие в первых круглых скобках: если оно истинно, то выполняется код в скобках. У нас оно ложь (k не больше l), значит этот блок if ( ) { } не выполняется. Далее следует блок elseif, который выполняется только в том случае, если первое условие ложь, т.е. не выполняется.
В нашем случае как раз такой вариант, т.е. проверяется второе условие, что k меньше l. Оно истинно, соответственно код внутри будет подвержен исполнению. Ну а третья часть - наше "иначе" (else) выполняться в нашем случае не будет, так как выполнилось уже второе условие. А если бы ни первое, ни второе условие не было истинным в другом примере, то выполнился бы код из части "иначе". Отсюда надо понять, что код из части иначе будет выполняться только тогда, когда все остальное ложно. Думаю по данной конструкции я излил вам все, что считаю полезным для вас и практичным.

Комментариев нет:

Отправить комментарий