Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop ColdFusion 9 CFScript私有属性和公共属性_Oop_Coldfusion_Coldfusion 9 - Fatal编程技术网

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

Oop ColdFusion 9 CFScript私有属性和公共属性,oop,coldfusion,coldfusion-9,Oop,Coldfusion,Coldfusion 9,有没有办法使isDevMode、devModeToEmailAddress、devModeFromEmailAddress成为私有属性 代码: 您可以添加setter=“false”和getter=“false”来阻止getter和setter,但不能直接限制对属性的访问。最好的选择是将它们放入组件本地范围内的构造函数中 /** * email * @accessors true */ component email output="false" hint="This is email obje

有没有办法使isDevMode、devModeToEmailAddress、devModeFromEmailAddress成为私有属性

代码:

您可以添加
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";


}
然后,当需要使用这些变量时,只需在任何函数中引用
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()
方法,该方法将返回
变量.instance
,以便查看其中的内容

public struct function get(){
    return Duplicate(variables.Instance);
}

但是因为这些都在组件局部变量范围内,所以不能从组件外部修改它们。

您的意图是什么?属性(除其他外)在CF中定义访问器,这意味着它们应该可以访问(因此,不是私有的)。您是否试图在ORM中强制执行到私有变量的关系映射?或者,你是否“只需要一些私有变量”——如果是后者,你需要在“变量”范围内设置它们。我没有使用ORM,我只是希望属性只能在对象内部设置,而不能由对象外部的东西设置。这样,如果网站在devmode中,电子邮件不会发送给客户,但在生产过程中,它们工作正常。Dan下面的答案就是您想要的答案。我认为您仍然可以通过引用修改结构。因此,在返回结构之前,您可能需要复制()。
public struct function get(){
    return Duplicate(variables.Instance);
}