Создание сложных проверочных выражений с помощью логических операторов 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Создание сложных проверочных выражений с помощью логических операторов



Логические операторы используются для тестирования логических значений. Оператор " или " (два символа конвейерной обработки (||)либо просто символ or) возвращает true, если либо правый, либо левый операнд содержит true. Таким образом,

true || false

возвращает true.

Оператор " и " (два символа амперсанда (&&) либо символы and) возвращает true, только если и правый, и левый операнды равны true. Таким образом,

true && false

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

($х > 2) && ($х < 15)

возвращает true, если значение переменной больше 2, но меньше 15. Скобки показаны только для большей удобочитаемости кода. В таблице 6.8 перечислены все логические операторы РНР.

Таблица 6.8. Логические операторы

Оператор Название Возвращает true, если … Пример Результат
||или or ИЛИ Левая или правая часть равна true true || false   true
xor Исключающее ИЛИ Левая или правая часть равна true, но не обе одновременно true xor true false
&& или and И Левая и правая часть равна true true && false false
! НЕ Единственный операнд не равен true ! true false

 

Почему предусмотрены две версии операторов И и ИЛИ? Это связано с приоритетом операторов, о чем мы поговорим немного позже.


Операторы инкремента и декремента целой переменной

 

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

$х = $х + 1; // $х увеличено на 1

Или, например, так, используя комбинированный оператор присваивания:

$х+ = 1; // $х увеличено на 1

В обоих случаях результирующее целое значение присваивается переменной $х. Из-за распространенности выражений этого вида в РНР предусмотрены специаль­ные операторы, которые добавляют единицу или вычитают ее от целой переменной и присваивают последней результат операции. Речь идет о постфиксных операторах инкремента и декремента. Постфиксный оператор инкремента состоит из двух символов "плюс", присоединенных к имени переменной, как показано ниже:

$х ++; / / $х увеличено на 1

Эта команда увеличивает значение переменной на единицу. Используя два символа "минус" по аналогии, можно уменьшить на единицу значение переменной:

$х--; // $х уменьшено на 1

Если постфиксные операторы инкремента и декремента используются вместе с условным оператором, то операнд модифицируется только после окончания проверки:

$х = 3;

$х++ < 4; // true

В этом примере при выполнении проверки переменная равна 3 и при сравнении с числом 4 оператор "меньше" возвращает true. После выполнения проверки значение переменной увеличивается на 1.

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

++$х; // $х увеличена на 1

--$х; // $х уменьшена на 1

Если префиксные операторы инкремента и декремента используются вместе с условным оператором, то операнд модифицируется до выполнения проверки, например:

$х = 3;

++$х < 4; // false

В этом фрагменте кода значение переменной увеличивается до выполнения его сравнения с числом 4.

 

Приоритет операторов

При использовании операторов интерпретатор РНР обычно вычисляет значения выражений слева направо. Однако для сложных выражений, в которых используются несколько операторов, все немного усложняется. Рассмотрим сначала простой случай:

4 + 5

Здесь все очевидно: интерпретатор РНР просто добавляет 5 к 4. А как насчет следующего фрагмента?

4 + 5*2

Здесь ситуация неоднозначна. Эта запись может означать, что сначала вычисляется сумма 4 и 5, а затем полученный результат умножается на 2, что дает в результате 18. Она также может означать, что сначала 5 умножается на 2 и к полученному результату добавляется 4, что дает в результате 14. Если бы операторы просто выполнялись слева направо, то справедлив был бы первый результат. На деле же в РНР всем операторам назначен различный приоритет. Из-за того, что оператор умножения имеет более высокий приоритет, чем оператор сложения, верным буде второй результат.

Заставить интерпретатор РНР выполнить сложение перед умножением можно с помощью скобок:

(4 + 5)*2

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

Таблица 6.9. Порядок выполнения некоторых операторов РНР

Оператор
++ - - (приведение типа)
/ * %
* -
< <= => >
= = = = =!=
&&
||
= += -= /=*= %=.=
and
xor
or

 

Как видите, оператор or имеет более низкий приоритет, чем ||, a and – более низкий, чем &&. Это позволяет использовать логические операторы более низкого приоритета для изменения способа вычисления сложного логического выражения. Однако подобный подход не всегда хорош. Следующие два выражения эквивалентны, но второе намного легче читать:

$x and $y || $z

$x && ($y || $z)

Как видите приоритет операторов является единственной причиной, по которой в РНР ввели операторы && и and. To же самое справедливо и относительно операторов || и or. Однако чтобы сделать код более понятным и уменьшить количество ошибок из-за неправильной трактовки приоритета выполнения операторов, рекомендуется в сложных выражениях использовать круглые скобки.

Константы

Переменные являются очень удобным средством для хранения данных, потому что в любой момент можно изменить их значение, а также тип сохраняемых данных. Однако если предполагается, что некоторые значения не будут изменяться на протяжении всей работы сценария, удобнее определить константу (или постоянную величину. Для создания константы используется функция РНР define(). После определения значение константы изменить невозможно. При вызове функции define () имя константы и значение, которое ей нужно присвоить, следует поместить в круглые скобки и разделить запятой, например:

define("ИМЯ_КОНСТАНТЫ", 42);

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

Листинг6.4. Определение и использование константы

1: <!DOCTYPE HTML PUBLIC

2: "-//W3C//DTD XHTML 1.0 Strict//EN"

3: "http://www.w3.org/TR/xhtmll/DTD/xhtmll-strict.dtd">

4:

5: <html>

6: <head>

7: <title>Листинг 4.4. Определение и использование

константы </title>

8: </head>
9:

10: <body>

11: <div>

12: <?php

13: define ("USER", "Сергей");

14: print "Добро пожаловать, ". USER;

15:?>

16: </div>

17: </body>

18: </html>

 

Обратите внимание на строку 14 этого сценария. В ней использован оператор объединения для добавления значения, содержащегося в константе, к строке "Добро пожаловать, ". Дело в том, что интерпретатор РНР не различает константы и строки, находящиеся в кавычках.

У функции define () существует и третий (необязательный) параметр, определяющий, должно ли имя константы зависеть от регистра букв. По умолчанию константы чувствительны к регистру, но, передавая значение true в функцию def ine() можно изменить это соглашение. Таким образом, если определить константу USER так:

define("USER", "Сергей", true);

то все приведенные ниже выражения эквиваленты.

print User;

print UsEr;

print USER

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

Предопределенные константы

 

В РНР автоматически определяются несколько встроенных констант, которые вы можете использовать в собственных сценариях. Например, константа _File_ содержит имя файла, с которым в настоящий момент работает интерпретатор РНР, а _LINE_ - номер текущей строки этого файла. Эти константы полезны для формирования сообщений об ошибках. Также с помощью константы php_version можно выяснить, какая версия интерпретатора РНР обрабатывает ваш сценарий. Тем самым можно ограничить выполнение сценария определенными версиями интерпретатора РНР.

 

Резюме

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

Вопросы и ответы



Поделиться:


Последнее изменение этой страницы: 2016-12-17; просмотров: 227; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.14.70.203 (0.015 с.)