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

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

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


person syaz    schedule 26.09.2008    source источник


Ответы (7)


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

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

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

Дополнительная информация на http://www.php.net/manual/en/language.operators.errorcontrol.php

person Vinko Vrsalovic    schedule 26.09.2008
comment
Ну лень... Допустим, пригодится на раз пробежаться, выкинуть скрипт. В любом случае это плохая практика. - person e-satis; 26.09.2008
comment
Ужасно полезно подавлять уведомления об ошибках, если у вас есть обработчик ошибок. - person eyelidlessness; 20.07.2009
comment
Обычно его используют ленивые программисты, которые не хотят проверять коды ошибок. Совершенно неправильно. @ - это именно то, как PHP делает свою попытку / поймать php.net/manual/ ru/language.operators.errorcontrol.php - person Havenard; 02.09.2009
comment
Однако очень, очень далеко от реальной попытки/поймать. Стандартно, если вы знаете, что делаете, и у вас есть обработчики ошибок, тогда это нормально. вздох - person Vinko Vrsalovic; 02.09.2009
comment
@Havenard, это не то, как php пытается поймать. Php использует... подождите... попробуйте/поймать (php.net/manual /en/language.exceptions.php). Подавление ошибок @ — это всего лишь подавление ошибок. В некоторых случаях он может быть полезен, но использовать его следует с осторожностью. - person Josiah; 27.04.2010

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

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

person Treb    schedule 26.09.2008

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

person Simon Buchan    schedule 26.09.2008

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

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

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

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

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

@ === ПЛОХО

person EvilPuppetMaster    schedule 26.09.2008

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

person Lev    schedule 26.09.2008

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

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

Лучше отключить display_errors и использовать собственные обработчики ошибок (см. Исключение ошибки< /а>).

person Ross    schedule 26.09.2008

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

[...]

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

$f["date"] = $foutDate;

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

[...]

person Doug    schedule 06.05.2010