2008-09-26 3 views
5

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

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

ответ

15

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

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

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

Более подробная информация на сообщения об ошибках http://www.php.net/manual/en/language.operators.errorcontrol.php

+0

Ну ленивый ... Скажем, это полезно для сценария "запустить один раз, выбросить". В любом случае это плохая практика. – 2008-09-26 11:52:00

2

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

3

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

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

0

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

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

Лучше практика превратить display_errors прочь и использовать обработчики пользовательских ошибок (см Error Exception).

1

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

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

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

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

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

@ === BAD

0

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

[...]

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

$f["date"] = $foutDate; 

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

[...]