Короткий ответ на ваш вопрос заключается в том, что нет, вы, вероятно, не столкнетесь с проблемой, пытающейся это сделать. Вне контекста UDF (даже находящегося внутри CFC) заявление о множестве с ограниченным охватом подразумевает область переменных.
Кроме того, в CFC область переменных доступна для всех ее функций; это своего рода глобальная область действия внутри этого CFC, аналогичная «этой» области, за исключением области переменных, сродни «частным» переменным, тогда как эта область сродни общедоступным переменным.
Чтобы проверить это, создать test.cfc:
<cfcomponent>
<cfset foo = "bar" />
<cffunction name="dumpit" output="true">
<cfdump var="#variables#" label="cfc variables scope">
<cfdump var="#this#" label="cfc this scope">
</cffunction>
</cfcomponent>
и страницу, чтобы проверить его, test.cfm:
<cfset createObject("component", "test").dumpit() />
И результаты будут:
Теперь, чтобы решить другую проблему, я вижу в вашем примере кода ...
В CF все пользовательские функции имеют специальную неименованную область видимости, обычно называемую областью «var». Если вы выполните следующие действия внутри ОДС:
<cfset foo = "bar" />
Тогда вы говорите CF поставить эту переменную в область вар.
Для соединения вещи немного, вы можете столкнуться с проблемами (значения переменных меняется, когда вы не ожидали их к), когда вы не с использованием сферы уага в ваших встроенных пользовательских функциях.
Так эмпирическое правило всегда, всегда, ВСЕГДА, ВСЕГДА вар-Scope ваши функции-внутренние переменные (включая имена запросов).Существует инструмент под названием varScoper, который поможет вам найти переменные, которые должны быть расширены. Последнее, что я проверил, было не идеальным, но это определенно начало.
Однако Сообщить об ошибке Идея ссылаться (отображать/использовать) переменные без области видимости (очевидно, за исключением переменных с переменным переменным, поскольку вы не можете указать область действия для чтения) в CFC или даже на вашем стандартных страниц CFM. Начиная с CF7, было 9 областей, которые были проверены в определенном порядке, когда вы читаете переменную без указания области, первое совпадение выигрывает. С CF8 в этом списке может быть больше областей, я не проверял. Когда вы это делаете, вы рискуете получить ценность из одной области действия, когда вы ожидаете ее от другой; который является кошмаром для отладки ... Уверяю вас. ;)
Короче говоря: , подразумевающий сфера переменной (на множестве) - не страшная идея (хотя я обычно указываю ее в любом случае); но inferring сфера переменной (по чтению) запрашивает проблемы.
Да, аргументы имеют приоритет над переменной экземпляра. Я в порядке с этим. Это согласуется с другими языками, где мне придется использовать это или я, чтобы ссылаться на переменную экземпляра, а не на аргумент. – 2008-09-12 18:26:25