ColdFusion 9 CFScript私有属性和公共属性

Nat*_*ord 2 oop coldfusion coldfusion-9

有没有办法让isDevMode,devModeToEmailAddress,devModeFromEmailAddress成为私有的?

码:

/**
* 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
*/

}
Run Code Online (Sandbox Code Playgroud)

Dan*_*ort 7

您可以添加setter="false"getter="false"阻止getter和setter,但不能直接限制对属性的访问.您最好的选择是将它们放入组件本地范围内的构造函数中.

/**
* email
* @accessors true
*/
component email output="false" hint="This is email object." {

isDevMode = false;
devModeToEmailAddress = "foo@foo.com";
devModeFromEmailAddress = "bar@foo.com";

/* 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";


}
Run Code Online (Sandbox Code Playgroud)

然后,当您需要使用它们时,只需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;

    {

}
Run Code Online (Sandbox Code Playgroud)

然后,每当我需要那些我得到的价值时variables.Instance.isDevMode.我还创建了一个get()返回的通用方法,variables.instance所以我可以看到那里有什么.

public struct function get(){
    return Duplicate(variables.Instance);
}
Run Code Online (Sandbox Code Playgroud)

但由于这些都在组件局部变量范围内,因此无法从组件外部进行修改.

  • 我认为您仍然可以通过引用修改结构.因此,您可能希望在返回之前复制()重复结构. (2认同)