Определение переменных в cfscript ColdFusion?

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

См. также:  Как я могу вызвать функцию RefreshCache с помощью Lambda?
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. espresso_coffee

    var используется только для локальных переменных. Это означает, что переменные, которые / не должны быть доступны вне определения функции. Session и Request доступны для каждого сеанса и запроса соответственно. Помещение их в var прицел даст ужасные результаты.

    Вы можете использовать либо var, либо local, оба имеют «локальную» область видимости. Variables — это область действия страницы, и любая переменная, определенная в области Variables, будет доступна для всех функций в CFC.

    function onRequestStart(required string thePage) returntype="boolean" output="false" {
        request.appCode = "MyApp";
        request.appName = "Single Page Application";
        var page = listLast(arguments.thePage,"/");
      //this is a function call and not variable declaration.   
      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;
    }   
    

    Я не был уверен, как это можно заменить в CFML <cfset structDelete(session,"username")>, поскольку мне не нужно ничего определять в этом случае, просто вызовите функцию. спасибо за объяснение переменных и масштабов. person espresso_coffee; 26.06.2018

    Просто отбросьте cfset и добавьте точку с запятой в конце: structDelete(session, "username"); person espresso_coffee; 26.06.2018

  2. espresso_coffee

    var не равен тегу <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

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: