您好我有一个名为“tsks_Session”的CFC /组件,它执行会话任务。在这个cfc / init()函数中,创建了一个包含应用程序中所需的所有变量的结构。一些变量是数组类型。
<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>
1)在显示页面上,已经实现了cfc, 我创建了一个名为
的str<cfset str[expld133] =structnew()>
当我输出函数setAuthor(“expld133”,Kelly)/ setTitle(“expld133”,33.22)时,我得到"The value that i am not passing an array type".
请告诉我什么是错的?
2)我可以创建一个名为“SESSION”的结构是否安全?
3)我在主体结构“SESSION。[bar_code_subj_pric]”中添加2个不同的数组(作者/标题)的方式有错误吗?
答案 0 :(得分:3)
对于问题#1,我认为失败的行可能是这两者之一:
setAuthor("expId133", Kelly);
setTitle("expId133", 33.22);
两种方法都期望数组对象为第二个参数;但是你在第一种情况下传递一个名为“Kelly”的变量,在第二种情况下传递一个数字。如果“Kelly”应该是值,而不是变量名,则必须引用它("Kelly"
而不是Kelly
),但这仍然不是数组。如果你想让它成为一个包含1个字符串“Kelly”的数组,那么假设你正在使用CF8或更高版本,那么你将通过["Kelly"]
。
对于问题#2,你可以创建一个名为“SESSION”的变量(它将进入组件的VARIABLES范围),它是“安全的”...但我强烈建议不要它。你只是要求混淆。此外,它(结构)将不会存储在会话范围内(除非组件存储在那里)。为什么不直接使用会话范围?为什么要创建一个名为“SESSION”的新结构?
对于问题#3,我不确定这是否是有效的语法,但我猜不会。尝试以下任何一种:
SESSION[bar_code_subj_pric] = foo;
这将使用bar_code_subj_pric
作为变量,其值将是结构键名。因此,如果bar_code_subj_pric
的计算结果为4,则整个语句的计算结果为:session.4 = foo;
另一方面,这段代码:
SESSION.bar_code_subj_pric = foo;
//this is also equivalent to:
//SESSION["bar_code_subj_pric"] = foo;
...在SESSION结构中创建一个名为“bar_code_subj_pric”的键,其值为foo变量/ object。