The Variables scope in a CFC is private to the CFC. It includes variables defined in the CFC body (initialization or constructor code) and in the CFC methods. When you set Variables scope variables in the CFC, they cannot be seen by pages that invoke the CFC.
The CFC Variables scope does not include any of the Variables scope variables that are declared or available in the page that instantiates or invokes the CFC. However, you can make the Variables scope of the page that invokes a CFC accessible to the CFC by passing Variables as an argument to the CFC method.
You set a Variables scope variable by assigning a value to a name that has the Variables prefix or no prefix.
Values in the Variables scope last as long as the CFC instance exists, and therefore can last between calls to CFC instance methods.
The Variables scope is available to included pages, and Variables scope variables that are declared in the included page are available in the component page.
Note: The Variables scope is not the same as the var keyword, which makes variables private within a function. You should always define function-local variables using the var keyword.
The following example shows how to make the Variables scope of the page that invokes a CFC accessible to the CFC by passing Variables as an argument to the CFC method. It also illustrates that the Variables scope is private to the CFC.
The following code is for the callGreetMe.cfm page:
<cfset Variables.MyName="Wilson"> <cfobject component="greetMe" name="myGreetings"> <cfoutput> Before invoking the CFC, Variables.Myname is: #Variables.MyName#.<br> Passing Variables scope to hello method. It returns: #myGreetings.hello(Variables.MyName)#.<br> After invoking the CFC, Variables.Myname is: #Variables.MyName#.<br> </cfoutput> <cfinvoke component="greetMe" method="VarScopeInCfc">
The following code is for the greetMe CFC:
<cfcomponent> <cfset Variables.MyName="Tuckerman"> <cffunction name="hello"> <cfargument name="Name" Required=true> <cfset Variables.MyName="Hello " & Arguments.Name> <cfreturn Variables.MyName> </cffunction> <cffunction name="VarScopeInCfc"> <cfoutput>Within the VarScopeInCfc method, Variables.MyName is: #variables.MyName#<br></cfoutput> </cffunction> </cfcomponent>
In this example, the callGreetMe.cfm page does the following:
When you browse the callGreetMe.cfm page, the following appears:
Before invoking the CFC, Variables.Myname is: Wilson. Passing Variables scope to hello method. It returns: Hello Wilson. After invoking the CFC, Variables.Myname is: Wilson. Within the VarScopeInCfc method, Variables.MyName is: Tuckerman