Разница между cfparam и cfargument в функции холодного слияния?
-
12-11-2019 - |
Вопрос
В чем разница между этими двумя блоками кода, вызываемыми сразу после тега cffunction:
<cfparam name="bork_bork_bork" default="false">
<cfargument name="bork_bork_bork" required="false" default="false">
Решение
<cfparam>
, при использовании с атрибутом по умолчанию, гарантирует существование переменной.Поскольку область действия не указана, bork_bork_bork
вводится в Variables
объем.
<cfargument>
используется для передачи аргументов функции.Эти значения хранятся в Arguments
объем.Вы получите доступ к значению, используя arguments.bork_bork_bork
.
Обратите внимание, что arguments.bork_bork_bork
и bork_bork_bork
не одинаковы.Объем arguments
находится только внутри функции, другой хранится в Variables
область действия и будет действителен в любом месте страницы (хотя я бы не рекомендовал кодировать его таким образом).
Другие советы
cfparam не имеет ничего общего с функциями.Я вижу, что это запутано, учитывая, что параметр / аргумент являются взаимозаменяемыми словами на большинстве языков.Имейте в виду, что пользовательские функции не были добавлены в CF до версии 5, поэтому не было никакого конфликта при использовании CFParam в качестве способа инициализации переменных.Более того, тег CFParam, вероятно, нарисовал свое имя из сейчас устаревшей функции, Parameterexists () (или наоборот - к тому времени, когда я попал в CF, по версии 4.0 (1999), эта функция уже устарела, поэтому я пропустил историю позадиЭто)
CFParam - это способ установить по умолчанию для любой переменной, если переменная уже не существует.Это ярлык, чтобы сделать следующее:
<cfif NOT isDefined('bork_bork_bork')>
<cfset bork_bork_bork = 'myDefaultSetting'>
</cfif>
.
Cfargument используется только после открытия тега, чтобы определить аргумент, передаваемый в функцию CFC или пользовательскую функцию.
Из того, что я вспоминаю, между тегом CFFUNCUNT и CFARGument ничто не может существовать, поэтому они должны отображаться сразу после тега Cffpunction.
Изнутри функции вы получите доступ к CFARGument через аргументы Scope {Arguments.bork_bork_bork} или через массив {аргументы
CFParam просто гарантирует, что переменная доступен по запросу, не должен использоваться вместо CFARGument.Для дальнейшего чтения Проверьте: