| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Константы php |
| Автор: quiz 14.11.2007, 00:05 | ||
В соседней ветке я привел часть кода своего сайта, где обращался к зачениям массива без кавычек:
На что мне дали ответ: "при обращении без кавычек вы пытаетесь обратиться к константе, которой не существует, а значит php ее создает и присваивает ей строку с ее именем". Это правда? И если да, то насколько подобные неправильные обращения могут замедлить выполнение скриптов? |
| Автор: SelenIT 14.11.2007, 03:18 |
| Все, что генерит нотисы, тормозит весьма ощутимо, особенно в циклах (на phpclub-е как-то тестили обращение к необъявленным переменным - вышло замедление в 4 раза, тут, полагаю, масштаб сопоставим). Но писать чисто, чтоб при error_reporting(E_ALL) в вывод не сыпалось ничего постороннего, нужно не только из-за этого. |
| Автор: BuShaRt 14.11.2007, 10:51 | ||||
| quiz, Откройте учебник по PHP и почитайте, что такое константа. Вопроса честно говоря не поня, автору лень проставлять кавычки, как делают это все?
сдесь тоже ошибка... правильно так
error_reporting(E_ALL) - однозначно... |
| Автор: Alukard 14.11.2007, 12:45 | ||
Я так понимаю, вопрос по этой строчке. Вам правильно сказали, что этот вызов будет искатьконстанту с именем name. Если не находит, php выдает ошибку в любом случае, нужно ставить одинарные кавычки:
|
| Автор: quiz 15.11.2007, 06:33 | ||
Вам для начала нужно научиться понимать вопрос, а потом давать ответ Добавлено через 36 секунд Всем остальным спасибо, буду разбираться |
| Автор: skyboy 15.11.2007, 09:22 |
а смысл использования одноименных констант вместо строк разве не в "экономии" на кавычках? |
| Автор: quiz 15.11.2007, 18:38 | ||
Если это неправильно (а это, как выяснилось, неправильно), то смысла никакого нет. Проблема в том, что у меня 2 мегабайта php-скриптов, в которых практически через строчку используется это неправильное обращение к содержимому массива. Поэтому я и задался таким вопросом - есть ли смысл править тысячи неправильных обращений Видимо все-таки смысл есть. Запустил тестовый цикл - правильные кавычки ускоряют его ровно в 5 раз |
| Автор: skyboy 15.11.2007, 18:42 |
надеюсь, править не вручную собираешься? |
| Автор: flashaa 15.11.2007, 18:49 |
| В продолжение темы оптимизации. Вот тут был такой пример. Двойные кавычки нужны для интерпретации переменных и спецсимволов. Поэтому когда интерпретатор идет по строкам в двойных кавычках, он занимается подстановкой по регулярному выражению, что несколько тормозит процесс. Одинарные же кавычки не интерпретируются, следовательно строки в них будут быстро обработаны. ПОэтому quiz, если будете добавлять кавычки, то непременно добавляйте одинарные! |
| Автор: quiz 15.11.2007, 18:57 | ||
А есть выбор? Пока единственное, что пришло в голову - автозамена [ на [' и ] на '] , но все-равно для кажго случая редактору придется говорить "да" или "нет", потому как в скриптах таких квадратных скобок много, не относящихся к проблеме Плюс придется заменять mysql_query("SELECT * FROM users WHERE id='$test[var]' "); на mysql_query("SELECT * FROM users WHERE id='".$test['var']."' "); (просто кавычки к ключу массива тут не добавить) :( |
| Автор: BuShaRt 15.11.2007, 19:15 |
| flashaa, разница не существенна, но лучше конечно юзать одинарные ковычки. Добавлено через 59 секунд quiz, Если у человека в скриптах такой бардак, то зачем вам эти скрипты? |
| Автор: quiz 15.11.2007, 19:22 | ||
Так это мои скрипты, на которых я учился php с нуля, поэтому там такой бардак. Сейчас стоят на сервере и работают. Вот и думаю как сервер разгрузить |
| Автор: Alukard 15.11.2007, 22:26 |
| Хм, странно, как можно допустить одну и ту же ошибку в массе скриптов, если она вызывает ERROR у PHP, потому что обращаться без кавычек не определив константу нельзя... Но если все-таки нужно все поменять, то придется хорошенько поработать с текстовым редактором, кодом и конечно поиском и заменой... Вот такая вот занудная работа программера бывает иногда) |
| Автор: quiz 16.11.2007, 02:27 | ||
В том и беда, что по умолчанию никаких ошибок не вызывает |
| Автор: SamDark 16.11.2007, 14:40 |
| quiz, Скорее всего потому, что error reporting отключен. |
| Автор: kasmanaft 16.11.2007, 16:38 | ||||
Используйте регулярные выражения.. Неотносящиеся к проблеме скобки можно просто не трогать.
С помощью рег. выражений - всё, что угодно. Но в данном случае ничего заменять не нужно - тут все правильно. |