Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Условные операторы





If

Часто (да что тут говорить, практически в любой программе) возникает необходимость выполнения разного кода в зависимости от определенных условий. Рассмотрим пример:

  1. <?
  2. $i = 10;
  3. $j = 5 * 2;
  4. if ($i == $j)
  5. echo 'Переменные $i и $j имеют одинаковые значения';
  6. else
  7. echo 'Переменные $i и $j имеют различные значения';
  8. ?>

Здесь используется оператор if..else - условный оператор. В общем виде он выглядит так:
if (условие)
выражение_1;
else
выражение_2;

В данном случае, условием является результат сравнения значений переменных $i и $j. Оператор сравнения - == - два знака равенства. Поскольку 5*2 равняется 10, и, соответственно, 10 равняется 10;), выполнится строка 5, и мы увидим, что переменные имеют равные значения. Измените, например, строку 2 на $i = 11, и вы увидите, что выполнится оператор echo из строки 7 (так как условие ложно). Помимо ==, есть и другие операторы сравнения:
!= - не равно;
< - меньше;
> - больше;
<= - меньше или равно;
>= - больше или равно.

Поэкспериментируйте, изменяя оператор сравнения и значения переменных. (Для логической правильности вывода на экран, потребуется, конечно, изменить и тексты, выводимые операторами echo:)).

Не путайте оператор сравнения == с оператором присваивания =! Если вы допустите такую ошибку, условие всегда будет верным, если присваивается значение, соответствующее булевому true, и всегда ложным - если значение соответствует false. (См. выше о булевых значениях и чему они соответствуют).

Если требуется только выполнить действие, если условие выполняется, блок else...можно опустить:

  1. <?
  2. $i = 10;
  3. $j = 5 * 2;
  4. if ($i == $j)
  5. echo 'Переменные $i и $j имеют одинаковые значения';
  6. ?>

В этом случае, если условие ложно, в браузер не выведется ничего.

Отступы перед строками echo... сделаны для удобства чтения, но PHP они ни о чем не говорят. Следующий пример работает не так, как можно ожидать:

  1. <?
  2. $i = 10;
  3. $j = 11;
  4. if ($i > $j)
  5. $diff = $j - $i;
  6. echo '$j больше, чем $i; разность между $j и $i составляет '. $diff; //НЕВЕРНО!
  7. ?>

Вопреки возможным ожиданиям, строка 6 выполнится, хотя условие ($i > $j) ложно. Дело в том, что к if(...) относится лишь следующее выражение - строка 5. Строка 6 же выполняется в любом случае - действие if(..) на нее уже не распространяется. Для получения нужного эффекта следует воспользоваться блоком операторов, который задается фигурными скобками:

  1. <?
  2. $i = 10;
  3. $j = 11;
  4. if ($i > $j) {
  5. $diff = $j - $i;
  6. echo '$j больше, чем $i; разность между $j и $i составляет '. $diff;
  7. }
  8. ?>

Теперь все работает правильно.

Фигурные скобки можно использовать, даже если внутри - только один оператор. Я рекомендую поступать именно так - меньше шансов ошибиться. На производительности это никак не сказывается, зато повышает читабельность.

Часто нужно ввести дополнительные условия (если так... а если по-другому... иначе) или даже (если так.. а если по-другому.. а если еще по-другому... иначе):

  1. <?
  2. $i = 10;
  3. $j = 11;
  4. if ($i > $j) {
  5. echo '$i больше, чем $j';
  6. } else if ($i < $j) {
  7. echo '$i меньше, чем $j';
  8. } else { // ничего, кроме равенства, не остается:)
  9. echo '$i равно $j';
  10. }
  11. ?>

Для дополнительных "развилок" используется оператор if... else if... else. Как и в случае с if, блок else может отсутствовать. Следуя свой же недавней рекомендации, я заключил все операторы echo в фигурные скобки, хотя все бы прекрасно работало и без оных.

Кстати, в строке 8 - комментарий. Это информация для человека, PHP ее игнорирует. Комментарии бывают двух видов: однострочный, как здесь - начинается с // и распространяется до конца строки, и многострочный - комментарием считается все, что расположено между парами символов /* и */.

Комментарий вида // - один из немногих случаев, когда инструкция заканчивается переводом строки. Напомню - PHP в большинстве случаев безразличны переводы строк: все предыдущие примеры вполне можно было бы записать в одну строку.

Switch

Бывает необходимость осуществления "развилки" в зависимости от значения одной и той же переменной или выражения. Можно написать что-то вроде:

if ($i==1) { // код, соответствующий $i==1 } else if ($i==2) { // код, соответствующий $i==2 } else if ($i==3) { // код, соответствующий $i==3... }

Но существует более удобный для этого случая оператор - switch. Выглядит это так:

  1. <?
  2. $i = 1;
  3. switch ($i) {
  4. case 1:
  5. echo 'один';
  6. break;
  7. case 2:
  8. echo 'два';
  9. break;
  10. case 3:
  11. echo 'три';
  12. break;
  13. default:
  14. echo 'я умею считать только до трех!;)';
  15. }
  16. ?>

Понаблюдайте за результатом выполнения программы, меняя значение $i во второй строке. Как вы уже наверняка поняли, после switch в скобках указывается переменная (хотя там может быть и выражение - например, $i+1 - попробуйте:)), а строки case XXX соответствуют значению того, что в скобках.

Операторы, находящиеся между case-ами, не нужно заключать в фигурные скобки - каждое ответвление заканчивается оператором break.

Специальное условие default соответствует "всему остальному" (аналог else в if...else if..else). default всегда располагется последним, так что break здесь необязателен. Как и в случае с else, условие default может отсутствовать.

Если вы вдруг забудете указать break, будут выполняться все последующие строки - из последующих case -ов! Например, если в нашем примере удалить строку 6, при $i==1 в браузер выведется " одиндва ". Некоторые чересчур хитрые программисты используют этот трюк для указания нескольких вариантов значений:

  1. <?
  2. $i = 1;
  3. switch ($i) {
  4. case 0: // break отсутствует умышленно!
  5. case 1:
  6. echo 'ноль или один';
  7. break;
  8. case 2:
  9. echo 'два';
  10. break;
  11. case 3:
  12. echo 'три';
  13. break;
  14. }
  15. ?>

или для выполнения при определенном значении условия двух действий подряд. Но это уже ухищрения - лучше всего использовать switch "как положено", заканчивая каждый case своим break-ом; а если уж "ухищряетесь" - не забудьте поставить комментарий, как это сделано в строке 5 последнего примера.

Циклы

Любой более-менее серьезный язык программирования содержит операторы огранизации циклов для повторного выполнения фрагментов кода. В PHP есть три таких оператора.

While

Начнем с цикла while:

  1. <?
  2. $i = 1;
  3. while($i < 10) {
  4. echo $i. "<br>\n";
  5. $i++;
  6. }
  7. ?>

Цикл while (строка 3) работает следующим образом. Сначала проверяется истинность выражения в скобках. Если оно не истинно, тело цикла (все, что расположено между последующими фигурными скобками - или, если их нет - следующая инструкция) не выполняется. Если же оно истинно, после выполнения кода, находящегося в теле цикла, опять проверяется истинность выражения, и т.д.

В теле цикла (строки 4,5) выводится текущее значение переменной $i, после чего значение $i увеличивается на единицу.

Переменную, используемую подобно $i в данном примере, часто называют переменной-счетчиком цикла, или просто счетчиком.

$i++, операция инкрементирования (увеличения значения на 1) - сокращенная запись для $i=$i+1; аналогичная сокращенная запись - $i+=1. По последнему правилу можно сокращать любые бинарные операции (например, конкатенация: $s.= 'foo' - аналог $s = $s. 'foo'); однако, аналогично инкрементированию можно записать только декрементирование (уменьшение значения на 1): $i--.

Возможна также запись ++$i (и --$i); различие в расположении знаков операции проявляется только при непосредственном использовании результата этого вычисления: если $i равна 1, в случае $j=$i++ переменная $j получит значение 1, если же $j=++$i, $j будет равняться двум. Из-за этой особенности операция ++$i называется преинкрементом, а $i++ - постинкрементом.

Если бы мы не увеличвали значение $i, выход из цикла никогда бы не произошел ("вечный цикл").

Запишем тот же пример в более краткой форме:

  1. <?
  2. $i = 1;
  3. while($i < 10) {
  4. echo $i++. "<br>\n";
  5. }
  6. ?>

И еще один вариант:

  1. <?
  2. $i = 0;
  3. while(++$i < 10) {
  4. echo $i. "<br>\n";
  5. }
  6. ?>

Советую немного поразмыслить, почему все эти три программы работают одинаково. Заметьте, что в зависимости от начального значения счетчика удобнее та или иная форма записи.

Date: 2015-09-17; view: 276; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию