Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Условные операторыIf Часто (да что тут говорить, практически в любой программе) возникает необходимость выполнения разного кода в зависимости от определенных условий. Рассмотрим пример:
Здесь используется оператор if..else - условный оператор. В общем виде он выглядит так: В данном случае, условием является результат сравнения значений переменных $i и $j. Оператор сравнения - == - два знака равенства. Поскольку 5*2 равняется 10, и, соответственно, 10 равняется 10;), выполнится строка 5, и мы увидим, что переменные имеют равные значения. Измените, например, строку 2 на $i = 11, и вы увидите, что выполнится оператор echo из строки 7 (так как условие ложно). Помимо ==, есть и другие операторы сравнения: Поэкспериментируйте, изменяя оператор сравнения и значения переменных. (Для логической правильности вывода на экран, потребуется, конечно, изменить и тексты, выводимые операторами echo:)). Не путайте оператор сравнения == с оператором присваивания =! Если вы допустите такую ошибку, условие всегда будет верным, если присваивается значение, соответствующее булевому true, и всегда ложным - если значение соответствует false. (См. выше о булевых значениях и чему они соответствуют). Если требуется только выполнить действие, если условие выполняется, блок else...можно опустить:
В этом случае, если условие ложно, в браузер не выведется ничего. Отступы перед строками echo... сделаны для удобства чтения, но PHP они ни о чем не говорят. Следующий пример работает не так, как можно ожидать:
Вопреки возможным ожиданиям, строка 6 выполнится, хотя условие ($i > $j) ложно. Дело в том, что к if(...) относится лишь следующее выражение - строка 5. Строка 6 же выполняется в любом случае - действие if(..) на нее уже не распространяется. Для получения нужного эффекта следует воспользоваться блоком операторов, который задается фигурными скобками:
Теперь все работает правильно. Фигурные скобки можно использовать, даже если внутри - только один оператор. Я рекомендую поступать именно так - меньше шансов ошибиться. На производительности это никак не сказывается, зато повышает читабельность. Часто нужно ввести дополнительные условия (если так... а если по-другому... иначе) или даже (если так.. а если по-другому.. а если еще по-другому... иначе):
Для дополнительных "развилок" используется оператор 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. Выглядит это так:
Понаблюдайте за результатом выполнения программы, меняя значение $i во второй строке. Как вы уже наверняка поняли, после switch в скобках указывается переменная (хотя там может быть и выражение - например, $i+1 - попробуйте:)), а строки case XXX соответствуют значению того, что в скобках. Операторы, находящиеся между case-ами, не нужно заключать в фигурные скобки - каждое ответвление заканчивается оператором break. Специальное условие default соответствует "всему остальному" (аналог else в if...else if..else). default всегда располагется последним, так что break здесь необязателен. Как и в случае с else, условие default может отсутствовать. Если вы вдруг забудете указать break, будут выполняться все последующие строки - из последующих case -ов! Например, если в нашем примере удалить строку 6, при $i==1 в браузер выведется " одиндва ". Некоторые чересчур хитрые программисты используют этот трюк для указания нескольких вариантов значений:
или для выполнения при определенном значении условия двух действий подряд. Но это уже ухищрения - лучше всего использовать switch "как положено", заканчивая каждый case своим break-ом; а если уж "ухищряетесь" - не забудьте поставить комментарий, как это сделано в строке 5 последнего примера. Циклы Любой более-менее серьезный язык программирования содержит операторы огранизации циклов для повторного выполнения фрагментов кода. В PHP есть три таких оператора. While Начнем с цикла while:
Цикл 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, выход из цикла никогда бы не произошел ("вечный цикл"). Запишем тот же пример в более краткой форме:
И еще один вариант:
Советую немного поразмыслить, почему все эти три программы работают одинаково. Заметьте, что в зависимости от начального значения счетчика удобнее та или иная форма записи.
|