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

@

  • за

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

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

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

fixxxer

К.О.
Партнер клуба
Вурдалак
Ээээ, я как раз против собаки, если ты не заметил :) Я про то, что

if (file_exists($file)) unlink($file)

лучше, чем

@unlink($file)

try-catch еще лучше.
 

Вурдалак

Продвинутый новичок
функция при неудаче НЕ ДОЛЖНА кидать сообщение об ошибке, а должна возвращать код ошибки.
А это-то зачем? Чтобы вернутся к тонее if'ов вместо исключений? В exception'е и так будет вся информация об ошибке.
 

Вурдалак

Продвинутый новичок
fixxxer, так это я скорее Фанат'у адресую, просто если меня не слушает, так может тебя поймёт.
 

Absinthe

жожо
if (file_exists($file)) unlink($file)

лучше, чем

@unlink($file)
Не согласен: операция не атомарна, и нет разницы, есть проверка или нет: все равно может варнинг выскочить.
Поэтому только try/catch.
 

Фанат

oncle terrible
Команда форума
Вот именно поэтому try-catch и лучше:
от собаки отказались - и то хлеб.

идем дальше. что имеется в виду под try-catch?
Какой конкретно код в catch?
Какую цель преследует?

И понимаешь ли ты, что логика работы программы и ошибки, возникающие в процессе её работы - это разные вещи?
 

Вурдалак

Продвинутый новичок
Фанат, такой же, какой ты бы пихнул в блок else своего if'а в общем-то.
 

Фанат

oncle terrible
Команда форума
Вурдалак
у меня нет блока else.
Если файл есть - его удаляю.
если нету - ничего не делаю.
 

Absinthe

жожо
Мысль о том, что можно сделать и то и другое тебе не приходила?
А зачем делать первое? Оно лишь изменяет количественную вероятность получить "файла не существует".
Вероятность как была, так и остается, и ничего в обработке не изменится. Поэтому какой смысл?
 

Фанат

oncle terrible
Команда форума
значит, та же собака, только в профиль.

админ c перепою воткнул open_basedir
приложение перестало работать
твои действия?
 

Вурдалак

Продвинутый новичок
Фанат, и чем тогда, скажи пожалуйста, твой if(exists()) от собаки отличается?
 

Вурдалак

Продвинутый новичок
админ c перепою воткнул open_basedir
приложение перестало работать
твои действия?
Фанат, ты так говоришь, словно я что-то должен делать. Я лишь перенёс твой вариант на try-catch, как ты и просил. С твоим if'ом вылезет ошибка, а у меня — нет. Ты хотел доказать, что сам не прав? Ты это сделал.
 

Фанат

oncle terrible
Команда форума
ты так говоришь, как будто ошибка - это что-то плохое.
 

Вурдалак

Продвинутый новичок
Фанат, ну, OK, т.е. перенеси свой код error_handler'а в catch.

Хотя мне очень интересно зачем логгировать ситуацию, в которой нет файла с кешем?
 

itprog

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

Вурдалак

Продвинутый новичок
itprog, можно поставить свой error_handler, а по завершению работы восстановить пользовательский (restore_error_handler). Хотя тут уже просто вылезают недостатки PHP.
 

itprog

Cruftsman
Вурдалак
честно говоря я бы обошелся собакой %) А потому что когда вызывать restore_error_handler? т.е. " по завершению работы " чего?

Да , недостаток, который надо лечить не вырезанием @, а нормальными исключениями вместо ошибок
 

Вурдалак

Продвинутый новичок
т.е. " по завершению работы " чего?
Ставить и снимать в каждом публичном методе библиотеки. Хотя я бы для совместимости предпочёл бы кучу if'ов. Глушить ошибку всё равно не требуется: это уже на совести пользователя библиотеки.
 
Сверху