В Coldfusion cfc, каково название объема набора переменных за пределами функции?

В компоненте Coldfusion / CFC, я хочу правильно определить объем некоторых переменных, чтобы быть доступным для всех содержавших функций, но быть скрытым или заблокированным из внешних сценариев. Каково название объема памяти cfc? Это - 'переменные'? Это доступно в содержавшей функции? Это заблокировано снаружи cfc?

(Примеры в CF 8)

Страница Calling:

<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>

Одобрены дополнительные предложения лучшей практики. Это было долгое время, так как я сделал это.Заранее спасибо.

7
задан Dan Sorensen 17 December 2009 в 19:49
поделиться

4 ответа

В компоненте ColdFusion все общедоступные имена находятся в области This , а все частные имена находятся в области Переменные область видимости. Имена могут включать как «обычные» свойства переменных, так и методы «UDF». В компоненте ColdFusion области This и Переменные относятся к для каждого экземпляра и не используются совместно между экземплярами.

Вне компонента ColdFusion, вы можете использовать любые публичные имена (имена, которые будут доступны в компоненте в области This ), используя нотацию структуры. Вы не можете получить доступ к каким-либо частным именам.

Область действия по умолчанию всегда Переменные - внутри компонента, вне компонента, внутри UDF, внутри метода компонента и т. Д.

Обратите внимание, что там нет такой вещи, как "память". Есть именованных областей, но нет областей памяти.

14
ответ дан 6 December 2019 в 07:06
поделиться
<cfcomponent>
<cfset this.mode = "development">
</cfcomponent>

Страница вызова:

<cfset c = createObject("component","myComponent")>
<cfoutput>
#c.Mode#
</cfoutput>
1
ответ дан 6 December 2019 в 07:06
поделиться

Возможно, мне придется ответить на свой вопрос, чтобы найти его в следующий раз, когда он мне понадобится здесь, в StackOverflow. Я не уверен, но думаю, как это делается. (Как всегда, исправления и предложения приветствуются!)

<cfcomponent>
    <!--- Server Mode: production | development - used for differing paths and such --->
    <cfset variables.mode = "development">

    <cffunction name="init" access="public">
        <cfargument name="settings" type="struct" required="no">
        <cfset StructAppend(variables, arguments.settings)>
        <cfreturn this>
    </cffunction>

    <cffunction name="getMode" access="public">
        <cfreturn variables.mode>
    </cffunction>

</cfcomponent>

Вызывающая страница:

<cfset c = createObject("component","myComponent").init()>
<cfoutput>
    <!--- Should output "development" --->
    #c.getMode()#
</cfoutput>
3
ответ дан 6 December 2019 в 07:06
поделиться

Да, это область видимости переменных по умолчанию.

<cfcomponent output="false">
    <cfset variables.mode = "development">

    <cffunction name="getMode" output="false">
        <cfreturn variables.mode>
    </cffunction>
</cfcomponent>

Это хорошая идея, чтобы охватить все ваши переменные в cffunctions в CFC.

Не забудьте output = "false", это сократит много пробелов, генерируемых CF. Я обычно не использую access = "public", поскольку это значение по умолчанию.

Если вам нужна лучшая документация, когда другие просматривают ваш CFC, вы можете даже подумать об использовании

<cfcomponent output="false">
    <cfproperty name="mode" type="string" default="development" hint="doc...">

    <cfset variables.mode = "development">

    <cffunction name="getMode" output="false">
        <cfreturn variables.mode>
    </cffunction>
</cfcomponent>
7
ответ дан 6 December 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: