Зачем нужна @ в php

@

  • за

    Голосов: 6 19,4%
  • против

    Голосов: 25 80,6%

  • Всего проголосовало
    31

Sufir

Я не волшебник, я только учусь
Вот это сообщение натолкнуло меня на мысль... А зачем нужна "собака"? Расскажите где вы используете её и почему? Я сам ей никогда не пользовался и в скриптах уж пару лет как не встречал нигде. Есть ли реальный смысл в ней? Может её вообще 5.4 убрать нужно было...

P.S.: Кажется не туда запостил, надо было в оффтоп... Хотя может кто-то разумно растолкует теорию собаки.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
смысл есть: она включает режим совместимости с индусами :)
 

itprog

Cruftsman
смысл есть, когда ошибки ожидаемы и нужно лишь знать результат операции, а не ошибки (файловые операции для кэширования, strtotime для вапидации даты). Использование исключений для таких целей оверхед.
 

A1x

Новичок
Использование исключений для таких целей оверхед.
какой оверхед, если при нормальной работе скрипта исключение никогда не выбрасывается
вот искать ошибку файловой операции, заглушенной собакой в многоэтажных недрах скриптов - вот это fucking оверхед мозга

просто из-за того что какому-то индусу было лень написать лишнюю строчку кода (когда уже эту собаку выпилят нафиг из пхп?)
 

itprog

Cruftsman
какой оверхед, если при нормальной работе скрипта исключение никогда не выбрасывается
Вообще-то выбрасываются, простейший пример unlink файла с кэшем. Никакой полезной инфомации ошбика 'file not found' не несет и может быть смело проигнорирована.
 

A1x

Новичок
простейший пример unlink файла с кэшем. Никакой полезной инфомации ошбика 'file not found' не несет и может быть смело проигнорирована.
это не является исключительной ситуацией, а пример штатной работы скрипта. Решается проверкой существования файла, как я написал выше

файл может исчезнуть между file_exists и unlink...
вот это уже было бы исключительной ситуацией, хотя тут вероятность 0.000...
 

scorpion-ds

Новичок
Может, я что-то пропустил но буквально на этой недели столкнулся, с проблемой что при валлидации XML (использовал DTD), возникает ошибка которая которая мне вовсе не нужна, если файл не валлидный, то я просто перестаю его обрабатывать, потому что бы не получать сообщения об ошибках я использовал @:

PHP:
foreach ($lst as $item)	{
						
			$dom = new DOMDocument();
			$dom->load($item);
			
			if(@$dom->validate())	{
				//***
			}
			
		}
если не ставить @ то получаю сообщения об ошибках, которая мне вовсе не нужны.
 

Фанат

oncle terrible
Команда форума
смысл есть, когда ошибки ожидаемы и нужно лишь знать результат операции, а не ошибки (файловые операции для кэширования, strtotime для вапидации даты). Использование исключений для таких целей оверхед.
Хехе, как раз одно из заблуждений пользователей похапе, по которому я бы проехался на конфе, если бы не было так лень.

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

ksnk

прохожий
функция socket_connect для определения запущен сервер или нет. Если сервера нет и собаки нет - будет пространное сообщение об ошибке.
 

scorpion-ds

Новичок
Кстати при работе с FTP тоже можно получить сообщения об ошибках, которые только мешают, так как по меньшей мере в моем случае соединение с FTP можно было пропустить, точнее внутренне обработать эту ситуацию.
 

Absinthe

жожо
А зачем нужна "собака"?
Для BC, очевидно же.
Писать ее в новом коде - верх идиотизма.

функция socket_connect для определения запущен сервер или нет. Если сервера нет и собаки нет - будет пространное сообщение об ошибке.
Эксепшен.
 

itprog

Cruftsman
Эти наши маленькие друзья наивно полагают, что ошибка всегда бывает только одна - именно та, про которую они знают и ждут.
Нет, я говорил именно о случаях, когда не имеет значения какие ошибки произошли в нативной функции. Правда единственный пример, который я придумал это файловый кэш, где в случае, если кэш отвалится, лучше отобразить страницу, чем завершить работу, пусть даже и в ~0,001% случаях. И никакие проверки не гарантируют, что все ресурсы будут доступны для записи и чтения. Хендлер эксепшенов не всегда доступен, если, например, кэшируются пути к php-файлам.
 

Фанат

oncle terrible
Команда форума
Ну с чего ты взял-то, что не имеет?
Произошедшая ОШИБКА всегда имеет значение.
Другое дело, что если отсутствие файла допускается АЛГОРИТМОМ программы, то алгоритм эту ситуацию должен ОБРАБАТЫВАТЬ. А не доводить до ошибки и потом давить её.
Потому что ошибки - это НЕШТАТНЫЕ ситуации. А сообщения об ошибках нужны для того, чтобы программист узнал о произошедшей ошибке.
Чтобы когда при попытке стереть ненужный кэш-файл вылезет пермишен или сейф мод или еще что-то, мешающее удалить файл, программист не бегал на форум с вопросами "вот код, он ниработаииит!"
 

Вурдалак

Продвинутый новичок
Я вижу только один православный способ удаления кеша.
PHP:
try {
    unlink($cacheFile);
} catch(Exception $e) {
    // Nobody cares
}
 

Фанат

oncle terrible
Команда форума
Другое дело что в пхп есть несколько говнофункций, которые при штатной работе выдают ошибки - getimagesize, parse_str (одну из них недавно кажется починили), socket_connect видимо ещё - здесь да, надо извращаться. но опяь же - не собакой.

Главное, что должны выучить юзеры пхп - Типов ошибок бывает БОЛЬШЕ ОДНОГО!
 

Фанат

oncle terrible
Команда форума
Вурдалак
чем это отличается от собаки?

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

причем в данном конкретном случае надо проверять файл на существование.
 

itprog

Cruftsman
Вурдалак
Это работало бы, если бы все ошибки в пхп были исключениями по дефолту. И кстати я не вижу различия между таким тупым try-catch и @...
 

Вурдалак

Продвинутый новичок
Фанат, а ничем, просто это отметает аргумент о том, что собака нужна. Ради одного такого случая она не нужна.
 
Сверху