Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: вопрос
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » вопрос

Страниц (1): [1]
 

1. namreg - 02 Сентября, 2008 - 15:12:44 - перейти к сообщению
я конечно ламер, но мне не даёт покоя вопрос: зачем перед некоторыми функциями ставится знак @?? Закатив глазки
2. Вездеход - 02 Сентября, 2008 - 15:32:50 - перейти к сообщению
чтобы если появится ошибка при выполнении этой функции - ошибка никак не отобразилась на дальнейшей работе. т.е. не выводилась.
3. pifon1989 - 02 Сентября, 2008 - 15:36:45 - перейти к сообщению
Собака означает, что если функция кривая или там внутри что-то не так, то ошибка выведена не будет, интерпретатор в этом случае просто пропустит её и пойдёт дальше. Но если от неё хоть что-то дальше зависит, я так делать не рекомендую настоятельно. Это будет равносильно тому что вы закроете глазки ладошками, затопаете ногами и начнёте быстро-бытро говоть "нет-нет-нет-нет-нет-нет-нет-нет-нет нету нету нету нету у меня ошибок"
Реально знак вообще рассчитан на тот случай, если например в вашей сборке пхп нет такой функции (она дополнительная, её скачивают и ставят отдельно), то интерпретатор ругаться не будет и страница не будет изуродована сообщением об ашипке. Если же функция есть, то появится какая-нибудь дополнительная красивая фиговинка, которая может даже по сути и не нужна, но так, просто, как бы.
P.S.: ставить можно не только перед функциями, но и перед переменными и массивами.
4. Champion - 02 Сентября, 2008 - 15:49:11 - перейти к сообщению
Ко всему выше сказанному. Если, к примеру, разработчик хочет, чтобы в браузер выводилось не стандартое сообщение об ошибке, а свое (написанное далее в обработчике), или вообще без сообщений просто другой ход выполнения программы.
Конечно же, как уже сказали, не надо ставить этот чудо-знак просто, чтоб скрыть ошибку
5. Вездеход - 02 Сентября, 2008 - 15:50:26 - перейти к сообщению
не согласен... если есть в скрипте мелкая функция выполнение которой не обязательно но желательно - то удобно использовать собачку...
6. pifon1989 - 02 Сентября, 2008 - 16:00:00 - перейти к сообщению
Вездеход пишет:
не согласен... если есть в скрипте мелкая функция выполнение которой не обязательно но желательно - то удобно использовать собачку...

бгг Радость Радость Радость
pifon1989 пишет:
Если же функция есть, то появится какая-нибудь дополнительная красивая фиговинка, которая может даже по сути и не нужна, но так, просто, как бы.

(Добавление)
P.S.: Сорри если что, но говорим на одном языке и друг друга не слышим Улыбка
7. Champion - 02 Сентября, 2008 - 16:03:29 - перейти к сообщению
Вездеход пишет:
не согласен... если есть в скрипте мелкая функция выполнение которой не обязательно но желательно - то удобно использовать собачку...


Не совсем понял. Функция выполнится в любом случае. Она собычку не боится). Собачка только ее вывод съест, чтоб они пользователя не пугали.

А я имел в виду, что например у нас в строке выполняется запрос. С ошибкой. Без собачки будет warning:dynamic sql error..... А можно, скажем, если запрос не выполнился, вывести что-нибудь свое, понятное пользователю. Т.е. свое и так можно вывести, он чтоб перед этим не вывилась стд. ошибка, ее надо скушать собачкой
(Добавление)
а, понял, что ты имеешь в виду)
(Добавление)
pifon1989 пишет:
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};

Классно! Радость
8. EuGen - 02 Сентября, 2008 - 17:37:33 - перейти к сообщению
"@" лишь подавляет весь вывод, генерируемый вызовом функции. К такому выводу относятся и ошибки уровня E_ERROR
Но это не значит, что если произойдет фатальная ошибка, скрипт продолжит свое выполнение.
К примеру,
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. echo("###");
  4. $data=array();
  5. $result=no_function($data);
  6. echo("***");
  7. ?>
  8.  

Выведет
CODE (text):
скопировать код в буфер обмена
  1.  
  2. ###
  3. Fatal error: Call to undefined function no_function()
  4.  

в то время как:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. echo("###");
  4. $data=array();
  5. $result=@no_function($data);
  6. echo("***");
  7. ?>
  8.  

только
CODE (text):
скопировать код в буфер обмена
  1.  
  2. ###
  3.  

Однако в обоих случаях второе echo не выполнится.
9. pifon1989 - 02 Сентября, 2008 - 17:40:39 - перейти к сообщению
EuGen пишет:
Однако в обоих случаях второе echo не выполнится.

Спасибо за уточнение. Видимо просто никогда с fatal error в данной ситуации не сталкивался.
10. namreg - 02 Сентября, 2008 - 23:07:22 - перейти к сообщению
всем спасибо за столь подробное разъяснение Улыбка

 

Powered by ExBB FM 1.0 RC1