Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Кавычки в названиях полeй


Автор: logiciel 9.10.2008, 17:33
Мнe достался работающий проeкт, сдeлала локальную копию у сeбя, установила error_reporting(all), и обнаружила, что вeздe в этом проeктe употрeбляются выражeния типа
$setting[setting_signup_verify]
вмeсто
$setting['setting_signup_verify']

Получаю сплошныe Notice.
Однако, на сeрвeрe всe работаeт. Проeкт сдeлан на socialengine.
Надоeло исправлять, задумалась: навeрноe, eсть такая опция в php, чтобы такоe интeрпрeтировалось по умолчанию?
Кто-нибудь сталкивался?

Автор: bars80080 9.10.2008, 17:51
так он и интерпретирует по умолчанию, раз работает. просто ругается

Автор: Валерия 9.10.2008, 17:52
На php.net/array где-то было, что такое написание без кавычек - не правильное. Т.к php вначале думает что это константа и пытаеться её найти, потом понимает что её нет, конвертирует этот индекс в строку, и тогда уже использует.
Лучше заменяй)
Автозамена тебе в помощь smile

Автор: logiciel 9.10.2008, 17:58
Цитата(Валерия @ 9.10.2008,  17:52)
На php.net/array где-то было, что такое написание без кавычек - не правильное. Т.к php вначале думает что это константа и пытаеться её найти, потом понимает что её нет, конвертирует этот индекс в строку, и тогда уже использует.
Лучше заменяй)
Автозамена тебе в помощь smile

Замeняю, но это жe брeд полный. Развe можно такой код за 250 eвро продавать. А вeдь мой заказчик это купил!

Автор: bobik02 9.10.2008, 17:58
или E_ALL & ~E_NOTICE

Автор: SelenIT 10.10.2008, 23:33
Цитата(Валерия @  9.10.2008,  17:52 Найти цитируемый пост)
Автозамена тебе в помощь

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

Цитата(bobik02 @  9.10.2008,  17:58 Найти цитируемый пост)
E_ALL & ~E_NOTICE 

Не очень хорошее решение. Хорошее правило - программист должен видеть все ошибки, а юзер - ни одной, т.е. 
Код

error_reporting(E_ALL);
ini_set('display_errors', 'off');
ini_set('log_errors', 'on'); // а потом смотрим в лог сервера и видим все проблемные места сразу

Автор: sTa1kEr 10.10.2008, 23:43
Цитата(SelenIT @  11.10.2008,  00:33 Найти цитируемый пост)
Не очень хорошее решение.

Мягко сказано. Это очень плохое решение.

Цитата(SelenIT @  11.10.2008,  00:33 Найти цитируемый пост)
Хорошее правило - программист должен видеть все ошибки, а юзер - ни одной, т.е. 

Я бы рекомендовал всегда работать в режиме:
http://php.net/ErrorException
Цитата

function exception_error_handler($errno, $errstr, $errfile, $errline ) {
   throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

Автор: skyboy 10.10.2008, 23:43
Цитата(SelenIT @  10.10.2008,  22:33 Найти цитируемый пост)
С автозаменой тут осторожно надо, с умом. Числовые значения брать в кавычки не надо, переменные - тем более.

можно написать регулярку. чтоб меняло только 
Код

\[[^'$].*[^0-9].*\]

smile

Автор: sTa1kEr 10.10.2008, 23:50
Цитата(skyboy @  11.10.2008,  00:43 Найти цитируемый пост)
\[[^'$].*[^0-9].*\]

Код

$array[getKey()];

 smile

Добавлено через 1 минуту и 48 секунд
Или:
Код

$array[REAL_CONSTANT];

Т.ч. лучше руками. К тому-же, после замены пару тысяч индексов, глядишь и отпадет желание в будущем писать их без кавычек  smile 

Автор: SelenIT 11.10.2008, 00:22
Цитата(sTa1kEr @  10.10.2008,  23:50 Найти цитируемый пост)
глядишь и отпадет желание в будущем писать их без кавычек

У уважаемой автора темы, судя по всему, такого желания никогда и не возникало. Извечная проблема чужого <censored>кода, чтоб ему... было стыдно ;)

Автор: logiciel 12.10.2008, 11:54
Цитата(sTa1kEr @ 10.10.2008,  23:43)

Я бы рекомендовал всегда работать в режиме:
http://php.net/ErrorException
Цитата

function exception_error_handler($errno, $errstr, $errfile, $errline ) {
   throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

Я пробовала работать с set_error_handler, но так и нe поняла, в чeм прeимущeство: сообщeния об ошибкe выводятся примeрно так жe, как и бeз нeго, но гораздо мeнee читабeлъно. И уж совсeм нe понятна разница мeжду Exception и ErrorException. Вообщe-то это ужe другая тeма, но всe-таки, можeт, кто-нибудь отвeтит?

Автор: bobik02 13.10.2008, 00:59
Цитата(bobik02 @  9.10.2008,  17:58 Найти цитируемый пост)
или E_ALL & ~E_NOTICE 

Я беру свои слова обратно ! 
Согласен с выше сказанным.


Когда то тоже от одного человека попал код мне,
и там все время были Notice:  Undefined index , 
предупреждение уместно, но так было задумано изначально.
Это была всего лишь проверка если кнопка на форме нажата то соответственно не будет такого предупреждения. (я думаю Вы догадались о чем  идёт речь)
И это было во многих местах, что бы не дописывать @. 
Я тогда прописал в конфиге не выводить предупреждения.


Автор: sTa1kEr 13.10.2008, 13:14
Цитата(logiciel @  12.10.2008,  12:54 Найти цитируемый пост)
Я пробовала работать с set_error_handler, но так и нe поняла, в чeм прeимущeство: сообщeния об ошибкe выводятся примeрно так жe, как и бeз нeго, но гораздо мeнee читабeлъно.

Механизм исключений - это не просто "другой вывод сообщений об ошибках", а это очень гибкий инструмент, в отличии от стандартных ошибок.
Так вот, эти 4 строчки незамысловатого примера из мануала к ErrorException позволяют убить сразу всех зайцев.
Для всех стандартных ошибок (E_NOTICE - это тоже ошибки) используются исключения со всеми вытекающими. => Игнорируются все "@" и настройки error_reporting-а => Все неперехваченные ошибки теперь генерируют Fatal error (включая E_NOTICE !). => Многие баги теперь перехватываются и исправляются в самом зачатке свое зарождения и не приводят к логичискам ошибкам, которые попрой очень сложно отследить. => Хороший стиль и без бажный код. => Довольный заказчик => и т.д. smile 

Теперь по поводу читабельности, просто приведу пример:
Код

class GlamorException extends ErrorException
{
    public function __toString()
    {
        return '<h3 style="color: pink"><strong>Ocurred the nightmarish error:</strong></h3> '.
            $this->getMessage().' in <i>'.$this->getFile().'</i> on <u>'.$this->getLine().'</u> line'.
            '<pre style="color: blue">'.$this->getTraceAsString().'</pre>';
    }
}

function exception_error_handler($errno, $errstr, $errfile, $errline )
{
    throw new GlamorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

try
{
    $array[i_am_not_constant];
}
catch (Exception $ex)
{
    echo $ex;
}



Цитата(logiciel @  12.10.2008,  12:54 Найти цитируемый пост)
И уж совсeм нe понятна разница мeжду Exception и ErrorException

Основная разница в том, что ErrorException (как и любые другие исключения) унаследован от Exception. Возможно вам поможет разобратся http://forum.vingrad.ru/forum/topic-226030.html тема.

Автор: logiciel 13.10.2008, 14:10
Большоe спасибо, sTa1kEr , давно хотeла с этим разобраться!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)