В ColdFusion переменные разрешаются в каком порядке? - PullRequest
8 голосов
/ 20 июля 2009

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

Ответы [ 2 ]

19 голосов
/ 11 января 2012

Область заказа

Канонический порядок охвата ColdFusion 9:

  1. Локальный (только внутри ХФУ и UDF)
  2. Аргументы (только внутри ХФУ и UDF)
  3. Нить локальная (только внутри темы)
  4. Запрос (только внутри цикла запроса)
  5. Thread (только внутри потоков и шаблонов, которые вызывают потоки)
  6. Переменные
  7. CGI
  8. Cffile
  9. URL
  10. Форма
  11. Cookie
  12. Клиент

Документацию Adobe можно найти в Разработка приложений ColdFusion 9 .

Однако некоторые области доступны только в определенных контекстах, поэтому порядок поиска областей различается в зависимости от контекста кода.

Внутри CFML (без резьбы)

  1. Переменные
  2. CGI
  3. Cffile
  4. URL
  5. Форма
  6. Cookie
  7. Клиент

Внутри ХФУ (без резьбы)

  1. Местное
  2. Аргументы
  3. Запрос (только внутри цикла запроса)
  4. Переменные
  5. CGI
  6. Cffile
  7. URL
  8. Форма
  9. Cookie
  10. Клиент

Лучшая практика

Как отмечает Аль Эверетт в своем ответе, считается лучшей практикой всегда переменные области видимости. Явная область видимости создает менее неоднозначный код и обычно быстрее. Каждый раз, когда вы не определяете область действия переменной, вы рискуете получить переменную из области, в которую вы не собирались.

Когда переменная, к которой вы обращаетесь, находится в первой области видимости в порядке поиска, на самом деле немного быстрее оставить переменную без области видимости. Это связано с тем, что каждая точка в имени переменной несет небольшую стоимость, поскольку ColdFusion ее разрешает. Например, в методе CFC доступ к myVar немного быстрее, чем local.myVar. Это относится только к:

  • local переменные в пределах CFC или UDF
  • Поток local переменные внутри потока
  • variables переменные в рамках CFML

При всех других обстоятельствах быстрее (и яснее) явно объявить область действия.

Использование этой техники следует считать плохой практикой. Вы должны использовать эту технику только в критичном для производительности коде, где вы можете гарантировать, что переменная всегда существует в предполагаемой области видимости. Имейте в виду, что это происходит за счет повышенной неопределенности.

16 голосов
/ 20 июля 2009

Общепринятая лучшая практика - всегда ограничивать ваши переменные по двум основным причинам:

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

Тем не менее, вот области поиска переменных порядка:

  1. Функция локальная (ключевое слово VAR)
  2. Тема локальная (CFTHREAD)
  3. Результаты запроса
  4. Функция АРГУМЕНТЫ
  5. местные переменные
  6. переменные CGI
  7. переменные FILE
  8. Параметры URL
  9. поля FORM
  10. значения COOKIE
  11. переменные КЛИЕНТА

РЕДАКТИРОВАТЬ: Это также говорит, чтобы отметить, какие области не искали: СЕССИЯ, СЕРВЕР, ПРИЛОЖЕНИЕ

...