在cfscript ColdFusion中定义变量?

时间:2018-06-26 13:59:00

标签: variables coldfusion cfml coldfusion-2016

我尝试使用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 word或使用local.variablenamelocal中的variablescfscript是否相同?

2 个答案:

答案 0 :(得分:6)

var仅用于局部变量。这意味着在函数定义之外不可访问的变量。 SessionRequest分别可用于每个会话和请求。将它们放在var范围内会产生可怕的结果。

您可以使用varlocal,它们都具有“本地”范围。 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;
}   

答案 1 :(得分:3)

var 等于<cfset>标签,即,切换到CFScript语法时,您无法进行简单的搜索和替换。

var仅用于局部变量定义。这意味着,设置结构和数组项(例如requestsession和其他范围变量)不应以var为前缀。 另外,函数调用必须写在var之前。

localvar均引用本地范围。尽管要注意,如上所述,但是如果您想通过local.something定义变量,则也不需要var关键字。

variableslocal相反,是指页面范围,可从组件内的任何位置以及任何包含的页面访问该页面范围。

有关不同范围的更多信息,您应该read the Adobe docs