Ada*_*ron 11 coldfusion cfml lucee
我试图在Lucee上的组件上使用合成访问器(虽然这个问题在ColdFusion上似乎也是一样的).
Repro代码:
// Person.cfc
component accessors=true {
property firstName;
property lastName;
function init(firstName, lastName){
variables.firstName = arguments.firstName;
variables.lastName = arguments.lastName;
}
}
Run Code Online (Sandbox Code Playgroud)
和调用代码:
// person.cfm
person = new Person("Abigail", "Bowen");
writeDump(person);
Run Code Online (Sandbox Code Playgroud)
注意我在这里没有使用合成访问器,我纯粹是将参数值设置为同名变量范围的变量.
但是,当我运行此代码时,我看到:

请注意如何填充属性.这没有问题,但我显然不明白accessors旗帜应该如何运作.我认为它只是为了为我(它有)合成一些存取方法,但这就是全部.
另请注意,如果我将CFC定义修改为不将访问器设置为true,则转储显示如下:

因此没有合成访问器(如预期的那样),但现在甚至没有显示属性(使用变量范围值或不具有变量范围值).
我真的不明白"属性"和访问者设置的这种混淆吗?当然,访问者设置应该只影响是否创建了这些访问器方法?
如果我只是在其中一个平台上看到这个,我可能会把它归结为如何writeDump()解释属性定义的变幻莫测.但是ColdFusion 11的行为是一样的,所以看起来我的行为似乎有些不同.
有谁能解释一下?有没有解释它的文档?如果不是......嗯...为什么不呢?
我的基本担忧是,属性值没有"正确"存储,并且一旦我实现了更多的代码,可能会给我带来问题.
更新:至少在ColdFusion上,它似乎只是一个writeDump()行为的改变,因为如果有属性的getter(无论是否accessors设置了标志),那么属性值开始显示在转储中.但是Lucee的情况并非如此,所以那里仍然存在问号.
为了充分披露,这个问题是我在博客上提出的一个问题的摘要(" CFML:试图理解访问者 ").复制是故意的,因为我的博客与本网站的受众不同.
Sea*_*eld 10
没有accessors=true,property声明只是元数据.
使用时accessors=true,property声明会触发getter/setter的生成,因此a property既是variables范围项又是一对方法.
在构造函数中,您分配variables范围项 - 这与使用生成的setter相同 - 当CFML转储组件时,它会看到property元数据和生成的getter,因此它显示这些属性具有的值(从它可以轻松安全地调用生成的getter).
| 归档时间: |
|
| 查看次数: |
951 次 |
| 最近记录: |