Разница между cfparam и cfargument в функции холодного слияния?
В чем разница между этими двумя блоками кода при вызове сразу после тега cffunction:
<cfparam name="bork_bork_bork" default="false">
<cfargument name="bork_bork_bork" required="false" default="false">
4 ответа
<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 или пользовательскую функцию.
Насколько я помню, между тегом cffunction и тегом cfargument не может быть ничего, поэтому они должны появляться сразу после тега cffunction.
Из функции вы получите доступ к cfargument через область аргументов {arguments.bork_bork_bork} или через массив {arguments 1}
cfparam просто гарантирует, что переменная доступна по запросу, и не должна использоваться вместо cfargument. Для дальнейшего чтения проверьте: