ColdFusion 9 CFScript私有属性和公共属性
有没有办法让isDevMode,devModeToEmailAddress,devModeFromEmailAddress成为私有属性?ColdFusion 9 CFScript私有属性和公共属性
代码:
/**
* email
* @accessors true
*/
component email output="false" hint="This is email object." {
/* properties */
property name="toEmailAddress" type="string";
property name="fromEmailAddress" type="string";
property name="subject" type="string";
property name="body" type="string";
property name="attachments" type="array";
/*
private isDevMode
private devModeToEmailAddress
private devModeFromEmailAddress
*/
}
您可以添加setter="false"
和getter="false"
防止getter和setter方法,但是你不能直接限制访问性能。你最好的选择是把它们放到组件本地作用域中的构造函数中。
/**
* email
* @accessors true
*/
component email output="false" hint="This is email object." {
isDevMode = false;
devModeToEmailAddress = "[email protected]";
devModeFromEmailAddress = "[email protected]";
/* properties */
property name="toEmailAddress" type="string";
property name="fromEmailAddress" type="string";
property name="subject" type="string";
property name="body" type="string";
property name="attachments" type="array";
}
然后,当你需要使用这些功能,只需引用variables.isDevMode
在任何功能,拿起值。如果您需要在运行时设置它们,则可以将它们设置为您的函数的init()
方法。我通常不喜欢这样写道:
component email output="false" hint="This is email object." {
instance = {};
/* properties */
property name="toEmailAddress" type="string";
property name="fromEmailAddress" type="string";
property name="subject" type="string";
property name="body" type="string";
property name="attachments" type="array";
public email function(required boolean isDevMode, required string devModeToEmailAddress, required string devModeFromEmailAddress){
variables.Instance.isDevMode = Arguments.isDevMode;
variables.Instance.devModeToEmailAddress = Arguments.devModeToEmailAddress;
variables.Instance.devModeFromEmailAddress = Arguments.devModeFromEmailAddress;
{
}
然后,任何时候,我需要这些值我只是得到variables.Instance.isDevMode
。我还创建了一个通用的get()
方法,将返回variables.instance
,以便我可以看到里面有什么。
public struct function get(){
return Duplicate(variables.Instance);
}
但是,因为这些位于组件的局部变量范围内,所以它们不能从组件外部修改。
我认为你仍然可以通过引用修改结构。所以你可能希望在返回结构之前复制()该结构。 – Leigh
你绝对正确。相应地调整代码。 –
你有什么打算?属性(除其他外)在CF中定义访问器,这意味着它们应该可用于访问(因此不是私有的)。你是否试图对ORM中的私有变量执行关系映射?或者,你是否“只想要一些私人变量” - 如果是后者,你会想将它们设置在“变量”范围内。 –
我没有使用ORM我只是想要只能在对象内部设置的属性,而不能通过对象之外的东西来设置属性。这样,如果网站在devmode中,电子邮件不会发送给客户,但是在生产时它们工作得很好。 –
丹的答案在下面是你想要的。 –