In a Coldfusion component / CFC, I want to properly scope some variables to be available for all contained functions, but to be hidden or blocked from outside scripts. What is the name of the cfc's memory scope? Is it 'variables'? Is that available inside a contained function? Is it blocked from outside the cfc?
(Examples in CF 8)
Calling page:
<cfset settings = structNew()>
<cfset util = createObject("component", "myUtils").init(settings)>
<cfoutput>
#util.myFunction()#
</cfoutput>
myUtils.cfc:
<cfcomponent>
<!--- Need to set some cfc global vars here --->
<cffunction name="init" access="public">
<cfargument name="settings" type="struct" required="no">
<!--- I need to merge arguments.settings to the cfc global vars here --->
<cfreturn this>
</cffunction>
<cffunction name="myFunction" access="public">
<cfset var result = "">
<!--- I need to access the cfc global vars here for init settings --->
<cfreturn result>
</cffunction>
</cfcomponent>
Additional best practice suggestions are welcomed. It's been quite a while since I've done this. Thanks in advance.
Within a ColdFusion component, all public names are in the This
scope and all private names are in the Variables
scope. Names may include both "normal" variable properties as well as "UDF" methods. Within a ColdFusion component, the This
and Variables
scopes are per-instance and are not shared between instances.
Outside a ColdFusion component, you may use any public names (names that would be available within the component in the This
scope) using the struct notation. You may not access any private names.
The default scope is always Variables
- within a component, outside of a component, within a UDF, within a component method, etc.
Note that there is no such thing as a "memory" scope. There are named scopes, but not memory scopes.