PHP псевдоним @ функция
Я новичок в PHP, и я запутался, увидев некоторые примеры вызова функции с префиксом @, например @mysql_ping().
Для чего это? Поиск в Google / поиск не очень помогает, так как @ отбрасывается, а псевдоним - недостаточно хорошее ключевое слово.
7 ответов
@ подавляет ошибки, предупреждения и уведомления.
Вы можете использовать его для хорошей цели, если дополните его специальным обработчиком ошибок или проверкой переменной $ php_errormsg, чтобы вы могли правильно обрабатывать ошибки.
По моему опыту, это правильное использование встречается не очень часто, и вместо этого часто используется неправильно, просто чтобы скрыть ошибки, не воздействуя на них.
Более подробная информация на http://www.php.net/manual/en/language.operators.errorcontrol.php
Подавляет вывод сообщений об ошибках. В отличие от другого комментатора, я думаю, что это хорошая практика программирования (особенно если вы разрабатываете веб-приложение, в котором выходные данные будут смешаны в html выходной страницы).
Такие функции, как mysql_connect, возвращают идентификатор ресурса или FALSE при ошибках. Используйте @mysql_connect(...) и проверьте возвращаемое значение.
Поиск в Google "php at symbol" предполагает, что он просит PHP не отображать никаких сообщений об ошибках, вызываемых вызовом.
Он подавляет любые ошибки, которые в противном случае могли бы быть выведены.
Это рецепт боли и лишений, поскольку он неизбежно приводит к трудностям, когда возникает ошибка, вы непременно должны тратить часы на поиск причины. Если бы оператор @ не использовался, то ошибка была бы найдена в считанные секунды.
Нет веских оснований для его использования, используйте параметры ini display_errors и error_log, чтобы предотвратить отображение ошибок на работающем сайте, и разрешить их отображение на вашем сайте разработчика.
Если есть ошибка, которую вы не хотите видеть, лучше просто ее исправить, чем подавить!
Если это что-то во внешней библиотеке и вне вашего контроля, просто запишите это в журналы, отключите display_errors на производстве и живите с этим. Потому что неясно, будет ли ошибка, которую вы подавляете сейчас и с радостью жить, ВСЕГДА быть той ошибкой, которая выдается оттуда.
@ === ПЛОХО
Префикс функции с символом останавливает ее, вызывая обработчик ошибок PHP в случае возникновения ошибки. Имейте в виду, что вы должны сами обрабатывать все ошибки, если решите их использовать.
$test = @file_get_contents('nonexistant.file');
if(!$test)
{
die('Failed');
}
Лучше практиковаться, чтобы превратить display_errors
выключите и используйте пользовательские обработчики ошибок (см. " Исключение ошибок").
Подавить сообщения об ошибках: http://bytes.com/forum/thread10951.html
Иногда это полезно, особенно если администратор не хочет, чтобы вы играли с PHP-средой, или значение не имеет значения и носит в основном косметический характер. Помните, хотя; Это обходной путь, а не панацея.
[...]
.$foutDate = @filemtime($keyring); /* Don't care, as we've already established file */
$f["date"] = $foutDate;
$f["fullDate"] = date("r", $foutDate);
[...]