Продолжим изучение PHP и рассмотрим основные управляющие конструкции, которые он нам предоставляет. Начнем мы с конструкции "if". Она является одной из наиболее важных во многих языках программирования, в том числе и PHP, и предоставляет возможность условного выполнения фрагментов кода. Обратите внимание на слайд. Если выражение в скобках принимает значение "true", то фрагмент кода заключенный в фигурные скобки выполнится. Когда фрагмент содержит только одну из инструкций (как в примере), то кавычки можно упустить. Но это плохой стиль кода. Инструкции "if" могут быть бесконечно вложены в другие инструкции "if", что дает большую гибкость в организации условного выполнения различных частей программы. Когда же необходимо выполнить одно выражение, если условие верно и другое выражение в противном случае, то используется конструкция "else", которая расширяет оператор "if", пример вы можете увидеть на слайде. Следующая конструкция "elseif" также расширяет оператор "if", но для выполнения различных выражений, в случае, когда условие начального оператора "if" ложно. Однако, в отличие от "else", выполнение альтернативного выражения произойдет только тогда, когда условие оператора "elseif" будет истинным. Количество использования "elseif" не ограничено, но не стоит забывать, что при первом истинном выражении остальные не будут проверяться. У большинства конструкций в PHP существует и альтернативный синтаксис. Он более удобен для использования шаблонов совместно с HTML-разметкой, и на мой взгляд он более чистый. В каждом случае основной формой альтернативного синтаксиса является изменение открывающей фигурной скобки на двоеточие, а закрывающей скобки — на "endif", "endwhile", "endfor" и так далее. Далее в этом уроке, где это возможно, будем рассматривать именно этот вариант синтаксиса. Теперь перейдем к циклам. Цикл — это управляющая конструкция, предназначенная для организации многократного исполнения фрагмента кода. Один проход по инструкциям фрагмента принято называть итерацией. Простейший цикл в PHP — это цикл "while". Он выполняет вложенный фрагмент кода повторно до тех пор, пока выражение в скобочках истинно. Значение выражения будет проверяться каждый раз перед началом цикла. Если изначально выражение ложно, то цикл не выполнится. Посмотрите на пример, где мы вводим числа от одного до четырех. Внутри цикла мы изменяем переменную "i", которая используется в условном выражении с помощью оператора-инкремента "++", который увеличивает переменную на единицу. Это делается для того, чтобы не получился бесконечный цикл. Используя этот цикл, всегда проверяйте, что переменная в выражении меняется по ходу работы цикла. Следующий цикл "do-while" очень похож на цикл "while", с тем отличием, что истинность выражения проверяется в конце итерации, а не в начале. Это значит что первая итерация цикла "do-while" гарантированно всегда выполнится. На слайде код выводит числа от трех до одного. Цикл "for" — самый сложный цикл в PHP. У него целых три выражения. Обратите внимание на слайд, где мы выводим числа от одного до 10 включительно. Первое выражение всегда выполняется только один раз в начале цикла и чаще всего используется для задания начального значения переменной. Второе выражение проверяется в начале каждой итерации: если оно истинно, то фрагмент выполнится, иначе — цикл заканчивается. И в конце каждой итерации вычисляется третье выражение. Каждое из выражений может быть пустым или содержать несколько выражений, разделенных запятыми. Это может пригодиться вам для создания сложных циклов. Теперь перейдем к последнему циклу в PHP — это цикл "foreach". Он представляет собой простой способ перебора массива. Так же он может работать и с объектами. С другими типами данных будет выдавать ошибку. Рассмотрим его на примере. Первый цикл перебирает у нас массив, заданный с помощью "mas". На каждой итерации значение текущего элемента массива присваивается переменной "value", и внутренний указатель массива увеличивается на единицу. Таким образом, на следующей итерации цикла работа будет происходить со следующим элементом. Такой способ задания "foreach" хорошо подходит для вывода элементов массива. Второй же цикл на слайде дополнительно присвоит ключ текущего элемента переменной "key" на каждой итерации, что позволяет нам изменять массив в процессе цикла. В процессе решения какой-нибудь задачи может возникнуть потребность на определенной итерации прервать цикл. Чтобы это осуществить, существует оператор "break". Посмотрите пример на слайде, где мы прерываем бесконечный цикл при достижении значения переменной "i" 10-ти. "Break" также может принимать необязательный числовой аргумент, который сообщает ему, выполнение какого количества вложенных структур необходимо прервать. Значение по умолчанию единица — только ближайшая структура будет прервана, то есть один цикл. "Break" также может принимать необязательный числовой аргумент, который сообщает ему, выполнение какого количества вложенных структур необходимо прервать. Значение по умолчанию — один, только ближайшая структура будет прервана. Так же бывает необходимо пропустить какой-то шаг в цикле. Для этого используется конструкция "continue". Она пропускает оставшуюся часть фрагмента кода текущей итерации. На слайде представлен пример кода для вывода только нечетных чисел в диапазоне от нуля до 10. "Continue" также может принимать необязательный числовой аргумент, который указывает, на скольких уровнях вложенных циклов будет пропущена оставшаяся часть итераций. Значением по умолчанию является единичка, при которой пропускается оставшаяся часть текущего цикла. Представим ситуацию. Нам необходимо сравнить одну и ту же переменную с множеством различных значений, и выполнять различные участки кода в зависимости от того, какое значение принимает эта переменная. Можно, конечно, использовать несколько операторов "if", но в PHP есть для этого специальная конструкция "switch". Обратите внимание на слайд. "Switch" сравнивает переменную "i" с двумя значениями сверху вниз. На первом же совпадении она выполнит соответствующую инструкцию и прервется с помощью оператора "break". Если не сработал ни один из других операторов "case", то управление перейдет к конструкции "default" (по умолчанию) и выполнит соответствующий ей фрагмент кода. Для создания грамотной структуры программы вам требуется подключать другие файловые сценарии. И для этого существует конструкция "require", с которой мы уже сталкивались, и конструкция "include". Они включают и выполняют указанный файл. "Require" аналогичный "include", за исключением того, что при ошибке он также выдаст фатальную ошибку, то есть прервет выполнение скрипта, тогда как "include" выдал бы только предупреждение, которое позволило бы скрипту продолжить работу. Теперь перейдем к функциям. Функция — это фрагмент кода, к которому можно обратиться из другого места программы. Это очень мощный инструмент программирования. Правила именования для названия функций PHP те же, что и для переменных. На слайде вы можете увидеть пример синтаксиса простой функции, которая выводит "Hello!" В PHP функции не обязаны быть определены до их использования. После выполнения функции управление возвращается обратно в адрес возврата — точку программы, где данная функция была вызвана. В PHP функции не обязаны быть определены до их использования. lydmila.mlm@gmail.comПосле выполнения функции управление возвращается обратно в адрес возврата — точку программы, где данная функция была вызвана. Функция может принимать информацию в виде списка аргументов, который является списком разделенных запятыми выражений. Аргументы вычисляются слева направо. Если для функции определены аргументы, они обязательно должны присутствовать в вызове функции, определенные через запятые, как у нас на примере. Если же мы допускаем, что аргумент может быть пропущен при вызове функции, то можно использовать аргумент по умолчанию. В примере это аргумент "c". При вызове функции мы можем его не указать (могли). Функции также могут возвращать значения. Значения возвращаются при помощи оператора возврата "return". Возвращаемые значения могут быть любого типа. Возврат приводит к завершению выполнения функции и передачу управления обратно к той строчке кода, в которой данная функция была вызвана. То есть, если в теле функции существуют инструкции после выполнения оператора возврата, они будут проигнорированы. Полученное значение функции мы можем записать в переменную или использовать выражение как на примере. Вернемся к переменным и поговорим об области видимости. Переменная, объявленная внутри пользовательской функции, считается локальной. Другими словами, на нее можно ссылаться только в этой функции. При любом присвоении вне функции будет использоваться совершенно другая переменная, которая не имеет ничего общего (может быть, кроме имени) с переменой, объявленной внутри функции. Переменная вне функции, которая доступна всей программе, называется глобальной. На примере — это переменная "a". Если же глобальная переменная будет использоваться внутри функции, она должна быть объявлена глобальной внутри нее (как у нас на слайде) с помощью конструкции "global". Это может, на первый взгляд, показаться неудобным, но у локальных переменных есть свой плюс — это отсутствие непредвиденных побочных эффектов, связанных со случайной или намеренной модификацией глобальной переменной. В PHP существуют переменные, которые доступны в любом месте программы. Они называются суперглобальными и уже определены в PHP, и не требуют использования конструкции "global" для использования внутри функции. Например, переменная "post" хранит массив переменных, передаваемых текущему сценарию посредством HTTP POST-запросов, которые мы позже будем использовать. Или обратите внимание на слайд: суперглобальная переменная "GLOBALS", являющаяся массивом, ключом которой является имя, а значением — содержимое глобальной переменной. Его можно использовать вместо конструкции "global", чтобы сделать глобальные переменные доступными в локальной области видимости, как на примере, где мы изменяем глобальную переменную "b" с помощью функции. И напоследок. Как мы помним, интерпретатор PHP игнорирует то, что не заключено в теге. Это не совсем так. Мы можем изолировать блоки HTML-разметки с помощью условий или выводить их с помощью циклов. В примере на слайде PHP пропустит блоки, где условие не соблюдается. Даже несмотря на то, что они находятся не в паре открывающих и закрывающих тегов. Интерпретатор будет перепрыгивать через блоки, содержащиеся внутри условия, которое не соблюдается. Подобным образом можно выводить многократно блоки с помощью циклов. При выводе больших блоков текста, выход из режима синтаксического разбора PHP обычно более эффективен, чем отправка текста с помощью функции "echo".