Разница между 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. Для дальнейшего чтения проверьте:

cfargument

Использование области аргументов в качестве массива

Определение функций с помощью тега cffunction

Другие вопросы по тегам