- •Федеральное агентство по образованию рф
- •Лабораторная работа № 4 методические указания «Конструкции языка web-программирования php 4»
- •1. Арифметические операции
- •2. Строковые операции
- •3.Операции присваивания
- •4.Операции инкремента и декремента
- •5.Битовые операции
- •6.Операции сравнения
- •7.Операция эквивалентности
- •8.Логические операции
- •Вложенные конструкции if-else
- •Ход работы:
- •Контрольные вопросы.
7.Операция эквивалентности
В РНР версии 4 появился новый оператор сравнения — тройной знак равенства ===, или оператор проверки на эквивалентность. Как мы уже замечали ранее, РНР довольно терпимо относится к тому, что строки неявно преобразуются в числа, и наоборот. Например, следующий код выведет, что значения переменных равны:
$а=10;
$b="10";
if($a==$b) echo "а и b равны";
И это несмотря на то, что переменная, $а представляет собой число, а $b - строку.
Внимание.
$а=0; // ноль
$b=""; // пустая строка
if($a==$b) echo "а и b равны";
Хотя $а и $b явно не равны даже в обычном понимании этого слова, программа заявит, что они совпадают. Почему так происходит? Дело в том, что если один из операндов логического оператора может трактоваться как число, то оба операнда трактуются как числа. При этом пустая строка превращается в 0, который затем и сравнивается с нулем. Неудивительно, что оператор echo срабатывает.
Проблему решает оператор эквивалентности === (тройное равенство). Он не только сравнивает два выражения, но также их типы. Перепишем наш пример с использованием этого оператора:
Пример
$а=0; // ноль
$b=" "; // пустая строка
if($a===$b) echo "а и b равны";
Вот теперь ничего напечатано не будет. Но возможности оператора эквивалентности идут далеко за пределы сравнения "обычных" переменных. С его помощью можно сравнивать также и массивы, объекты и т. д. Это очень удобно. пример:
$а=аггау('а'=>'ааа');
$b=array('b'=>'bbb');
if ($a==$b) echo "С использованием == a=b<br>";
if ($a===$b) echo "С использованием === a=b<br>";
Если запустить представленный код, то выведется первое сообщение, но не второе. Произойдет это по той причине, что, как мы уже говорили, операнды-массивы преобразуются в строки Array, которые затем и будут сравниваться. Оператор === лишен этого недостатка, поэтому работает верно. Разумеется, для оператора === существует и его антипод — оператор !== (он состоит также из трех символов!).
8.Логические операции
Эти операции предназначены исключительно для работы с логическими выражениями и также возвращают false или true.
| а — истина, если, а ложно, и наоборот.
а && b — истина, если истинны и а, и b.
a | | b — истина, если истинны или а, или b, или они оба.
Следует заметить, что вычисление логических выражений, содержащих такие операции, идет всегда слева направо, при этом, если результат уже очевиден (например, false&&4 то—gо всегда дает false), то вычисления обрываются, даже если в выражении присутствуют вызовы функций. Например, в операторе
$logic = 0&&(time()>100);
стандартная функция time () никогда не будет вызвана.
Будьте осторожны с логическими операциями — не забывайте про удваивание символа. Обратите внимание, что, например, | и | | — два совершенно разных оператора, один из которых может потенциально возвращать любое число, а второй — только false и true.
Оператор отключения предупреждений
Выдаче ясных и адекватных сообщений о возникших во время выполнения сценария ошибках разработчики РНР заслуженно уделили особое внимание. Наверное, вы уже запускали несколько простых PHP-программ из браузера и имели удовольствие видеть, что все ошибки выводятся прямо в окно браузера вместе с указанием, на какой строке и в каком файле они обнаружены. Остается только в редакторе найти нужную строку и исправить ошибку. Весьма удобно!
Замечание
К сожалению, РНР — чуть ли не первый язык, который выводит предупреждения в браузер, а не в файлы журналов. Если вы работали некоторое время с таким языком, как Perl, то, наверное, уже успели устать от бесконечных верениц "500-х ошибок", которые Perl выдает при малейшей оплошности в сценарии. Теперь можете вздохнуть с облегчением: РНР никогда не выдаст сообщение о 500-й ошибке, что бы ни произошло. РНР устроен так, что ранжирует ошибки и предупреждения по четырем основным "уровням серьезности". Вы можете настроить его так, чтобы он выдавал только ошибки тех уровней, которые вас интересуют, игнорируя остальные (то есть, не выводя предупреждений о них). Рекомендуется всегда включать контроль ошибок no-максимуму, т. к. это может существенно упростить отладку программ. Допустим, мы так и поступили, и теперь РНР "ругается" даже на незначительные ошибки. Однако не всегда это бывает удобно. Более того, иногда предупреждения со стороны интерпретатора просто недопустимы. Рассмотрим, например, такой сценарий (листинг 3.4):
Листинг 3.4. Навязчивые предупреждения
<form action=test .php>
<input type=submit name="doGo" value="Click! ">
</form>
<?
if($doGo) echo "Вы нажали кнопку!";
Мы хотели сделать так, чтобы при нажатии на кнопку выдавалось соответствующее сообщение, но вот беда: теперь при первом запуске сценария РНР выдаст предупреждение о том, что "переменная $dodick не инициализирована". Ну не отключать же из-за такой мелочи контроль ошибок во всем сценарии, не правда ли? Как бы нам временно блокировать проверку ошибок, чтобы она не действовала только в одном месте, не влияя на остальной код?
Вот для этого и существует оператор @ (отключение ошибок). Если разместить данный оператор перед любым выражением (возможно, включающим вызовы функций, генерирующих предупреждения), то сообщения об ошибках в этом выражении будут подавлены и в окне браузера не отображены.
Замечание
На самом деле текст предупреждения сохраняется в переменной РНР
$php_errormsg, которая может быть в будущем проанализирована. Эта возможность доступна, если в настройках РНР включен параметр track_errors (по умолчанию он как раз и установлен в yes).
Вот теперь можно переписать предыдущий пример, грамотно отключив надоедливое предупреждение (листинг 3.5).
Листинг 3.5. Отключение навязчивого предупреждения
<form action=test .php>
<input type=submit name="doGo" value="Click! ">
</form>
<?
if(@$doGo) echo "Вы нажали кнопку!";
?>
Как можно заметить, листинг 7.5 отличается от листинга 7.4 всего лишь наличием оператора @ внутри скобок инструкции if .
Пример.
<?
$a=12;
echo @$a
?>
Теоретическая часть. Конструкции (инструкции) языка PHP.
Инструкция if-else
Начнем с самой простой инструкции — условного оператора. Ее формат
таков:
if(логическое_выражение)
инструкция_1;
else
инструкция_2;
Действие - следующее: если “логическое_выражение” истинно, то выполняется инструкция_1, а иначе — инструкция_2. Как и в любом другом языке, конструкция else может опускаться, в этом случае при получении должного значения просто ничего не делается.
Пример:
<?
$a=2010;
$b=2011;
if($a==$b)
{
echo "Переменные равны";
}
else
{
echo "Переменные НЕ равны!!";
}
?>
Задание. Напишите код программы, проверяющий две переменные на неравенство. Неравенство в PHP обозначается так: $x!=$y
Двойное (составное) условия If-Else
Пример
<?
$a=4;
$b=5;
$с=6;
$d=9;
if($a != $b and (&&) $c != $d)
{
echo "Переменные не равны";
}
else
{
echo "Переменные равны!!";
}
?>
Задание. Предлагается поэкспериментировать со знаками « < », « > », « >= », « <= »
Пример
<?
$a=1;
$b=2;
$с=7;
$d=7;
if($a != $b or (||) $c != $d)
{
echo "Переменные не равны";
}
else
{
echo "Переменные равны!!";
}
?>
Задание. Предлагается поэкспериментировать со знаками « < », « > », « >= », « <= »