|
логических выражений, содержащих такие опера-
ции, идет всегда слева направо, при этом, если результат уже очевиден (например,
false&&что-то всегда дает false), то вычисления обрываются, даже если в выра-
жении присутствуют вызовы функций. Например, в операторе
$logic = 0&&(time()>100);
стандартная функция time() никогда не будет вызвана.
Будьте осторожны с логическими операциями — не забывайте про удваивание сим-
вола. Обратите внимание, что, например, | и || — два совершенно разных операто-
ра, один из которых может потенциально возвращать любое число, а второй — толь-
ко false и true.
Оператор отключения
предупреждений
Выдаче ясных и адекватных сообщений о возникших во время выполнения сценария
ошибках разработчики PHP заслуженно уделили особое внимание. Наверное, вы уже
запускали несколько простых PHP-программ из браузера и имели удовольствие ви-
Часть III. Основы языка PHP 140
деть, что все ошибки выводятся прямо в окно браузера вместе с указанием, на
какой
строке и в каком файле они обнаружены. Остается только в редакторе найти нужную
строку и исправить ошибку. Удобно, не правда ли?
К сожалению, PHP — чуть ли не первый язык, который выводит предупрежде-
ния в браузер, а не в файлы журналов. Если вы работали некоторое время с
таким языком, как Perl, то, наверное, уже успели устать от бесконечных вере-
ниц "500-х ошибок", которые Perl выдает при малейшей оплошности в сцена-
рии. Теперь можете вздохнуть с облегчением: PHP никогда не выдаст сообще-
ние о 500-й ошибке, что бы ни произошло.
PHP устроен так, что ранжирует ошибки и предупреждения по четырем основным
"уровням серьезности". Вы можете настроить его так, чтобы он выдавал только
ошибки тех уровней, которые вас интересуют, игнорируя остальные (то есть, не
вы-
водя предупреждений о них). Впрочем, я рекомендую всегда включать контроль
ошибок по-максимуму, т. к. это может существенно упростить отладку программ.
Допустим, мы так и поступили, и теперь PHP "ругается" даже на незначительные
ошибки.
Однако не всегда это бывает удобно. Более того, иногда предупреждения со
стороны
интерпретатора просто недопустимы. Рассмотрим, например, такой сценарий (лис-
тинг 7.4):
Листинг 7.4. Навязчивые предупреждения
if($doGo) echo "Вы нажали кнопку!";
?>
Мы хотели сделать так, чтобы при нажатии на кнопку выдавалось соответствующее
сообщение, но вот беда: теперь при первом запуске сценария PHP выдаст
предупреж-
дение о том, что "переменная $doCliсk не инициализирована". Ну не отключать же
из-за такой мелочи контроль ошибок во всем сценарии, не правда ли? Как бы нам
временно блокировать проверку ошибок, чтобы она не действовала только в одном
месте, не влияя на остальной код?
Вот для этого и существует оператор @ (отключение ошибок). Если разместить дан-
ный оператор перед любым выражением (возможно, включающим вызовы функций,
генерирующих предупреждения), то сообщения об ошибках в этом выражении будут
подавлены и в окне браузера не отображены.
Глава 7. Переменные, константы, выражения 141
На самом деле текст предупреждения сохраняется в переменной PHP
$php_errormsg, которая может быть в будущем проанализирована. Эта воз-
можность доступна, если в настройках PHP включен параметр track_errors
(по умолчанию он как раз и установлен в yes).
Вот теперь мы можем переписать наш пример, грамотно отключив надоедливое пре-
дупреждение (листинг 7.5).
Листинг 7.5. Отключение навязчивого предупреждения
if(@$doGo) echo "Вы нажали кнопку!";
?>
Как можно заметить, листинг 7.5 отличается от лис
|
|