2011-10-03 4 views
2

devModeToEmailAddress, isDevMode, 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 
*/ 

} 
+0

당신의 의도는 무엇입니까? 속성 (다른 것들 중에서도)은 CF에서 접근자를 정의합니다. 이는 접근에 사용할 수 있어야한다는 것을 의미합니다 (따라서 비공개가 아님). ORM에서 사적 변수에 대한 관계형 매핑을 시행하려고합니까? 또는, 당신은 "단지 개인적인 vars를 원하니?"- 만약 후자라면, 당신은 그것들을 '변수'범위로 설정하기를 원할 것입니다. –

+0

나는 ORM을 사용하지 않고있다. 단순히 개체 내부에서만 설정할 수있는 속성을 원하고 개체 외부의 것으로 설정할 수없는 속성을 원한다. 이 방법은 웹 사이트가 devmode에있는 경우 전자 메일은 고객에게 전달되지 않지만 프로덕션에서는 정상적으로 작동합니다. –

+0

아래의 댄의 대답이 당신이 원하는 것입니다. –

답변

7

당신은 getter 및 setter를 방지하기 위해 setter="false"getter="false"을 추가 할 수 있지만 직접 속성에 대한 액세스를 제한 할 수 없습니다. 가장 좋은 방법은 구성 요소의 로컬 범위에있는 생성자에이 두 가지를 넣는 것입니다. 당신이 그를 사용해야하는 경우에

/** 
* 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를 얻을. 또한 variables.instance을 반환하는 일반 get() 메서드를 만들어 거기에있는 것을 볼 수 있습니다.

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

하지만 구성 요소 로컬 변수 범위에 있기 때문에 구성 요소 외부에서 수정할 수 없습니다.

+2

난 아직도 참조 구조에 의해 수정할 수있을 것 같아요. 따라서 구조체를 반환하기 전에 구조체를'duplicate() '할 수 있습니다. – Leigh

+0

정말 옳은 소식입니다. 그에 따라 코드를 조정하십시오. –