Есть ли разница между объявлением переменной в областях LOC, VAR и VARIABLES? - PullRequest
2 голосов
/ 22 ноября 2010

Я вижу все три обозначения, используемые часто, и мне интересно, какие различия между ними:

<cfset var foo = "bar" />
<cfset local.foo = "bar" />
<cfset variables.foo = "bar" />
<cfset arguments.foo = "bar" />

Ответы [ 3 ]

13 голосов
/ 22 ноября 2010

var и local имеют одинаковую область видимости и доступны только для метода / функции, в которых они объявлены. Локальная область действия является новой для CF 9 до того, как вы использовали var для создания переменных, которые существовали только в методе.

Переменные доступны для всей страницы cfc или cfm, на которой они объявлены, и для любых включенных шаблонов.

arguments используется для аргументов, передаваемых в метод / функцию, и существует только в нем.

3 голосов
/ 22 ноября 2010

Если вам интересно, зачем использовать local над var, например, в функции CFC, рассмотрите два следующих примера:

<cffunction name="foo" returntype="query" output="false">

  <cfset var myQuery = "" />

  <cfquery name="myQuery">
    select * from bar
  </cfquery>

  <cfreturn myQuery />

</cffunction>

Сначала вы должны объявить переменную как var, а затем использовать его.Сравните это с:

<cffunction name="foo" returntype="query" output="false">

  <cfquery name="local.myQuery">
    select * from bar
  </cfquery>

  <cfreturn local.myQuery />

</cffunction>

По сути, он исключает все эти var операторы для переменных цикла, запросов и т. Д. Еще одна строка кода!:)

Надеюсь, это поможет.

1 голос
/ 22 ноября 2010

Во-первых, я думаю, что вы имеете в виду local область, а не loc (я не знаю о области, называемой loc)

<cfset var foo = "bar" />
<cfset local.foo = "bar" />

Предполагается, что она точно такая же.Переменная будет приватной в функции, в которой она определена.

Область действия переменных в CFC создаст переменную private в экземпляре CFC (в отличие от функции)

Я думаю, что за пределами CFC область видимости переменных будет закрытой в шаблоне, в котором она создана.

...