Я попытался переписать свои 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