Я попытался переписать свои Application.cfc
и другие .cfc
файлы в моей системе с помощью cfscript
. Есть несколько вещей, которые я не знаю, как они работают в cfscript. Мне интересно определять переменные внутри функций. Например, функция onRequestStart()
выглядит так:
function onRequestStart(required string thePage) returntype="boolean" output="false" {
var request.appCode = "MyApp";
var request.appName = "Single Page Application";
var page = listLast(arguments.thePage,"/");
var onApplicationStart();
if(!listFindNoCase("Home.cfm,Auth.cfc",page)){
if(structKeyExists(SESSION, "loggedin") AND SESSION.loggedin EQ false){
location(url="https://www.myapp.org", addToken="false");
}
}
return true;
}
Нужно ли мне использовать var
слово в ситуациях, когда я определяю request/session
переменные? Если я сделаю то, что лучше всего, используйте слово var или local.variablename
? local
и variables
одинаковы в cfscript
?
Ничего общего с вопросом. Почему вы вызываете onApplicationStart в начале каждого запроса? — person espresso_coffee schedule 26.06.2018
@Ageax Я использую это в случае, если мне нужно перезапустить переменные приложения. Эта строка закомментирована. Я все еще в процессе разработки. Надеюсь, это имеет смысл. — person espresso_coffee schedule 26.06.2018
Попался. Просто не был уверен, попадет ли он в Prod, что было бы .. плохо — person espresso_coffee schedule 26.06.2018
Кстати, если вы хотите, вы можете перезапустить свое приложение, когда установлен определенный параметр URL. См. stackoverflow.com/a/14362012/432681. — person espresso_coffee schedule 27.06.2018
См. Также: stackoverflow.com/questions/ 47112598 / scope-of-var-and-variables / — person espresso_coffee schedule 04.07.2018
var
используется только для локальных переменных. Это означает, что переменные, которые / не должны быть доступны вне определения функции.Session
иRequest
доступны для каждого сеанса и запроса соответственно. Помещение их вvar
прицел даст ужасные результаты.Вы можете использовать либо
var
, либоlocal
, оба имеют «локальную» область видимости.Variables
— это область действия страницы, и любая переменная, определенная в областиVariables
, будет доступна для всех функций в CFC.Я не был уверен, как это можно заменить в CFML
<cfset structDelete(session,"username")>
, поскольку мне не нужно ничего определять в этом случае, просто вызовите функцию. спасибо за объяснение переменных и масштабов. — person espresso_coffee; 26.06.2018Просто отбросьте cfset и добавьте точку с запятой в конце:
structDelete(session, "username");
— person espresso_coffee; 26.06.2018var
не равен тегу<cfset>
, т.е. вы не можете выполнить простой поиск и замену при переключении на синтаксис CFScript.var
используется только для определений локальных переменных. Это означает, что настройка элементов структуры и массива, таких какrequest
,session
и других переменных области видимости, не должна иметь префиксаvar
. Кроме того, вызовы функций должны быть написаны без символаvar
.local
иvar
относятся к локальной области. Однако обратите внимание, как упоминалось выше, если вы хотите определять переменные черезlocal.something
, ключевое словоvar
также не требуется.variables
, в отличие отlocal
, относится к области страницы, которая доступна из любого места внутри компонента и любых включенных страниц.Для получения дополнительной информации о различных областях вы должны прочтите документацию Adobe.
Хорошие моменты. Определенно не следует использовать var для постоянных областей видимости. Хотя, как ни странно, var ведет себя с постоянными областями действия не так, как с локальными — чего я и ожидал. trycf.com/gist/1e19e31113a38d682a5ca130f10d83d83d — person espresso_coffee; 27.06.2018
Интересный! Обратите внимание, что Adobe ColdFusion и Lucee в этом случае ведут себя по-разному. Очевидно, Adobe ColdFusion просто игнорирует
var
и назначает переменную глобальной области видимости. Люси более последовательна и обрабатываетvar
иlocal.
одинаково, помещая переменные в локальную область видимости. Еще одна интересная вещь, которую следует отметить, заключается в том, что структурная переменная, содержащаяfirstVar
иsecondVar
, определяется автоматически. — person espresso_coffee; 27.06.2018Я не заметил, что поведение Люси было другим. Для меня это обращение имеет больше смысла. Думаю, это не удивительно. Есть несколько областей, таких как области видимости, где работа Adobe CF немного похожа на IMO. — person espresso_coffee; 28.06.2018