당신은 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);
}
하지만 구성 요소 로컬 변수 범위에 있기 때문에 구성 요소 외부에서 수정할 수 없습니다.
당신의 의도는 무엇입니까? 속성 (다른 것들 중에서도)은 CF에서 접근자를 정의합니다. 이는 접근에 사용할 수 있어야한다는 것을 의미합니다 (따라서 비공개가 아님). ORM에서 사적 변수에 대한 관계형 매핑을 시행하려고합니까? 또는, 당신은 "단지 개인적인 vars를 원하니?"- 만약 후자라면, 당신은 그것들을 '변수'범위로 설정하기를 원할 것입니다. –
나는 ORM을 사용하지 않고있다. 단순히 개체 내부에서만 설정할 수있는 속성을 원하고 개체 외부의 것으로 설정할 수없는 속성을 원한다. 이 방법은 웹 사이트가 devmode에있는 경우 전자 메일은 고객에게 전달되지 않지만 프로덕션에서는 정상적으로 작동합니다. –
아래의 댄의 대답이 당신이 원하는 것입니다. –