Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите по теории: что значит '@', @ 
:(
    Опции темы
chori
Дата 24.7.2007, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 1.6.2007

Репутация: нет
Всего: нет



Здрасте!
Что значит и как использовать @?
Это что то вроде переменной или функции??
PM MAIL   Вверх
sTa1kEr
Дата 24.7.2007, 22:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Оператор управления ошибками
Цитата(chori @  24.7.2007,  21:57 Найти цитируемый пост)
Что значит

Цитата

PHP поддерживает один оператор управления ошибками: знак @. В случае, если он предшествует какому-либо выражению в PHP-коде, любые сообщения об ошибках, генерируемые этим выражением, будут проигнорированы. 

Цитата(chori @  24.7.2007,  21:57 Найти цитируемый пост)
и как использовать @?

Цитата

Замечание: Оператор @ работает только с выражениями. Есть простое правило: если произвольная языковая конструкция возвращает значение, значит вы можете использовать предшествующий ей оператор @. Например, вы можете использовать @ перед именем переменной, произвольной функцией или вызовом include(), константой и так далее. В то же время вы не можете использовать этот оператор перед определением функции или класса, условными конструкциями, такими как if или foreach. 

PM MAIL   Вверх
Mal Hack
Дата 24.7.2007, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Перевожу на русский язык. ИСпользуем @ только там, где НАДО подавить ошибку, в условии, когда идет на нее проверка.
PM ICQ   Вверх
SelenIT
Дата 24.7.2007, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Очень хорошая статья по теме на phpclub-е.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
sTa1kEr
Дата 24.7.2007, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Хотел добавить, что еще следует всегда руководствоваться следующим правилом: Там где Notice или Warning можно предотвратить дополнительным условием или другой поверкой, нужно использовать именно эту проверку, а не подавлять вывод ошибок. Но существуют исключения:
1. Бывают ситуации, когда Warning - это штатная ситуация, избежать которой невозможно, кроме как использование оператора @. К примеру такое может быть при использовании функции stream_select(), которая всегда выдает Warning и возвращает false, если один из stream-ов вернул ошибку.
2. Где любой вывод посторонних данных критичен. Например при генерации xml, json, eval кода итп. Хотя даже в этом случае следует обрабатывать предупреждения, к примеру, писать в лог или в комментарий используя $php_errormsg.
PM MAIL   Вверх
GZep
Дата 24.7.2007, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: 8
Всего: 32



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


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
sTa1kEr
Дата 24.7.2007, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(GZep @  24.7.2007,  23:27 Найти цитируемый пост)
бывают случаи, когда @ не припятствует выводу ошибки. 

Например?
PM MAIL   Вверх
SelenIT
Дата 25.7.2007, 02:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(sTa1kEr @  24.7.2007,  22:32 Найти цитируемый пост)
даже в этом случае следует обрабатывать предупреждения, к примеру, писать в лог

Имхо, в production-окружении вообще всегда должен стоять display_errors=off, а все ошибки (включая нотайсы, по-хорошему) должны писаться именно в лог. Потому что, кроме порчи дизайна, сообщения об ошибках могут "проболтаться" хакеру о многом ненужном... ;)

Это сообщение отредактировал(а) SelenIT - 25.7.2007, 02:43


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
sTa1kEr
Дата 25.7.2007, 02:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



SelenIT, совершенно с вами согласен. Толко "@" подавляет вывод ошибок не только на экран, но вообще в принципе (даже критических), втч и в лог.
display_errors=off на рабочей системе - это как библия, первооснова.

Добавлено через 5 минут и 3 секунды
По поводу второго пункта. Так же, имхо, ни что не должно влиять на результат работы скрипта, будь то рабочая система или локальная. Т.е. пока есть хотя бы один нотис - скрипт не рабочий, я считаю, что таким правилом должен руководствоваться любой программист на PHP.
PM MAIL   Вверх
GZep
Дата 25.7.2007, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: 8
Всего: 32



Цитата(sTa1kEr @  24.7.2007,  23:39 Найти цитируемый пост)
Цитата(GZep @  24.7.2007,  23:27 Найти цитируемый пост)
бывают случаи, когда @ не припятствует выводу ошибки. 

Например? 

http://forum.vingrad.ru/index.php?showtopi...t&p=1122148


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
smartov
Дата 25.7.2007, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



GZep, в этой теме обсуждаются не извращения а знак @
А если человек переопределяет функцию обработки ошибки - он знает что делает или сам виноват

Кстати, сли подойти к процессу с точки зрения PHP то @ не "подавляет" ошибку магическим способом, просто на время выполнения следующей команды режим вывода ошибок переводится в E_NONE
PM MAIL   Вверх
Fally
Дата 25.7.2007, 13:17 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



По-моему, начиная с РНР5, использование оператора @ вообще неразумно, т.к. любую ошибку (кроме Fatal и Parsing) можно обработать при помощи механизма исключений. Да и вообще использование @ для меня сильно ухудшает восприятие кода, т.к. создаётся впечатление о том, что программист наспех закрывал все нотайсы и варнинги не пытаясь устранить причину их появления.

Цитата

По поводу второго пункта. Так же, имхо, ни что не должно влиять на результат работы скрипта, будь то рабочая система или локальная. Т.е. пока есть хотя бы один нотис - скрипт не рабочий, я считаю, что таким правилом должен руководствоваться любой программист на PHP.

+1


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
smartov
Дата 25.7.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Цитата(Fally @  25.7.2007,  12:17 Найти цитируемый пост)
создаётся впечатление о том, что программист наспех закрывал все нотайсы и варнинги не пытаясь устранить причину их появления.

А я часто проверяю параметры вот так
Код

if (@$_POST['param_name']) {
...


Чтобы не изгаляться длинными и ненужными
Код

if (isset($_POST['param_name']) && !isempty($_POST['param_name'])) {
...


PM MAIL   Вверх
Fally
Дата 25.7.2007, 14:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



А не проще ли так: 
Код

$var = isset($_POST['var']) ? $_POST['var'] : null;
 
?

Ну и опять же забыл написать, что это было ИМХО, просто символ собачки мне не очень нравиться использовать кроме для email адресов.


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
WolfON
Дата 25.7.2007, 15:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: 6
Всего: 8



smartov, empty проверяет и на то, существует переменная или нет, по этому достаточно:
Код

if (!empty($value))


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

Это сообщение отредактировал(а) WolfON - 25.7.2007, 15:00
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0953 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.