我正在尝试在 Lucee 上的组件上使用合成访问器(尽管这个问题在 ColdFusion 上似乎也一样)。
复制代码:
// Person.cfc
component accessors=true {
property firstName;
property lastName;
function init(firstName, lastName){
variables.firstName = arguments.firstName;
variables.lastName = arguments.lastName;
}
}
和调用代码:
// person.cfm
person = new Person("Abigail", "Bowen");
writeDump(person);
请注意我在这里没有使用合成访问器,我只是将参数值设置为同名变量范围的变量。
但是,当我运行此代码时,我看到了:
请注意如何填充属性。这没有问题,但我显然不明白该accessors
标志应该如何工作。我认为它只是为了为我(它有)综合一些访问器方法,但仅此而已。
另请注意,如果我修改 CFC 定义以不将访问器设置为 true,则转储会显示以下内容:
因此没有合成访问器(如预期的那样),而且现在甚至没有显示属性(是否具有变量范围的值)。
我真的不明白“属性”和访问器设置的这种混淆?当然访问器设置应该只影响这些访问器方法是否被创建?
如果我只在其中一个平台上看到这个,我可能会把它归结为如何writeDump()
解释属性定义的变幻莫测。但是在 ColdFusion 11 上的行为是相同的,所以看起来我不太明白的行为确实存在一些差异。
谁能解释一下?有没有解释它的文档?如果不是……嗯……为什么不呢?
我在这里的潜在担忧是,属性值没有“正确”存储,一旦我实现更多代码,可能会给我带来问题。
更新:至少在 ColdFusion 上,这似乎只是writeDump()
' 行为的改变,因为如果属性有 getter(无论是否accessors
设置了标志),那么属性值就会开始出现在转储中。不过,Lucee 的情况并非如此,所以那里仍然有一个问号。
为了充分披露,这个问题是我在我的博客上提出的一个问题的总结(“ CFML:试图理解访问器”)。重复是故意的,因为我的博客与本网站的受众不同。