Coldfusion 结构中的会话变量';与';类型'';数组';
嗨,我有一个名为“tsks_会话”的CFC/组件,它执行会话任务。在这个cfc/init()函数中,创建了一个包含应用程序所需的所有变量的结构。其中一些变量是数组类型Coldfusion 结构中的会话变量';与';类型'';数组';,coldfusion,Coldfusion,嗨,我有一个名为“tsks_会话”的CFC/组件,它执行会话任务。在这个cfc/init()函数中,创建了一个包含应用程序所需的所有变量的结构。其中一些变量是数组类型 <cfcomponent > <cffunction name="init"> <cfargument name="structKey" > <cflock timeout="35" > <cfset SESS
<cfcomponent >
<cffunction name="init">
<cfargument name="structKey" >
<cflock timeout="35" >
<cfset SESSION = structNew() >
<cfset SESSION.bar_code = "" >
<cfset SESSION.price = "" >
<cfset SESSION.pub_date = "01/01/1900" >
<cfset SESSION.author = ArrayNew() >
<cfset SESSION.title = ArrayNew() >
<cfset SESSION.[bar_code_subj_pric] = structNew() > <!--- key = concatanation of
bar_code and price --->
<cfset SESSION.[bar_code_subj_pric].author = ArrayNew() >
<cfset SESSION.[bar_code_subj_pric].title = ArrayNew() >
</cflock>
</cffunction>
<!---getter--->
<cffunction name="getAuthor" returntype="array" access="public" output="false">
<cfscript>return SESSION.author; </cfscript>
</cffunction>
<!---setter:adding the Array/"author" to the structue/"SESSION.[bar_code_subj_pric]" --->
<cffunction name="setAuthor" retuntype="void" access="public" output="false">
<cfargument name="bar_code_subj_pric" type="string" required="true">
<cfargument name="author" type="array" required="true">
<cfset var q = "" >
<cfparam name="author" default="" >
<cfloop index="i" from="1" to="arrayLen(SESSION.[bar_code_subj_pric].author)">
<cfset SESSION.author = ArrayAppend(SESSION.[bar_code_subj_pric].author,"#arguments.author#")>
</cfloop>
</cffunction>
<!---getter.title--->
<cffunction name="gettitle" returntype="array" access="public" output="false">
<cfscript>return SESSION.title; </cfscript>
</cffunction>
<!---setter:adding the Array/"title" to the structue/"SESSION.[bar_code_subj_pric]" --->
<cffunction name="settitle" retuntype="void" access="public" output="false">
<cfargument name="bar_code_subj_pric" type="string" required="true">
<cfargument name="title" type="array" required="true">
<cfset var q = "" >
<cfparam name="title" default="" >
<cfloop index="i" from="1" to="arrayLen(SESSION.[bar_code_subj_pric].title)">
<cfset SESSION.title = ArrayAppend(SESSION.[bar_code_subj_pric].title,"#arguments.title#")>
</cfloop>
</cffunction>
</cfcomponent>
返回SESSION.author;
返回会话.title;
1) 在显示页面上,已实例化cfc,
我创建了一个名为
<cfset str[expld133] =structnew()>
当我输出函数setAuthor(“expld133”,Kelly)/setTitle(“expld133”,33.22)时,我得到“我没有传递数组类型的值”。
请告诉我怎么了
2) 我可以创建一个名为“会话”的结构吗?它安全吗
3) 我将两个不同的数组(作者/标题)添加到主结构“SESSION.[bar_code_sub_pric]”中的方式是否有错误?对于问题1,我认为失败的一行可能是以下两行之一:
setAuthor("expId133", Kelly);
setTitle("expId133", 33.22);
这两种方法都希望数组对象作为第二个参数;但在第一种情况下,传递一个名为“Kelly”的变量,在第二种情况下传递一个数字。如果“Kelly”应该是值,而不是变量名,则必须引用它(“Kelly”
不是Kelly
),但这仍然不是数组。如果您希望它是一个包含1个字符串“Kelly”的数组,那么您将传递[“Kelly”]
,假设您使用的是CF8或更高版本
对于问题2,您可以创建一个名为“SESSION”的变量(它将进入组件的变量范围),并且它是“安全的”。。。但我强烈建议不要这样做。你只是想引起混乱。此外,它(结构)不会存储在会话范围中(除非组件存储在那里)。为什么不直接使用会话范围呢?为什么要创建一个名为“SESSION”的新结构
对于问题3,我不确定这是否是有效的语法,但我猜不是。请尝试以下任一方法:
SESSION[bar_code_subj_pric] = foo;
这将使用bar\u code\u subc\u pric
作为变量,其值将是结构键名称。因此,如果bar\u code\u subc\u pric
的计算结果为4,则整个语句的计算结果为:session.4=foo代码>
另一方面,该代码:
SESSION.bar_code_subj_pric = foo;
//this is also equivalent to:
//SESSION["bar_code_subj_pric"] = foo;
。。。在会话结构中创建一个名为“bar_code_subc_pric”的键,其值为foo变量/object