我最近开始使用一个cfc组件在Session变量中存储用户信息。我过去常常将它们作为单独的变量存储在会话中,比如Session.UserId、Session.Firstname或Session.Lastname。这个新组件很好地将所有这些都封装到一个组件中,其中包含我需要的每个值的get方法(即Session.User.getUserId()、Session.User.GetName()等)。
但是,当我执行会话变量的cfdump以进行调试时,它会显示对象结构的元数据。我想看看组件的get方法返回的值。有没有办法使用cfdump输出函数值和对象元数据?
发布于 2013-03-25 12:53:17
有没有使用cfdump输出函数值和对象元数据的方法?
是的,使用访问器。
<cfcomponent accessors="true">
<cfproperty name="userID">
<cfproperty name="firstName">
<cfproperty name="lastName">
</cfcomponent>尝试<cfdump>此对象,您将看到属性值。
发布于 2013-03-25 12:18:00
<cfdump>不是魔术,它所做的只是输出你给它的值。由于您的CFC实例没有公开任何反映这些值的公共属性,因此<cfdump>无法知道它们是什么。
如果您需要一次性提取反映以前会话作用域的所有私有属性,那么您需要创建一个方法来执行此操作,然后<cfdump>该方法。例如:
public struct function getVariables(){
return variables;
}如果你想进一步抽象你想要的值,比如variables.sessionStuff (variables.sessionStuff.userId,variables.sessionStuff.name等),那么编写一个返回variables.sessionStuff的方法getSessionStuff()。
发布于 2013-03-26 17:54:29
不确定Adobe是否继续支持这一点,但在ColdFusion 8中,THIS作用域中的任何变量都自动被认为是公共的(因此在cfdump中可见),而显式使用VARIABLES作用域则被认为是私有的(因此在cfdump中不可见)。这样,当您在组件中保留组件引用时,还可以避免堆栈溢出(cfdump用于递归地解决它们,并以无限循环结束)。但话又说回来:这可能是在ColdFusion 9和更高版本中修复的。
https://stackoverflow.com/questions/15607436
复制相似问题