ProfiPHPProfiPHP
Категория: PHP для чайников

Управление ходом выполнения сценария

Основным содержимым PHP сценариев являются наборы инструкций, которые выполняются от начала в порядке их следования до конца файла. Но для осуществления более сложной структуры необходимо изменять порядок выполнения простых операторов с помощью более сложных инструкций, таких как условные операторы и циклы.

Изменение порядка выполнения, операторов в сценарии.

Для изменения порядка выполнения простых операторов, достаточно изменить их порядок в файле. Для выполнения отдельного фрагментов кода в зависимости от выражения можно воспользоваться конструкция If:
if ( выражение )
инструкция
Для примера опишем ситуацию, когда необходимо выбрать погоду в зависимости от времени года:
$season = 'winter';
if ( $season == 'winter' ) {
$weather = 'Холодно';
}
elseif ( $season == 'summer' ) {
$weather = 'Тепло';
}
В данном примере мы используем сложный оператор, в котором проверяется время года.

Существуют два возможных способа, с помощью которых выполняются такие сложные действия.

- Условные операторы (If, Switch). Выполнение отдельных операторов в зависимости от выражения.

- Циклы (For, While, Do..While). Выполнения некоторого блока кода несколько раз подряд.

Проверка условий

Выражения, от которых зависит выполнения отдельных фрагментов кода и которые могут быть истинны или ложны называются условиями (condition).

Проверка условий осуществляется сравниванием некоторых значений. Наиболее часто выполняется равенство двух значений, их разница или соответствие определенному шаблону. Также можно комбинировать разные условия.

Опишем основной встроенный набор операций, предназначенных для сравнения значений:

"==" - равенство значений двух переменных;

"===" - равенство значений и типа двух переменных;

">" - первое значение больше второго;

">=" - первое значение больше или равно второму;

"<" - первое значение меньше второго;

"<=" - первое значение меньше или равно второму;

"!=" - первое значение не равно второму.

"!==" первое значение и тип не равно второму.

В операциях сравнивания допускаются как числовые, так и строковые значения. Текстовые строки ранжируются в алфавитном порядке. Если строка начинается с прописных букв, она предшествует строкам, начинающимся со строчных.

Проверка содержимого переменной

Очень часто необходимо проверить существование переменной или ее значение. Для этого в PHP существуют функции:

Функция Isset определяет, была ли установлена переменная значением отличным от NULL.

Функция Empty проверяет, пуста ли переменная.

РНР также позволяет проверить тип переменной:

Функция Is_int проверяет, является ли переменная целочисленного типа.

Функция Is_numeric проверяет, является ли переменная числом или строкой, содержащей число.

Функция Is_string проверяет, является ли переменная строкой.

Функция Is_array определяет, является ли переменная массивом.

Функция Is_null проверяет, является ли значение переменной равной NULL.

Функция Is_float проверяет, является ли переменная числом с плавающей точкой.

Для проверки обратных условий следует воспользоваться символом восклицания (!).

Использование регулярных выражений

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

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

Шаблоны состоят из специальных и буквенных символов. Специальные символы имеют в шаблонах свое функциональное назначение, а буквенные символы не имеют какого-то специального назначения.

Приведем список и краткое описание специальных символов, использующихся в шаблонах:

"\" - символ экранирования;

"^" - символ начала данных;

"$" - символ конца данных;

"." - любой символ, кроме перевода строки;

"[]" - включает набор необязательных символов;

"|" - или;

"()" - группирует буквенные символы в последовательность, которую в точности должна содержать строка;

"?" - одно или ноль вхождений предшествующего символа или подмаски;

"*" - любое количество вхождений предшествующего символа или подмаски. В том числе и ноль;

"+" - одно или более вхождений;

"{a,b}" - определяет диапазон повторений символа (символов).

Для сравнения строк с шаблоном можно воспользоваться функцией Preg_match, которая выполняет проверку на соответствие регулярному выражению.

Ее общий синтаксис имеет следующий вид:
preg_match( "шаблон", значени )
Для более детального изучения функции посмотрите страницу Функция Preg_match, а пока нам вполне достаточно ее общего функционала.

Например, для того чтобы проверить правильность имени, введенного пользователем в форме, необходимо сравнить переменную $name (в которой оно хранится) с шаблоном:
$name = "Василий";
if ( ! preg_match( '#^[А-Яа-я\' -]+$#u', $name ) ) {
echo 'Некорректное имя';
}
Данный шаблон интерпретируется следующим образом.

Символы "^" и "$" определяют начало и конец текстовой строки соответственно. Это означает, что строка должна полностью соответствовать созданному шаблону.

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

В пределах квадратных скобок можно задавать область изменения символов
(например, А-Я). При этом дефис интерпретируется не как буквенный, а как
специальный символ. Для того чтобы изменить это правило, необходимо,
чтобы дефис не был заключен между двумя символами, тоесть его следует разместить в конце, после набора букв.

После квадратных скобок следует символ "+". Он указывает на то, что строка может содержать любое количество символов, заданных в квадратных скобках, но не меньше одного.

Объединение условий

На практике очень часто необходимо проверить несколько условий одновременно. Для этого следует объединить несколько условий. Общий синтаксис имеет следующий вид:
условие1 and|or|xor условие2 and|or|xor условиеЗ and|or|xor ...
Условия можно объединять с помощью следующих трех выражений (логических операторов).

- And (логическое И). Результирующее условие истинно, если истинны оба условия.

- Or (логическое ИЛИ). Результирующее условие истинно, если хотя бы одно из условий истинно.

- Xor (логическое исключающее ИЛИ). Результирующее условие истинно, если истинно одно из условий, но не оба одновременно.

Можно объединять любое количество условий. При этом порядок проверки условий следующий: наибольший приоритет имеют выражения, содержащие And, затем Xor и Or. Для того чтобы изменить порядок обработки логических операторов, следует воспользоваться скобками ( ).

Использование условных операторов

Условный оператор выполняет фрагмент кода только при соблюдении определенного условия. Рассмотрим два наиболее полезных вида условных операторов.

- Оператор If. Проверяет условие и, если оно истинно, выполняет соответствующий фрагмент кода.

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

Использование оператора If

Оператор If проверяет условия и, если оно истинно, выполняет соответствующей блок инструкций. Общий синтаксис оператора If имеет следующий вид:
if ( условие ) 
фрагмент кода
elseif ( условие )
фрагмент кода
else
фрагмент кода
Оператор If состоит из следующих элементов.

- If. Обязательная часть, проверяющая условие.

Если условие истинно, выполняется первый фрагмент кода. После выполнения операторов этого блока интерпретатор РНР переходит к обработке следующего за If оператора. Если условный оператор содержит также блок Elseif или Else, они пропускаются.

Если условие ложно, первый фрагмент кода не выполняется и интерпретатор РНР переходит к обработке следующей за этим фрагментом инструкции, которой может оказаться блок Elseif, Else или любой другой оператор, следующий за If.

- ElseIf. Необязательный раздел оператора If. При желании можно использовать несколько разделов Elseif. В этих разделах тоже проверяется истинность некоторого условия.

Если условие истинно, выполняется соответствующий фрагмент кода.
После выполнения всех операторов этого фрагмента РНР переходит к обработке следующего за If оператора. Если условный оператор содержит несколько блоков Elseif и Else, они игнорируются.

Если условие ложно, соответствующий фрагмент кода не выполняется и РНР переходит к обработке следующего блока оператора If, а при его отсутствии — к следующему за If оператору.

- Else. Этот раздел тоже является необязательным. При этом в рамках одного оператора If блок Else можно использовать только один раз. В блоке Else выполняется фрагмент кода, если все условия, содержащиеся в предыдущих блоках оператора If, ложны.

Условный оператор If можно использовать в другом условном операторе. Такое действие называется вложением.

Оператор Switch

Иногда имеется список условий, для каждого из которых необходимо выполнить свой набор операторов. Именно для таких ситуаций и предназначен оператор Switch.

Оператор Switch проверяет значение некоторой переменной, и если оно совпадает с имеющимся в перечне, выполняются соответствующие операторы. Общий синтаксис инструкции Switch имеет следующий вид:
switch( $имя_переменной ) {
case значение1: фрагмент кода; [break;]
case значение2: фрагмент кода; [break;]
...
case значениеN: фрагмент кода N; [break;]
[default: команды_по_умолчанию; [break]]
}
При выполнении оператора Switch интерпретатор PHP пытается найти строку Case, содержащую значение, равное значению переменной $имя_переменной. Если такая строка обнаружена, выполняется соответствующий фрагмент кода до оператора Break. Если же найти такую строку не удалось, выполняется фрагмент кода, следующий после ключевого слова Default. В операторе Switch можно задавать любое количество вариантов. При этом использование ключевого слова Default не обязательно, но при его наличии строку Default обычно ставят в конце оператора Switch. Однако для интерпретатора РНР это не имеет значения.

Необходимо обратить внимание на операторы Break, расположенные в конце каждого блока Case. Если бы не они, интерпретатор РНР продолжал бы выполнять операторы либо до следующего оператора Break, либо до конца инструкции Switch. Это касается всех блоков Case, кроме последнего.

Повторение действий с помощью циклов

Циклы очень часто используются в сценариях для многократного выполнения некоторых действий. При этом операции цикла повторяются либо некоторое наперед заданное количество раз, либо до выполнения определенных условий. В языке РНР существуют три типа циклов.

Цикл For

Традиционный цикл For основан на счетчике. Сначала осуществляется инициализация переменной-счетчика, потом указывается ее конечное значение и определяется способ изменения состояния счетчика после выполнения набора действий. Общий синтаксис цикла For имеет следующий вид:
for ( начальное_значение; конечное_условие; инкремент ) 
{
фрагмент кода;
}
Начальное значение определяет переменная-счетчик цикла. Конечное условие определяет конечное значение счетчика. Цикл выполняется до тех пор, пока счетчик не достигнет этого значения. Инкремент являет собой выражение, которое определяет, на какую величину будет изменяться счетчик.

Один цикл For можно использовать внутри другого.

Цикл While

Цикл While выполняет заданные действия до тех пор, пока истинно определенное условие. Этот вид цикла работает следующим образом.

1. Задается условие.

2. Это условие проверяется перед началом каждой итерации.

3. Если условие истинно, цикл продолжает выполняться, в противном случае - завершается.

Общий синтаксис цикла While имеет следующий вид:
while ( условие ) 
{
фрагмент кода;
}
Цикл Do..While

Цикл Do..While очень схож с циклом While и выполняется до тех пор, пока истинны определенные условия. Однако в цикле Do..While условие проверяется не перед началом каждой итерации, а после ее завершения.

Общий синтаксис цикла Do..While имеет следующий вид:
do 
{
фрагмент кода;
} while ( условие );
Прерывание циклов

Иногда необходимо прервать выполнение цикла. В языке РНР это можно сделать двумя способами.

- Оператор Break полностью прерывает выполнение цикла.

- Оператор Continue прерывает выполнение текущей итерации и переходит к следующей, если соответствующее условие выполнено.

Операторы Break и Continue обычно применяются в условных операторах. В частности, инструкция Break чаще всего используется в конструкции Switch.

Добавить комментарий

Имя:
Текст комментария: