2

我最近开始使用 cfc 组件将用户信息存储在 Session 变量中。我曾经将它们作为单独的变量存储在 Session 中,例如 Session.UserId、Session.Firstname 或 Session.Lastname。这个新组件很好地为我将所有这些包装到一个组件中,其中包含我需要的每个值的 get 方法(即 Session.User.getUserId()、Session.User.GetName() 等)。

但是当我对会话变量进行 cfdump 以进行调试时,它会显示对象结构的元数据。我想查看组件的 get 方法返回的值。有什么方法可以使用 cfdump 输出带有对象元数据的函数值?

4

3 回答 3

6

<cfdump>不是魔术,它所做的只是输出你给它的值。由于您的 CFC 实例没有公开任何反映这些值的公共属性,<cfdump>因此无法知道它们是什么。

如果您需要一次提取所有反映您以前会话范围的私有属性,那么您需要创建一个方法来执行此操作,然后<cfdump> . 例如:

public struct function getVariables(){
    return  variables;
}

如果您正在进一步抽象您想要的值,例如到variables.sessionStuff(variables.sessionStuff.userIdvariables.sessionStuff.name),然后编写一个getSessionStuff()返回的方法variables.sessionStuff

于 2013-03-25T04:18:00.020 回答
3

有什么方法可以使用 cfdump 输出带有对象元数据的函数值?

是的,使用访问器。

<cfcomponent accessors="true">
    <cfproperty name="userID">
    <cfproperty name="firstName">
    <cfproperty name="lastName">
</cfcomponent>

试试<cfdump>这个对象,你会看到属性值。

于 2013-03-25T04:53:17.497 回答
0

不确定 Adob​​e 是否继续支持这一点,但在 ColdFusion 8 中,THIS范围内的任何变量都被自动视为公共(因此在 中可见cfdump),而显式使用VARIABLES范围则被视为私有(因此在 中不可见cfdump)。这样,当您在组件中保留组件引用时,您还可以避免堆栈溢出(cfdump 用于以递归方式解决它们以无限循环结束)。但话又说回来:这可能在 ColdFusion 9 及更高版本中已修复。

于 2013-03-26T09:54:29.297 回答