PHP псевдоним @ функция - PullRequest
       29

PHP псевдоним @ функция

5 голосов
/ 26 сентября 2008

Я новичок в PHP, и я запутался, увидев некоторые примеры вызова функции с префиксом @, например, @mysql_ping ().

Для чего это? Поиск в Google / поиск не очень помогает, так как @ отбрасывается, а псевдоним - недостаточно хорошее ключевое слово.

Ответы [ 7 ]

15 голосов
/ 26 сентября 2008

@ подавляет ошибки, предупреждения и уведомления.

Вы можете использовать его для полезных целей, если дополните его пользовательским обработчиком ошибок или должной проверкой переменной $ php_errormsg, чтобы вы могли правильно обрабатывать ошибки.

По моему опыту, это правильное использование встречается не очень часто, а вместо этого часто используется неправильно, просто чтобы скрыть ошибки, не воздействуя на них.

Больше информации на http://www.php.net/manual/en/language.operators.errorcontrol.php

3 голосов
/ 26 сентября 2008

Подавляет вывод сообщений об ошибках. В отличие от другого комментатора, я думаю, что это хорошая практика программирования (особенно если вы разрабатываете веб-приложение, в котором выходные данные будут смешаны в html страницы вывода).

Такие функции, как mysql_connect, возвращают идентификатор ресурса или FALSE при ошибках. Используйте @mysql_connect (...) и проверьте возвращаемое значение.

2 голосов
/ 26 сентября 2008

Google для «php at symbol» предполагает, что PHP просит не отображать никаких сообщений об ошибках, вызываемых вызовом.

1 голос
/ 26 сентября 2008

Подавляет любые ошибки, которые в противном случае могли бы выводиться.

Это рецепт боли и лишений, поскольку он неизбежно приводит к трудностям, когда возникает ошибка, вы непременно должны тратить часы на поиск причины. Если бы оператор @ не использовался, то ошибка была бы найдена в секундах.

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

Если есть ошибка, которую вы не хотите видеть, лучше просто ее исправить, чем подавить!

Если это что-то во внешней библиотеке и вне вашего контроля, просто запишите это в журналы, отключите display_errors на производстве и живите с этим. Потому что неясно, будет ли ошибка, которую вы подавляете сейчас и с радостью жить, ВСЕГДА будет ошибкой, которая выдается оттуда.

@ === ПЛОХО

0 голосов
/ 06 мая 2010

Иногда это полезно, особенно если администратор не хочет, чтобы вы играли с PHP-средой, или значение не имеет значения и в основном косметическое. Помните, хотя; это обходной путь, а не панацея.

[...]

.$foutDate = @filemtime($keyring); /* Don't care, as we've already established file */

$f["date"] = $foutDate;

$f["fullDate"] = date("r", $foutDate);

[...]

0 голосов
/ 26 сентября 2008

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

$test = @file_get_contents('nonexistant.file');
if(!$test)
{
    die('Failed');
}

Рекомендуется отключать display_errors и использовать собственные обработчики ошибок (см. Исключение ошибок ).

0 голосов
/ 26 сентября 2008

Подавить сообщения об ошибках: http://bytes.com/forum/thread10951.html

...