Разница между cfparam и cfargument в функции холодного синтеза? - PullRequest
2 голосов
/ 24 января 2012

В чем разница между этими двумя блоками кода при вызове сразу после тега cffunction:

<cfparam name="bork_bork_bork" default="false">

<cfargument name="bork_bork_bork" required="false" default="false">

Ответы [ 4 ]

12 голосов
/ 24 января 2012

<cfparam>, при использовании с атрибутом по умолчанию, гарантирует, что переменная существует.Поскольку не указана область действия, bork_bork_bork добавляется в область действия Variables.

<cfargument> используется для передачи аргументов функции.Эти значения хранятся в области действия Arguments.Вы получите доступ к значению, используя arguments.bork_bork_bork.

Обратите внимание, что arguments.bork_bork_bork и bork_bork_bork не совпадают.Область действия arguments находится только внутри функции, другая хранится в области действия Variables и будет действовать в любом месте страницы (хотя я бы не рекомендовал кодировать ее таким образом).

2 голосов
/ 24 января 2012

cfparam не имеет ничего общего с функциями. Я вижу, что это сбивает с толку, учитывая, что параметр / аргумент являются взаимозаменяемыми словами в большинстве языков. Имейте в виду, что пользовательские функции не добавлялись в CF до версии 5, поэтому не было никакого конфликта в использовании cfparam как способа инициализации переменных. Более того, тег cfparam, вероятно, получил свое имя от устаревшей функции ParameterExists () (или наоборот - к тому времени, когда я попал в CF, в версии 4.0 (1999), эта функция уже устарела, поэтому я пропустил историю позади она)

1 голос
/ 24 января 2012

cfparam - это способ установить значение по умолчанию для любой переменной, если переменная еще не существует. Это быстрый способ сделать следующее:

<cfif NOT isDefined('bork_bork_bork')>
    <cfset bork_bork_bork = 'myDefaultSetting'>
</cfif>

cfargument можно использовать только после открывающего тега, чтобы определить аргумент, передаваемый в функцию CFC или пользовательскую функцию.

Насколько я помню, между тегом cffunction и тегом cfargument не может быть ничего, поэтому они должны появляться сразу после тега cffunction.

0 голосов
/ 24 января 2012

Из функции вы получите доступ к cfargument через область аргументов {arguments.bork_bork_bork} или через массив {arguments 1 }

cfparam будет просто гарантировать, что переменная доступна взапрос не должен использоваться вместо аргумента.Для дальнейшего чтения ознакомьтесь:

cfargument

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

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

...