2010-02-23 3 views
1

내 수업에서 속성 값을 설정하고 싶습니다. 나는 setter와 getter없이이 작업을 수행 할 수 있지만이 작업에 "올바른"방법을 알고 싶습니다. 이것은 로그인 스크립트 용이므로 등록 정보와 설정자는 모두 개인용입니다.클래스 내에서 설정자를 사용하여 속성을 설정해야합니까?

속성을 직접 설정하거나 setter 및 getter를 사용해야합니까?

답변

1

이 personnal 취향의 주로 문제 ... 당신은 클래스의 방법에서 개인 속성을 설정해야하는 경우

, 당신이 직접 그 속성에 액세스 할 수있는 말을 아마입니다.

그런 상황에서 setter/getter를 사용하는 이유는 속성이 설정 될 때마다 데이터에서 일부 조건 또는 계산이 수행되도록하려는 경우입니다. (!) 참고로


: 클래스 외부에서 전용 속성에 액세스하는 사용자의 희망, 당신은 공공 세터/게터에 사용해야합니다 경우 물론, -하지만 당신이 무엇 될 것 같지 않습니다 여기에서하려고하는 것.

+0

파스칼 없음, 실제로 내가하려는 일입니다. 속성을 설정하고 수업 외부에서 읽어야합니다. 나는 현재 setter를 비공개로하고 getter를 공개한다. – jim

+0

그러나 모든 데이터 유형에 대한 계산 유형을 제공하지는 않지만 속성의 out 값만 필요합니다. – jim

+0

오, 나는 그 질문을 올바르게 이해하지 못했을 것으로 생각한다. ;; 여전히, 내가 말한 것은 사실입니다. 클래스 내부에서 직접 속성에 액세스 할 것입니다. (물론 클래스 외부에서 액세스하려면 public getter를 사용하십시오.) *. –

0

의견의 문제입니다. 전통적인 객체 지향 프로그래밍 원리는 이라고 말합니다.하지만 실제로는 여러분에게 달려 있습니다.

속성을 private으로 설정하는 경우 setter 메서드를 사용해야합니다. setter는 항상 public이어야하므로 다른 클래스와 메서드가 해당 속성에서 작동 할 수 있습니다. 클래스 외부에서 부동산에 액세스 할 이유가 없으면 설정자를 만들지 마십시오. 실제로는 중요하지 않으므로 설정하지 마십시오. 클래스 내에서 private 멤버 변수/속성에 항상 액세스 할 수 있습니다.

+0

예, 사실입니다. 지적 해 주셔서 감사합니다. 좋아, 아마도 나는 setter와 getter와 함께있을 것 같다. getter가 필요하기 때문에 클래스 외부에서 값을 반향시켜야합니다. – jim

+0

+1 이유는 setter를 사용하기 때문입니다. -1 세터의 공개 필요성에 대한 -1 (속성을 할당하기 전에 데이터를 조작/유효화하는 필터 일뿐입니다.) – chelmertz

+0

chelmertz, 나는 당신과 동의해야 할 것입니다. 현재 저는 세터를 비공개로 설정했습니다. 나는 그것을 필요로하고 외부에서 바뀔 수는 없다. – jim

0

"마법"__get/__set 메서드는 모든 것을 위해 getter 및 setter를 만들 필요없이 사용할 수 있다는 것을 잊지 마십시오.

magic functions

편집 : 멤버 변수 개인 또는 보호 된 경우는 getter 및 setter를 사용해야합니다. 그들이 공개적이라면 스타일의 문제입니다.하지만 나머지 수업과 일관성을 가져야합니다.

+0

하지만 그들은 치명적으로 느린 것을 명심하십시오 :) – Matchu

+0

Thanks Jason. 제 생각에는 마법 방법이 효과가 없을 것 같습니다. 나는 무엇이 설정되어 있는지에 대해 좀 더 많은 통제력이 필요하다. 그래서 전통적인 방법을 사용하기로 결정했다. – jim

+0

축하해...... 나는 이미 그들을 경험했다는 것을 알고있다. PHP는 성능을 향상시키기 위해 아직 약간의 작업을 수행해야합니다. – jim

0

Setter/Getters를 사용하면 파생 클래스가 개체의 상태와 동작을보다 쉽게 ​​수정/제한/향상 할 수 있습니다. 하지만 세터/게터를 너무 많이 할 수 있습니다. 그러면 약간 짜증이납니다. (특히 그들을 숨기지 않는 언어에서).

class Foo { 
    protected $x; 
    public function __construct($x) { 
    $this->setX($x); 
    } 

    public function setX($x) { 
    $this->x = $x; 
    } 

    public function something($y) { 
    // not using a getter here, it's only an example 
    echo $this->x * $y; 
    } 
} 

class DoubleFoo extends Foo { 
    public function setX($x) { 
    parent::setX($x*2); 
    } 
} 

$df = new DoubleFoo(1); 
$df->something(5); 
관련 문제