Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Очень просто о PHP, от элементарных понятий до ООП Часть 3: Операторы и управляющие структуры PHP, циклы


Это перевод третьей статьи из обучающего курса по языку программирования PHP. Прочитав данный цикл статей, вы получите возможность легко писать программы на языке PHP. Здесь мы узнаем ещё несколько новых логических оператора, а также узнаем что такое циклы в PHP.

Итак, продолжим:


Во второй статье данного курса мы разобрались с простыми управляющими структурами и операторами языка. Также мы увидели как PHP может быть использован чтобы обрабатывать данные, введённые в веб-форму. В этой статье мы углубимся в операторы и управляющие структуры PHP и рассмотрим два новых оператора, альтернативных семейству условных выражение if-else(), а также кое-какие интересные циклы PHP. Продолжайте читать, это интересно!

Переключаем всё что можно

Альтернативой семейству управляющих структур if-else() в PHP является выражение switch, которое делает почти то-же самое. Оно выглядит примерно так:

<?php

switch (переменная) {
case(первое условие)//в случае, если первое условие истинно:
следать это!
case(второе условие)//в случае, если истинно второе условие:
сделать то!
...и так далее...
} ?>

В зависимости от переменной выполняетя подходящий под условие блок case(). Также может быть создан блок по умолчанию, который выполнится если ни одно из перечисленных условий не подходит.

Я сделаю это более понятным, переписав наш более ранний пример для условия использования кода switch():

<html>
    <head></head>
    <body>

<?php
  //получим данные из формы
    $day = $_GET['day'];
    // проверим данные и выберем подходящее меню
    switch ($day) {
    case 1:
    $special = 'Курица с бананами';
    break;
    case 2:
    $special = 'Огурцы с повидлом';
    break;
    case 3:
    $special = 'Шкварки и компот';
    break;
    default:
    $special = 'Таранка и морс';
    break;
    }
  ?>

  <h2>Сегодня мы можем вам предложить:</h2>

    <?php echo $special ?>

    </body>
    </html>

Здесь следует сделать пару важных замечаний:

  • Ключевое слово "break" используется для выхода из блока условий switch() и немедленного перехода к следуюим за ним строкам.
  • Ключевое слово "default" используется для выполнения набора выражений по умолчанию, когда переданная в switch() переменная не удовлетворяет ни одному из перечисленных в блоке условий

Обычная ошибка новичка - забыть поставить "break" в конце каждого блока case. Запомните, что если вы забудете выйти из блока посредством break, PHP будет продолжать выполнять код в следующем блоке case.

Узнать побольше об управляющей структуре switch вы можете на сайте PHP: http://www.php.net/manual/en/control-structures.switch.php.

Условный креатив

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

Как это сделать? Просто. Всё что вам надо - это назначить имя элементу управления формы submit, а затем проверить его в специальном контейнере $_POST наличие этой переменной при загрузке скрипта. Если она есть, значит форма уже отправлена и вы можете обрабатывать данные, а если нет, значит пользователь ещё не отправлял её и поэтому вам надо создать незаполненную форму. Итак, проверяя наличие или отсутствие переменной submit, хороший PHP-программист может использовать один PHP-скрипт и для создания начальной формы, и для вывода информации после её отправки, по мере необходимости.

Вот простой пример:

<html>
    <head></head>
    <body>

  <?php
    /* если переменной "submit" не существует, занчит форма 
  не была отправлена - показываем начальную страницу */
    if (!isset($_POST['submit'])) {
    ?>

  <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    Введите ваш возраст: <input name="age" size="2">
  <input type="submit" name="submit" value="Отправить">
  </form>

  <?php
    }
    else {
    /* если переменная "submit" существует, значит форма была отправлена
  - просмотрим и обработаем данные */
    // покажем результат
     $age = $_POST['age'];
     if ($age >= 21) {
      echo 'Заходите, вас ждёт развесёлый вечерок!';
     }
     else {
      echo 'Вы слишком молоды дял нашего клуба, заходите когда повзрослеете';
     }
    }
    ?>

  </body>
</html>

Как вы видите, скрипт содержит две страницы: начальную, с пустой формой и конечную, созданную после нажатия кнопки "Отправить". Чтобы определить какую страницу требуется показать, скрипт проверяет наличие переменной $_POST['submit']. Если он её не находит, то решает что форма не была отправлена и показывает запрос возраста. Если форма была отправлена, тот-же скрипт будет вызван для обработки данных формы. Переменная $_POST['submit'] будет установлена, так что PHP покажет не начальную страницу, а результирующее сообщение.

Заметьте, что для того, чтобы это сработало, ваша кнопка "Отправить" должна иметь имя и вы должны проверить её наличие в первом условном выражении. Также, если вам интересно, $_SERVER - это специальная переменная PHP, массив, которая всегда содержит информацию сервера, такую как путь и имя выполняющегося в настоящее время скрипта.

Далее рассмотрим циклы.

Друг за дружкой

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

Недавно мы рассмотрели несколько логических операторов и операторов сравнения, которые помогли нам построить условные выражения. Поскольку, эта часть лекции посвящена циклам, то настало подходящее время познакомиться с PHP-операторами автоинкремента и автодекремента, которые придётся использовать в данном контексте очень часто.

Оператор автоинкремента - оператор PHP, созданный для увеличения значения переменной, к которой он присоединён, на единицу. Он обозначается двумя знаками плюса: "++". Следующий пример кода должен это помочь в его понимании:

<?php

// определим $itog равным 10
$itog = 10;
// увеличим его
$itog++;
// теперь $itog равен 11
echo $itog;

?>

Таким образом, $total++ функционально то-же самое что и $total = $total + 1.

Существует и соответствующий оператор автодекремента:

<?php

// определим $itog равным 10
$itog = 10;
// уменьшим его
$itog--;
// теперь $itog равен 9
echo $itog;

?>

Эти операторы часто используются в циклах для изменения значения счётчиков.

Считаем квадраты

Первый, самый простой, цикл в PHP - это цикл while(), который выглядит вот так:

while (пока это условие истинно) {
делаем это!
}

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

Простой пример, который демонстрирует цикл while():

<html>
<head></head>
<body>
<form action="squares.php" method="POST">
Напечатать квадраты между 1 и <input type="text" name="limit" size="4" maxlength="4">
<input type="submit" name="Отправить" value="Go">
</form>
</body>
</html>

Это простая форма, которая просит пользователя ввести число. Когда форма будет отправлена, запущенный скрипт PHP должен взять это число и вывести все квадраты между единицей и ним. С циклом while() это будет просто:

<html>
<head></head>
<body>

<?php
// установим переменную из данных формы
$verhLimit = $_POST['limit'];
$nizrLimit = 1;
// будем печатать квадраты чисел, до тех пор пока числа не сравняются
while ($nizLimit <= $verhLimit) {
 echo ($nizLimit * $nizLimit).'&nbsp;';
 $nizLimit++;
}
// обозначим завершение
echo 'Конец!';
?>

</body>
</html>
  

Этот скрипт считает квадраты чисел до тех пор, пока значения $nizLimit и $verhLimit не станут равны.

Сначала посмотрите, вопросы - позже

Цикл while() выполняет набор выражения до тех пор, пока условие истинно. Но что случится, если условие будет истинным при первом повторе? В предыдущем примере, если вы введёте в форме число 0, цикл while() не будет выполнен ни разу. Попробуйте сами и вы поймёте что я имею в виду.

Если вам требуется выполнить набор выражений хотя-бы один раз, PHP предлагает вам цикл do-while().

Он выглядит вот так:

do {
сделаем это!
} while (пока условие истинно)

Для лучшего понимания рассмотрим разницу между циклами while() и do-while() на простом примере:

<?php

$x = 100;
// цикл while
while ($x == 700) {
    echo "Работаем...";
        break;
}

?>

В этом случае неважно сколько раз вы будете запускать скрипт, у вас ничего не выведется, так как значение $x не равно 700. Но если вы используете эту версию скрипта:

<?php

$x = 100;
// цикл do-while
do {
echo "Работаем...";
break;
} while ($x == 700); ?>

, у вас будет одна строка вывода, так как один раз код внутри блока do будет выполнен.

Теперь давайте пересмотрим предыдущий скрипт так, чтобы он выполнялся хотя-бы один раз, независимо от того, какое значение вы ввели в форме:

<html>
<head></head>
<body>

<?php
      

// возьмём переменные из формы $verhLimit = $_POST['limit']; $nizLimit = 1; // будем печатать квадраты то тех пор, пока $nizLimit не станет равно $verhLimit do { echo ($nizLimit * $lowerLimit).'&nbsp;'; $lowerLimit++; } while ($lowerLimit <= $upperLimit); // напечатаем сообщение об окончании echo 'Конец!'; ?> </body> </html>

Итак, конструкция цикла do-while() - такая, что выражения внутри цикла сначала выполняются один раз, а затем проверяется условие. Это означает, что выражения внутри скобок будут выполнены по меньшей мере один раз.

Прочитать больше циклах while() и do-while() вы можете на сайте PHP: http://www.php.net/manual/en/control-structures.while.php и http://www.php.net/manual/en/control-structures.do.while.php.

Делаем это по порядку

Оба цикла while() и do-while() повторяются множество раз до тех пор, пока условное выражение остаётся истинным. Но что, если вам надо исполнить набор выражений определённое число раз - например, напечатать тринадцать последовательных чисел, или повторить определённый набор ячеек таблицы <td> пять раз? В таких случаях хорошие программисты испольуют цикл for().

Обычно цикл for() выглядит примерно так:

for (начальное значение счётчика; условие; новое значение счётчика) {
      делаем что-то!
}

Похоже на бред? Давайте разберёмся... Счётчик в PHP - это переменная с назначенным числовым значением, содержит количество повторов цикла. Перед каждым выполнением цикла проверяется условие. Если оно истинно, цикл будет выполнен ещё один раз, а счётчик соответственно увеличится; если условие вычислится в ложное, то цикл будет прерван и буду выполняться следующие после него строки.

Вот простой пример как можно использовать такой цикл:

<html>
<head>
<basefont face="Arial">
</head>
<body>

<?php
// определим число
 $number = 13;
 // используем цикл для расчёта таблички умножения для этого числа
 for ($x = 1; $x <= 10; $x++) {
  echo "$number * $x = ".($number * $x)."<br />";
 }
?>

</body>
</html>
 

Первым делом в примере мы определили число, которое будет использовано в таблице умножения. Я взял число 13 - без причины, просто так.

Далее мы создали цикл for() с переменной $x как счётчиком, установленным в единицу и указали что цикл должен выполняться не больше десяти раз. Оператор автоинкремента (рассмотренный раньше) автоматически увеличивает счётчик на единицу каждый раз при выполнении цикла. Внутри цикла счётчик умножается на число, а затем используется echo() для вывода результата.

Переходим к таблицам

Как вы только-что видели, цикл for() очень интересеная и полезная программная конструкция. Следующий пример показывает её полезность так, что она должна понравиться любому HTML-программисту.

<html>
<head></head>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Введите число строк <input name="rows" type="text" size="4">
и колонок <input name="columns" type="text" size="4">
<input type="submit" name="submit" value="Вывести таблицу">
</form>

<?php
if (isset($_POST['submit'])) {
 echo "<table width = 90% border = '1' cellspacing = '5' cellpadding = '0'>";
   // возьмём переменные из ввода
   $rows = $_POST['rows'];
   $columns = $_POST['columns'];
   // цикл создания строк
   for ($r = 1; $r <= $rows; $r++) {
    echo "<tr>";
    // цикл создания колонок
    for ($c = 1; $c <= $columns;$c++) {
     echo "<td>&nbsp;</td> ";
    }
    echo "</tr> ";
    }
    echo "</table> ";
}
?>
</body>
</html>

Как вы увидите если попробуете сделать тот-же HTML-код руками, цикл PHP for() сэкономит вам кучу времени! А ещё он хорошо смотрится - загляните в исходный код динамически созданной этим скриптом таблицы и вы увидите красиво отформатированный код с переводами строк в конце каждой ячейки таблицы и строки. Это волшебство случилось благодаря тому, что перевод строки автоматически выводится после каждого вызова оператора echo().

Подробнее почитать о циклах for() вы можете на сайте PHP: http://www.php.net/manual/en/control-structures.for.php.

Циклы часто используются в работе с одним из комплексных типов данных PHP, которые называются массивами.

Это целая тема сама по себе, и мы обсудим её в следующем разделе этого курса. Затем я покажу вам как массивы, циклы и формы работают вместе, что позволяет создавать комплексные веб-формы не сложнее чем кушать пирожки.

Это и другое читайте в четвёртой части!

Наш сайт: http://www.figli-migli.org.ua/


В избранное