САМОУЧИТЕЛЬ PHP 4

Логические переменные


Существует и еще один гипотетический тип переменных— логический. Логическая переменная может содержать одно из двух значений: false (ложь) или true (истина). Любое ненулевое число (и непустая строка), а также ключевое слово true символизирует истину, тогда как 0, пустая строка и слово false — ложь. Таким образом, любое ненулевое выражение (в частности, значение переменной) рассматривается в логическом контексте как истина. Вы можете пользоваться константами false и true в зависимости от логики программы.

Ключевые слова false и true — не совсем обычные константы. Раньше я говорил, что false

является просто синонимом для пустой строки, а true — для единицы. Именно так они выглядят, если написать следующие операторы:

echo false;  // âûâîäèò ïóñòóþ ñòðîêó, ò. å. íè÷åãî íå âûâîäèò

echo true;   // âûâîäèò 1

Теперь давайте рассмотрим такую программу (листинг 7.1).

Листинг 7.1. Логические величины

<?

$a=100;

if($a==1) echo "ïåðåìåííàÿ ðàâíà 1!<br>"

if($a==true) echo "ïåðåìåííàÿ èñòèííà!<br>"

?>

Если бы true была в точности равна константе 1, то вывелись бы обе строки, не правда ли? А отображается только последняя. Это говорит о том, что не все так просто. Мы видим, что в операторах сравнения (например, в операторе сравнения на равенство ==, а также в операторах >, < и т. д.) PHP интерпретирует один из операндов как логический, если другой также логический. Следующий пример (листинг 7.2) показывает, что, вообще говоря, PHP хранит для каждой переменной признак, является ли она логической.




Листинг 7.2. Логические переменные

<?

$a=100;

$b=true;

echo "a = $a<br>";

echo "b = $b<br>";

if($a==$b) echo 'а "равно" b!';

?>

Как ни странно, но программа печатает, что "а=100 и b=1", а затем с гордостью заявляет, что "a равно b". Хотя в данном примере мы прекрасно понимаем, что так и должно быть (потому что на самом-то деле переменные сравниваются как логические), поэтому будьте осторожны, когда вместо $a используется, например, число, возвращенное функцией. Иначе это может породить ошибку, которая "убьет" несколько часов на ее поиски.

Конечно, при выполнении арифметических операций над логической переменной она превращается в обычную, числовую переменную. Однако при написании этой книги я наткнулся на интересное исключение: по-видимому, операторы ++ и -- для увеличения и уменьшения переменной на 1 не работают с логическими переменными [В. О.20] (листинг 7.3):

Листинг 7.3. Особенности операторов ++ и --

<?

$b=true;

echo "b: $b<br>";

$b++;

echo "b: $b<br>";

?>

Эта программа выводит оба раза значение 1, во всяком случае, в моей версии PHP 4.03.



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


Содержание раздела