在 cfscript ColdFusion 中定义变量?

Defining variables in cfscript ColdFusion?

我试图用 cfscript 重写我的 Application.cfc 和系统中的其他 .cfc 文件。有几件事我不确定它们在 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;
    }

在定义 request/session 变量的情况下是否需要使用 var 词?如果我做什么是最佳做法,使用 var word 还是使用 local.variablenamelocalvariablescfscript 中是否相同?

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

您可以使用 varlocal,两者都有 '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;
}   

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

var 仅用于局部变量定义。这意味着,设置结构和数组项,如 requestsession 和其他范围变量不应以 var 为前缀。 此外,函数调用必须在没有前面 var.

的情况下编写

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

variables,与 local 相反,指的是页面范围,可以从组件内的任何地方和任何包含的页面访问。

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