![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| quiz |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 15.8.2005 Репутация: нет Всего: нет |
В соседней ветке я привел часть кода своего сайта, где обращался к зачениям массива без кавычек:
На что мне дали ответ: "при обращении без кавычек вы пытаетесь обратиться к константе, которой не существует, а значит php ее создает и присваивает ей строку с ее именем". Это правда? И если да, то насколько подобные неправильные обращения могут замедлить выполнение скриптов? Это сообщение отредактировал(а) quiz - 14.11.2007, 00:06 |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
не думаю, что сильно уж, но есть проблема: если у тебя индекс массива совпадет с какой-то предопределенной константой(например, "магической константой"; список объявленных констант можно получить с помощью get_defined_constants), то скрипт может выкинуть нечто экстраординарное... |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
Все, что генерит нотисы, тормозит весьма ощутимо, особенно в циклах (на phpclub-е как-то тестили обращение к необъявленным переменным - вышло замедление в 4 раза, тут, полагаю, масштаб сопоставим). Но писать чисто, чтоб при error_reporting(E_ALL) в вывод не сыпалось ничего постороннего, нужно не только из-за этого.
-------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| BuShaRt |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
quiz,
Откройте учебник по PHP и почитайте, что такое константа. Вопроса честно говоря не поня, автору лень проставлять кавычки, как делают это все?
сдесь тоже ошибка... правильно так
error_reporting(E_ALL) - однозначно... Это сообщение отредактировал(а) BuShaRt - 14.11.2007, 10:52 |
||||
|
|||||
| Alukard |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 14.11.2006 Репутация: нет Всего: нет |
Я так понимаю, вопрос по этой строчке. Вам правильно сказали, что этот вызов будет искатьконстанту с именем name. Если не находит, php выдает ошибку в любом случае, нужно ставить одинарные кавычки:
--------------------
Блог блогу рознь: Алукардные РецептыPHP, Операционные системы, Россия & США...etc. |
|||
|
||||
| quiz |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 15.8.2005 Репутация: нет Всего: нет |
Вам для начала нужно научиться понимать вопрос, а потом давать ответ Добавлено через 36 секунд Всем остальным спасибо, буду разбираться |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
||||
|
||||
| quiz |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 15.8.2005 Репутация: нет Всего: нет |
Если это неправильно (а это, как выяснилось, неправильно), то смысла никакого нет. Проблема в том, что у меня 2 мегабайта php-скриптов, в которых практически через строчку используется это неправильное обращение к содержимому массива. Поэтому я и задался таким вопросом - есть ли смысл править тысячи неправильных обращений Видимо все-таки смысл есть. Запустил тестовый цикл - правильные кавычки ускоряют его ровно в 5 раз |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
||||
|
||||
| flashaa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
В продолжение темы оптимизации.
Вот тут был такой пример. Двойные кавычки нужны для интерпретации переменных и спецсимволов. Поэтому когда интерпретатор идет по строкам в двойных кавычках, он занимается подстановкой по регулярному выражению, что несколько тормозит процесс. Одинарные же кавычки не интерпретируются, следовательно строки в них будут быстро обработаны. ПОэтому quiz, если будете добавлять кавычки, то непременно добавляйте одинарные! |
|||
|
||||
| quiz |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 15.8.2005 Репутация: нет Всего: нет |
А есть выбор? Пока единственное, что пришло в голову - автозамена [ на [' и ] на '] , но все-равно для кажго случая редактору придется говорить "да" или "нет", потому как в скриптах таких квадратных скобок много, не относящихся к проблеме Плюс придется заменять mysql_query("SELECT * FROM users WHERE id='$test[var]' "); на mysql_query("SELECT * FROM users WHERE id='".$test['var']."' "); (просто кавычки к ключу массива тут не добавить) :( |
|||
|
||||
| BuShaRt |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
flashaa,
разница не существенна, но лучше конечно юзать одинарные ковычки. Добавлено через 59 секунд quiz, Если у человека в скриптах такой бардак, то зачем вам эти скрипты? |
|||
|
||||
| quiz |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 15.8.2005 Репутация: нет Всего: нет |
||||
|
||||
| Alukard |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 14.11.2006 Репутация: нет Всего: нет |
Хм, странно, как можно допустить одну и ту же ошибку в массе скриптов, если она вызывает ERROR у PHP, потому что обращаться без кавычек не определив константу нельзя...
Но если все-таки нужно все поменять, то придется хорошенько поработать с текстовым редактором, кодом и конечно поиском и заменой... Вот такая вот занудная работа программера бывает иногда) --------------------
Блог блогу рознь: Алукардные РецептыPHP, Операционные системы, Россия & США...etc. |
|||
|
||||
| quiz |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 15.8.2005 Репутация: нет Всего: нет |
В том и беда, что по умолчанию никаких ошибок не вызывает Это сообщение отредактировал(а) quiz - 16.11.2007, 02:28 |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |