Проблемы с областью действия CFQUERY

Насколько я знаю

<cfquery name="groups">

эквивалентно

<cfquery name="VARIABLES.groups">

В моем проекте в разных частях (внутри разных функций) есть cfquery с одинаковыми именами.

Когда было много запросов, я начал получать странные ответы от REST API (Coldfusion), где были разные наборы данных.

Путем экспериментов я понял, что если я перед вызовом cfquery объявлю локальную переменную, то это решит проблему, так как ответ будет записан именно в переменную функции, а не в глобальную переменную.

<cfset var groups = {} /> <cfquery name="groups">

Эта опция корректно работает во всех тестовых случаях.

Мой вопрос: правильно ли объявлять локальную переменную для cfquery внутри функции или есть другие способы избежать моей проблемы?


person Melixion    schedule 22.04.2021    source источник


Ответы (1)


Вы всегда должны использовать (в функции):

<cfset var groups = {} /> 
<cfquery name="groups">

or

<cfquery name="local.groups">

Вы также можете использовать локальную область видимости внутри функций. Без использования var вы фактически создаете глобальную переменную. Использование либо var, либо local внутри функции снова защитит вас от записи переменной вне функции.

person Paul    schedule 22.04.2021
comment
Этот ответ предполагает, что ключевое слово var следует использовать и вне функций. Я не согласен. - person Dan Bracuk; 22.04.2021
comment
В ответе явно говорится либо var, либо local внутри функции. Вопрос также конкретно обсуждался внутри функции. Хотя я выразился яснее. - person Paul; 23.04.2021
comment
Также стоит отметить, что если var/local область видимости локальных имен cfquery в функциях является новостью для OP, то также не забудьте применить ту же дисциплину к другим переменным, объявленным аналогичными тегами, таким как cfloop index переменные, cfquery result и cfhttp result переменные, и имена переменных cfsavecontent. - person Sev Roberts; 25.04.2021