PHP-4 Эффективная работа


If
While
Do..while
For
Foreach
Break
Continue
Switch
Альтернативный синтаксис представления управляющих структур
Declare
Require
Include
Require_once()
lnclude_once()

Любая программа на PHP состоит из последовательности операторов, которые могут представлять собой операторы вычисления нового значения некоторой переменной, вызовы функций, циклы, условные операторы и т. д. Каждый оператор обычно состоит из выражения, которое заканчивается точкой с запятой. Кроме того, операторы могут быть объединены в вычислительные блоки, которые ограничены фигурными скобками так же, как в Perl или Си. По большому счету, такой вычислительный блок может рассматриваться (и рассматривается) как один большой оператор. В этой главе мы рассмотрим, каким образом организуется управление вычислительным процессом программ, составленных из таких операторов.

6.1. If

Конструкция if, без сомнения, является одним из наиболее важных механизмов в большинстве языков программирования, и РНР не является исключением из этого правила. If позволяет реализовать условное выполнение фрагментов кода. Реализация конструкции if в РНР ничем не отличается от Си:

if (expr)
       statement

Как указывалось в разделе 3.3, выражение ехрг оценивается в логическом контек- сте. Если результат оценки интерпретируется как TRUE, PHP-машина выполнит оператор statement, а если результат интерпретируется как FALSE, этот опера- тор будет просто проигнорирован.

В приведенном ниже примере текстовое сообщение будет сгенерировано только в том случае, если переменная $ а больше, чем $b:

if ($а > $b)
       echo "А больше чем Б";

Как видите, одиночный (элементарный) оператор размещается после if безо всякого дополнительного оформления. Если же вам необходимо при соблюдении некоторого условия выполнить последовательность действий, вы попросту превращаете эту последовательность в вычислительный блок, закрывая его фигурными скобками, и «скармливаете» этот составной оператор конструкции if:

If ($a > $b) {
       echo "А Больше чем Б, заменяем...";
       $b = $a;

совет
       Конечно же, ничто не мешает вам поместить внутрь составного оператора дополнительные конструкции if.

6.1.1. Else

Нередко возникает ситуация, когда при выполнении некоторого условия вы хотите выполнить одну последовательность действий, а при его несоблюдении - другую. В этом случае вам на помощь придет конструкция else. Вычислительный блок (или оператор), следующий за el se, выполняется в том случае, если условие оператора if не было выполнено (то есть интерпретируется как false). Например, в приведенном ниже фрагменте одно из сообщений будет выведено в любом случае:

if ($а > $b) {
       print "А больше чем Б";
} else {
       print "А не больше чем Б";

совет
       Блок, следующий за else, выполняется только в том случае, когда условие оператора if или любой из следующих за ним конструкций elsif (см. ниже) интерпретируется как false.

6.1.2. Elseif

Эта конструкция, как и следует из ее названия, представляет собой комбинацию if и else и позволяет задать альтернативное условие, проверяемое в случае неудачного завершения проверки условия i f или аналогичных блоков elseif. Однако в отличие от е1s e выполнение следующего за этим ключевым словом вычислительного блока будет производиться только в том случае, если условие elsif интерпретируется как true. Давайте взглянем на пример:

if ($а > $b) {
          print "А больше чем Б";
       } elseif ($а == $b) {
          print "А равно Б";
       } else {
          print "А меньше чем Б";
}

Вы можете вложить в один оператор if несколько секций elsif. Выполняться будет первая по порядку следования секция, для которой проверка условия вернет true.

совет
       Выполнение вычислительного блока, следующего за elsif, производится только в том случае, когда все условия, предшествующие данному условию, интерпретируются как false, а условие блока elsif — как true.

6.2. While

Конструкция whi le представляет собой классическое средство организации циклов, которое работает точно так же, как и в Си. Эта конструкция имеет следующий формат:

while (expr) statement

Смысл этой конструкции весьма прост. Оператор (или последовательность операторов, заключенная в вычислительный блок) statement выполняется, пока значение условия ехрr равно true. Как только значение условия станет равно false, выполнение цикла прекращается и программа продолжает выполнение. Поскольку условие проверяется в начале выполнения цикла, может оказаться так, что если изначально условие равно false, цикл не будет выполнен ни разу. Изменение значения ехрr в процессе выполнения тела цикла не приводит к его преждевременному завершению: значение условия проверяется только перед очередной итерацией. Так же как и для оператора if, вы можете использовать альтернативный синтаксис группирования операторов (см. раздел 6.9): while (expr): statement ... endwhile;

Вот простой пример использования цикла while, в котором осуществляется вывод на печать последовательности чисел от 1 до 10:

$i = 1;
while ($i <= 10) {
       print '$i++;

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

6.3. Do..while

Синтаксис цикла do. .while представляет собой «вывернутый наизнанку» while:

do
       statement
while ( ехрR) ;

Циклы do. .while в целом весьма похожи на рассмотренные выше циклы while и отличаются лишь тем, что проверка истинности условия проверяется не до, а после выполнения тела цикла. Это означает, что в отличие от цикла while при использовании данного оператора тело цикла гарантированно будет выполнено хотя бы один раз.

примечание
       Собственно говоря, это обстоятельство и влияет на то, какой цикл надо использовать — while или do..while.

После проверки условия действия оператора ничем не отличается от-whi 1е: если условие интерпретируется как true, повторяется выполнение тела цикла, а если как false — управление программой передается дальше.

Вот пример использования этого оператора:
$i = 0;
do {
          print $i;
} while ($i>0);

Поскольку переменная $ i равна О, то при проверке условия будет получено значение false, а это означает, что тело цикла будет выполнено только один раз и завершится после печати «О».

Для решения некоторых изощренных задач можно использовать «цикл с прерыванием» за счет использования оператора break (см. раздел 6.6). Пример применения подобного подхода приведен ниже:

do {
       if ($i < 5) {
               print "i недостаточно велико";
               break;
       }
       $i *= $factor;
       if ($i < $minimum_limit) {
               break;
       }
       print "Значение i нам подходит ";

               ...обработка i...
} while(0);

6.4.For

Циклы for относятся к наиболее старым и заслуженным видам циклов, поэтому их синтаксис наиболее сложен и многофункционален:
for (exprl; expr2; ехрrЗ) statement

Первое выражение, exprl, оценивается перед началом выполнения цикла и определяет начальное значение счетчика цикла — специальной переменной, определяющей условие повтора выполнения тела цикла.

Второе выражение, ехрr2, оценивается в начале каждой итерации. Если оно интерпретируется как true, производится выполнение тела цикла statement. Если же результат оценки ехрr2 равен false, выполнение оператора завершается.

В конце каждой итерации выполняется оценка значения выражения ехрrЗ. Обычно это выражение содержит операторы, необходимые для модификации счетчика цикла.

Любое из этих выражений может быть пустым. Если пустым окажется ехрr2, это означает, что цикл будет выполняться «вечно», поскольку PHP-машина интерпретирует его как true.

Вот несколько вариантов использования оператора for, в каждом из которых мы пытаемся напечатать числа от 1 до 10:

/* Вариант 1: традиционный */

for ($i = 1; $i <= 10; $i++) {
       print $i ;

/* Вариант 2: прерывание цикла по break */
for ($i = 1; ;$i++) {
       if ($i > 10) {
               break;
       }
       print $i ;

/* Вариант 3: for как оболочка для if */

$i = 1;
for (;;) {
       if ($i > 10) {
               break;
       }
       print $ i ;

/* Вариант 4: вся функциональность в ехрrЗ */
for ($i = 1; $i <= 10; print $i , $i++) ;

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

совет
       РНР поддерживает альтернативный синтаксис представления цикла (см. раздел 6.9); for (expr1; ехрr2; ехрrЗ): statement;...; endfor.
назад
далее

Сайт управляется системой uCoz