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

Очень просто о PHP, от элементарных понятий до ООП - часть 2. Операторы сравнения, логические выражения


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

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


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

Теперь, раз уж вы знаете основы, настало время сосредоточиться на более приятных возможностях PHP - автоматически получать данные, введённые пользователем в веб-форму и превращать их в переменные PHP.

Форма...

Формы всегда были наиболее быстрым и лёгким способом добавить интерактивность на веб-сайт. Форма позволяет узнать у покупателя понравился-ли ему ваш товар, обычным посетителям комментировать ваш сайт, а красивым девочкам оставлять свой номер телефона. И PHP позволяет упростить обработку данных из таких форм, как мы увидим на первом примере. Этот пример содержит два файла, в одном - HTML-форма (файл называется form.htm), а в другом - обработка формы (файл - message.php).

Содержимое form.htm:

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

<form action="message.php" method="post">
Введите ваше сообщение: <input type="text" name="msg" size="30"> 
<input type="submit" value="Отправить"> </form> </body> </html>

Важную роль играет тег <form>. Как вы, наверное, знаете, атрибут "action" тега <form> указывает имя скрипта на сервере (в этом случае message.php), который будет обрабатывать данные, введённые в форму. Атрибут "method" указывает как будет передана информация.

...и функция

А теперь вторая половина головоломки: скрипт message.php. Он читает данные, отправленные пользователем и кое-что делает с ними:

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

<?php
// получаем данные 
$input = $_POST['msg'];

// используем их
echo "Вы ввели: <i>$input</i>";
?>

</body>
</html>

Когда вы вводите данные в файл form.htm (например, "Бу!") и отправляем их, обработчик формы message.php прочитает их и покажет вам ("Вы ввели: Бу!"). Как видно, после отправки формы скрипту PHP, все пары переменная-её значение внутри этой формы автоматически будут доступны скрипту при использовании специального контейнера PHP "$_POST". Вы можете получить значения переменной формы используя её имя внутри контейнера $_POST: $input = $_POST['msg']

Вообще-то PHP поддерживает и метод отправки формы GET. Всё что вам надо, это изменить атрибут формы "method" с " post " на "get"и получить данные из $_GET вместо $_POST. Переменные $_GET и $_POST - массивы PHP, которые мы скоро изучим. Не волнуйтесь о них сейчас, поволнуемся позже! :)

Просто удостоверьтесь, что у вас получается извлечь переменную из отправленной формы при помощи PHP, и читайте статью дальше.

Работаем с умом

Скрипты, которые мы изучали, довольно глупы. Всё что они делают - это складывают числа и строки и печатают то, что мы ввели. Для того, чтобы добавить скриптам немножко "ума", вам надо знать как создать то, что придурки в очках называют "условное выражение" - выражение, которое позволяет вашему скрипту произвести несколько возможных действий в зависимости от результата сравнения. И поскольку основа условного выражения - сравнение, то вам сначала требуется узнать как сравнивать две переменных и определять равны они или нет.

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

<?php
/* определим какие-нибудь переменные */
$mean = 9; 
$median = 10; 
$mode = 9; 

// оператор "меньше" 
// возвращает истину если левая сторона выражения меньше правой,
// у нас получится истина 
$result = ($mean < $median); 
print "результат: $result<br />"; 

// оператор "больше" 
// возвращает истину если левая сторона выражения больше правой,
// у нас получится ложь 
$result = ($mean > $median); 
print "результат: $result<br />"; 

// оператор "меньше или равно"
// возвращает истину если левая сторона выражения меньше или равна правой,
// у нас получится ложь 
$result = ($median <= $mode); 
print "результат: $result<br />"; 

// оператор "больше или равно"
// возвращает истину если левая сторона выражения больше или равна правой,
// у нас получится истина
$result = ($median >= $mode); 
print "результат: $result<br />"; 

// оператор "равно" 
// возвращает истину если левая сторона выражения равна правой
// у нас получится истина
$result = ($mean == $mode); 
print "результат: $result<br />"; 

// оператор "не равно"
// возвращает истину если левая сторона выражения не равна правой
// у нас получится ложь
$result = ($mean != $mode); 
print "результат: $result<br />"; 

// оператор "не равно"
// возвращает истину если левая сторона выражения не равна правой
// у нас получится ложь
$result = ($mean <> $mode); 
print "результат: $result<br />";
?>

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

В версии PHP 4.0 был добавлен новый оператор "= = =", который позволяет сравнить и значения переменных, и их тип. Посмотрим это в примере:

<?php
/* определим две переменных */
$str = '10'; 
$int = 10; 

/* вернёт истину, так как обе переменных содержат одно значение */ 
$result = ($str == $int); 
print "результат: $result<br />"; 

/* вернёт ложь, так как типы переменных разные, хотя значения одинаковы */ 
$result = ($str === $int); 
print "результат: $result<br />"; 

/* вернёт итсину, так как типы и значения переменных одинаковы */ 
$anotherInt = 10; 
$result = ($anotherInt === $int); 
print "результат: $result<br />";
?>

Узнать больше об операторах сравнения можно на страницах сайта PHP: http://www.php.net/manual/en/language.operators.comparison.php

Вопросы логики

В дополнение к операторам сравнения, которые мы использовали, PHP также даёт возможность использовать четыре логических оператора, которые созданы для соединения логических операторов. Эти четыре оператора - логическое И, логическое ИЛИ, логическое ИЛИ-НЕ и логическое НЕ, как показано в следующем примере:

<?php

/* определим переменные */
$auth = 1; 
$status = 1; 
$role = 4; 

/* логическое И возвращает истину, если все условия истинны */ 
// у нас получится истина
$result = (($auth == 1) && ($status != 0)); 
print "результат: $result<br />"; 

/* логическое ИЛИ возвращает истину, если хотя-бы одно из условий истинно */ 
// у нас получится истина
$result = (($status == 1) || ($role <= 2)); 
print "результат: $result<br />"; 

/* логическое НЕ возаращает истину, если одно условие ложно */ 
// у нас получится ложь
$result = !($status == 1); 
print "результат: $result<br />"; 

/* логическое ИЛИ-НЕ возвращает истину если одно из условий истинно,
   или возвращает ложь, если оба условия истинны */ 
// у нас получится ложь 
$result = (($status == 1) xor ($auth == 1)); 
print "результат: $result<br />";

?> 

Логические операторы играют важную роль в построении условных выражений, поскольку они могут использоваться для простой связки условных выражений. Больше примеров вы можете посмотреть на страничке сайта PHP: http://www.php.net/manual/en/language.operators.logical.php.

Старше, мудрее

Теперь, раз мы изучили всё о логических операторах и операторах сравнения, можем приступить к условным выражениям. Как было сказано выше, условное выражение позволяет вам проверить является-ли выражение истинным или ложным и выполнить разные действия в зависимости от результата. В PHP самая простая форма условного выражения - оператор if():

if (условие) { 
  сделать что-то! 
}

Аргументом в скобках для if() является логическое выражение, которое вычисляется в истину или ложь. Если условие вычисляется в истину, выполняется весь код PHP внутри фигурных скобок {}, а если нет, тогда код внутри фигурных скобок будет пропущен. Исполняться будет код, который идёт за закрывающей скобкой.

Давайте посмотрим как выполняется условие if() в работе с формой. В следующем примере у пользователя спрашивается его возраст.

<html> 
<head></head>
<body>
<form action="ageist.php" method="post">
Введите ваш возраст: <input name="age" size="2">
</form>
</body>
</html>

В зависимости от введённого возраста (больше он 21 или меньше), будут выведены разные сообщения в скрипте ageist.php:

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

Если не это, то что?

В дополнение к оператру if(), PHP представляет конструкция if-else, которая используется для определения блока кода, который будет выполняться если условие if() окажется ложным.

if (условие) { 
  сделать это! 
}
else { 
сделать то!
}

С помощью такой конструкции мы можем упростить следующий пример - соединить два оператора if в один if-else:

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

Всё сложнее и сложнее

Если вас согревает надежда запутать людей, которые будут читать ваш код, вам понравится тройной оператор "?". Этот оператор, который делает ваши условные выражения почти непонятными, позволяет заменить конструкцию if-else одним выражением. Таким образом, вы можете сделать так:

<?php
if ($numTries > 10) { 
     $msg = 'Хода нет...'; 
    } 
    else { 
     $msg = 'Добро пожаловать!'; 
    }
?>

или, используя тройной оператор "?", сделать так:

<?php

$msg = $numTries > 10 ? 'Хода нет...' : 'Добро пожаловать!';

?>

PHP также позволяет вам "вкладывать" условные выражения одно в другое. Например:

<?php

if ($day == 'Пятница') { 
 if ($time == '2000') {
     if ($strana == 'UA') { 
         $eda = 'сальцо с хлебцом';
            }
        }
    }
?>

Более красивый способ написать этот пример:

<?php

if ($day == 'Пятница' && $time == '2000' && $strana == 'UA') { 
    $meal = 'сальцо с хлебцом'; 
}

?>

Новость дня!

PHP даёт возможность выбрать из множества вариантов: конструкцией if-elseif-else. Типичный блок выражения the if-elseif-else выглядит так:

<?php

if (первое условие истинно) { 
    делаем одно! 
    } 
elseif (второе условие истинно) { 
    делаем другое! 
    } 
elseif (третье условие истинно) { 
    делаем третье! 
    } 
  ... и так далее ... 
else { 
     последний вариант! 
}

?>

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

<html> 
<head></head>
<body> 
<h2>Меню на:</h2> 
<p> 
<form method="get" action="cooking.php"> 
<select name="day"> 
<option value="1">Понедельник/Среда 
<option value="2">Вторник/Четверг
<option value="3">Пятница/Суббота
<option value="4">Воскресенье
</select> 
<input type="submit" value="Отправить"> 
</form> 
</body> 
</html>

Как видно, это простая форма, которая позволяет выбрать день недели. Настоящая работа выполняется скриптом cooking.php:

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

<?php 
// получаем день из формы 
$day = $_GET['day']; 
// проверяем значение и действуем соответственно 
if ($day == 1) { 
    $special = 'Курица с бананами; 
    } 
elseif ($day == 2) { 
    $special = 'Картошка с помидором'; 
    } 
elseif ($day == 3) { 
    $special = 'Домашняя колбаска'; 
    } 
else { 
    $special = 'Пиво с чипсами'; 
} 
?>

<h2>Сегодня будет на обед:</h2> 
<?php echo $special; ?>

</body> 
</html>

В данном случае мы использовали управляющую структуру if-elseif-else для назначению разных значений меню каждой комбинации дней. Обратите внимание на то, что как только первое найденное условие окажется истинным, PHP выполнить его код, пропустит дальнейшие условия и перепрыгнет за последнюю строку блока if-elseif-else.

На сегодня всё. Если хотите узнать побольше о работе условных выражений, зайдите на страничку http://www.php.net/manual/en/language.control-structures.php.

В третьей части мы узнаем больше об управляющих структурах, других операторах и странных скриптах - не пропустите!

Оригинал статьи: http://www.openwarez.org.ua/books/632-php101-2


В избранное