Использование оператора @ – за и против.
1.За
2.Против
3.Варианты, при которых использование @ допустимо
4.Как программировать без @
Следует заметить, что речь не идёт о том обрабатывать ошибку или нет, как многие путают – обрабатывать её надо обязательно!
Речь идёт о показе/непоказе этой сообщения об ошибке пользователю.
1. За использование оператора @
- Ускорение процесса написания кода
- Уменьшение размера исходного кода
- Лень обрабатывать ошибку (для подавления нотиса)
Пример:
<?php
$action = isset($_GET['action']) ? $_GET['action'] : ‘’;
//...
?>
проще написать
<?php
$action=@$_GET['action'];
//...
?>
2. Против использования оператора @
- Усложняет процесс поиска и исправления ошибок
- «Ломает» логику программы
- Совесть программиста
3. Варианты, при которых использование @ допустимо
- «Собака» имеет право на жизнь только в паре с обработчиком сообщения об ошибке.
- Использование для функций mysql_*(), потому что у них специальный обработчик ошибок mysql_error().
<?php
if ( ! ($link = @mysql_connect('localhost', 'mysql_user', 'mysql_password'))) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>
<?
ini_set('track_errors',1);
if (!@fopen('/tmp/not_exists','r')){
echo $php_errormsg,"\n";
}
if (!@fopen('/etc/can_not_open','w+')){
echo $php_errormsg,"\n";
}
?>
Output:
failed to open stream: No such file or directory
failed to open stream: Permission denied
4. Как программировать без @
NB! Необходимо инициализиваровать все переменные, которые используются по ходу работы скрипта.
<?php
error_reporting(E_ALL);
//
// Рекомендуется задавать свой обработчик ошибок
//
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
switch ($errno)
{
case E_ERROR:
case E_USER_ERROR:
echo "<b>My ERROR</b> [$errno] $errstr<br />\n";
echo " Fatal error in line $errline of file $errfile";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
echo "Aborting...<br />\n";
exit(1);
break;
case E_WARNING:
case E_USER_WARNING:
echo "<b>My WARNING</b> [$errno] $errstr<br />\n";
break;
case E_USER_NOTICE:
case E_NOTICE:
echo "<b>My NOTICE</b> [$errno] $errstr<br />\n";
break;
default:
echo "Unkown error type: [$errno] $errstr<br />\n";
break;
}
}
$old_error_handler = set_error_handler('myErrorHandler');
$file_name = 'foo.bar';
//
// Перед чтением из файла проверяем доспупность файла для чтения (если файл
// существует и есть права на чтение) иначе вызываем ошибку
//
if (is_readable($file_name))
{
$fp = file_get_contents($file_name);
echo $fp;
}
else
{
trigger_error('Can\'t find or open the file!', E_USER_ERROR);
}
?>
Информационные ресурсы
-
http://php.net
-
How to handle those pesky errors in PHP