|
тся
ли она логической.
Листинг 7.2. Логические переменные
$a=100;
$b=true;
echo "a = $a ";
echo "b = $b ";
if($a==$b) echo 'а "равно" b!';
?>
Как ни странно, но программа печатает, что "а=100 и b=1", а затем с гордостью
заяв-
ляет, что "a равно b". Хотя в данном примере мы прекрасно понимаем, что так и
должно быть (потому что на самом-то деле переменные сравниваются как логиче-
ские), поэтому будьте осторожны, когда вместо $a используется, например, число,
возвращенное функцией. Иначе это может породить ошибку, которая "убьет" не-
сколько часов на ее поиски.
Конечно, при выполнении арифметических операций над логической переменной она
превращается в обычную, числовую переменную. Однако при написании этой книги я
наткнулся на интересное исключение: по-видимому, операторы ++ и -- для увеличе-
ния и уменьшения переменной на 1 не работают с логическими переменными (лис-
тинг 7.3):
Листинг 7.3. Особенности операторов ++ и --
$b=true;
echo "b: $b ";
$b++;
echo "b: $b ";
?>
Глава 7. Переменные, константы, выражения 121
Эта программа выводит оба раза значение 1, во всяком случае, в моей версии
PHP 4.03.
Некоторые особенности работы с логическими переменными вполне могут из-
мениться в следующих версиях PHP. Их описание приведено здесь лишь с од-
ной целью: уберечь вас от возможных ошибок, которые трудно будет найти в
программе.
Действия с переменными
Вне зависимости от типа переменной, с ней можно делать три основных действия.
Присвоение значения
Мы можем присвоить переменной значение другой переменной (или значение, воз-
вращенное функцией), ссылку на другую переменную, либо же константное выраже-
ние (за исключением объектов, для которых вместо этого используется оператор
new). Как уже говорилось, за преобразование типов отвечает сам интерпретатор.
Кроме того, при присваивании старое содержимое и, что самое важное, тип
перемен-
ной теряются, и она становится абсолютно точной копией своего "родителя". То
есть,
если мы массиву присвоим число, это сработает, однако весь массив при этом
будет
утерян.
Проверка существования
Можно проверить, существует ли (то есть, инициализирована ли) указанная
перемен-
ная. Осуществляется это при помощи оператора IsSet(). Например:
if(IsSet($MyVar))
echo "Такая переменная есть. Ее значение $MyVar";
Если переменной в данный момент не существует (то есть нигде ранее ей не
присваи-
валось значение, либо же она была вручную удалена при помощи Unset()), то
IsSet() возвращает ложь, в противном случае — истину.
Важно помнить, что мы не можем использовать неинициализированную переменную
в программе — иначе это породит предупреждение со стороны интерпретатора (что,
скорее всего, свидетельствует о наличии логической ошибки в сценарии). Конечно,
предупреждения можно выключить, тогда все неинициализированные переменные
будут полагаться равными пустой строке. Однако я категорически не советую вам
этого делать — уж лучше лишняя проверка присутствия в коде, чем дополнительная
возня с "отлавливанием" возможной ошибки в будущем. Если вы все же захотите
отключить это злополучное предупреждение (а заодно и все остальные), лучше ис-
Часть III. Основы языка PHP 122
пользовать оператор отключения ошибок @, который действует локально (о нем мы
тоже вскоре поговорим).
Уничтожение
Уничтожение переменной реализуется оператором Unset(). После этого действия
переменная удаляется из внутренних таблиц интерпретатора, т. е. программа
начина-
ет выполняться так, как будто переменная еще не была инициализирована.
Например:
// Переменной $a еще не существует
$a="Hello there!";
// Теперь $a инициализирована
// ... какие-то команды, использующие $a
echo $a;
// А теперь удалим переменную $a
Unset($a);
// Теперь переменной $a опять не существует
echo $a; // Ошибка: нет такой переменной $a
Впрочем, применение Unset() для работы с обычными переменными редко бывает
целесообразно. Куда как полезнее использовать его для удаления элемента в
ассоциа-
тивно
|
|