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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Константы php, ключи массивов без кавычек 
:(
    Опции темы
quiz
Дата 14.11.2007, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В соседней ветке я привел часть кода своего сайта, где обращался к зачениям массива без кавычек:

Код

$au = mysql_query("SELECT * FROM users WHERE id='$usid'");
$au = mysql_fetch_array($au);

print $au[name];


На что мне дали ответ: "при обращении без кавычек вы пытаетесь обратиться к константе, которой не существует, а значит php ее создает и присваивает ей строку с ее именем".
Это правда? И если да, то насколько подобные неправильные обращения могут замедлить выполнение скриптов? smile 

Это сообщение отредактировал(а) quiz - 14.11.2007, 00:06
PM MAIL   Вверх
skyboy
Дата 14.11.2007, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



Цитата(quiz @  13.11.2007,  23:05 Найти цитируемый пост)
И если да, то насколько подобные неправильные обращения могут замедлить выполнение скриптов?

не думаю, что сильно уж, но есть проблема: если у тебя индекс массива совпадет с какой-то предопределенной константой(например, "магической константой"; список объявленных констант можно получить с помощью get_defined_constants), то  скрипт может выкинуть нечто экстраординарное...
PM MAIL   Вверх
SelenIT
Дата 14.11.2007, 03:18 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Все, что генерит нотисы, тормозит весьма ощутимо, особенно в циклах (на phpclub-е как-то тестили обращение к необъявленным переменным - вышло замедление в 4 раза, тут, полагаю, масштаб сопоставим). Но писать чисто, чтоб при error_reporting(E_ALL) в вывод не сыпалось ничего постороннего, нужно не только из-за этого.


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


Эксперт
***


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

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



quiz, 
Откройте учебник по PHP и почитайте, что такое константа.

Вопроса честно говоря не поня, автору лень проставлять кавычки, как делают это все?

Код

mysql_query("SELECT * FROM users WHERE id='$usid'");


сдесь тоже ошибка... правильно так 

Код

mysql_query("SELECT * FROM users WHERE id='".$usid."'");


error_reporting(E_ALL) - однозначно...

Это сообщение отредактировал(а) BuShaRt - 14.11.2007, 10:52
PM MAIL   Вверх
Alukard
Дата 14.11.2007, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(quiz @  14.11.2007,  00:05 Найти цитируемый пост)
print $au[name];


Я так понимаю, вопрос по этой строчке. Вам правильно сказали, что этот вызов будет искатьконстанту с именем name. Если не находит, php выдает ошибку в любом случае, нужно ставить одинарные кавычки: 

Код

print $au['name'];


--------------------
Блог блогу рознь: Алукардные РецептыPHP, Операционные системы, Россия & США...etc.
PM MAIL   Вверх
quiz
Дата 15.11.2007, 06:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(BuShaRt @ 14.11.2007,  10:51)
Вопроса честно говоря не поня, автору лень проставлять кавычки, как делают это все?

Вам для начала нужно научиться понимать вопрос, а потом давать ответ  smile

Добавлено через 36 секунд
Всем остальным спасибо, буду разбираться
PM MAIL   Вверх
skyboy
Дата 15.11.2007, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



Цитата(quiz @  15.11.2007,  05:33 Найти цитируемый пост)
Вам для начала нужно научиться понимать вопрос

а смысл использования одноименных констант вместо строк разве не в "экономии" на кавычках? 
PM MAIL   Вверх
quiz
Дата 15.11.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(skyboy @ 15.11.2007,  09:22)
а смысл использования одноименных констант вместо строк разве не в "экономии" на кавычках?

Если это неправильно (а это, как выяснилось, неправильно), то смысла никакого нет.
Проблема в том, что у меня 2 мегабайта php-скриптов, в которых практически через строчку используется это неправильное обращение к содержимому массива. Поэтому я и задался таким вопросом - есть ли смысл править тысячи неправильных обращений smile 

Видимо все-таки смысл есть. Запустил тестовый цикл - правильные кавычки ускоряют его ровно в 5 раз smile 
PM MAIL   Вверх
skyboy
Дата 15.11.2007, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



Цитата(quiz @  15.11.2007,  17:38 Найти цитируемый пост)
есть ли смысл править тысячи неправильных обращений 

надеюсь, править не вручную собираешься? smile 
PM MAIL   Вверх
flashaa
Дата 15.11.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В продолжение темы оптимизации.
Вот тут был такой пример.
Цитата(BuShaRt @  14.11.2007,  10:51 Найти цитируемый пост)
mysql_query("SELECT * FROM users WHERE id='".$usid."'");

Двойные кавычки нужны для интерпретации переменных и спецсимволов. Поэтому когда интерпретатор идет по строкам в двойных кавычках, он занимается подстановкой по регулярному выражению, что несколько тормозит процесс. Одинарные же кавычки не интерпретируются, следовательно строки в них будут быстро обработаны.
ПОэтому quiz, если будете добавлять кавычки, то непременно добавляйте одинарные!  smile  smile 

PM MAIL   Вверх
quiz
Дата 15.11.2007, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(skyboy @ 15.11.2007,  18:42)
надеюсь, править не вручную собираешься? smile

А есть выбор? Пока единственное, что пришло в голову - автозамена [ на [' и ] на '] , но все-равно для кажго случая редактору придется говорить "да" или "нет", потому как в скриптах таких квадратных скобок много, не относящихся к проблеме

Плюс придется заменять mysql_query("SELECT * FROM users WHERE id='$test[var]' "); на mysql_query("SELECT * FROM users WHERE id='".$test['var']."' "); (просто кавычки к ключу массива тут не добавить) :(
PM MAIL   Вверх
BuShaRt
Дата 15.11.2007, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



flashaa, 
разница не существенна, но лучше конечно юзать одинарные ковычки.

Добавлено через 59 секунд
quiz, 
Если у человека в скриптах такой бардак, то зачем вам эти скрипты?
PM MAIL   Вверх
quiz
Дата 15.11.2007, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(BuShaRt @  15.11.2007,  19:15 Найти цитируемый пост)
Если у человека в скриптах такой бардак, то зачем вам эти скрипты? 

Так это мои скрипты, на которых я учился php с нуля, поэтому там такой бардак. 
Сейчас стоят на сервере и работают. Вот и думаю как сервер разгрузить
PM MAIL   Вверх
Alukard
Дата 15.11.2007, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Хм, странно, как можно допустить одну и ту же ошибку в массе скриптов, если она вызывает ERROR у PHP, потому что обращаться без кавычек не определив константу нельзя...
Но если все-таки нужно все поменять, то придется хорошенько поработать с текстовым редактором, кодом и конечно поиском и заменой...
Вот такая вот занудная работа программера бывает иногда)
--------------------
Блог блогу рознь: Алукардные РецептыPHP, Операционные системы, Россия & США...etc.
PM MAIL   Вверх
quiz
Дата 16.11.2007, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Alukard @ 15.11.2007,  22:26)
Хм, странно, как можно допустить одну и ту же ошибку в массе скриптов, если она вызывает ERROR у PHP, потому что обращаться без кавычек не определив константу нельзя...
Но если все-таки нужно все поменять, то придется хорошенько поработать с текстовым редактором, кодом и конечно поиском и заменой...
Вот такая вот занудная работа программера бывает иногда)

В том и беда, что по умолчанию никаких ошибок не вызывает

Это сообщение отредактировал(а) quiz - 16.11.2007, 02:28
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1469 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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