2010-02-18 4 views

답변

8

이것은 OOP의 데이터 숨기기 (또는 캡슐화)의 개념입니다. 예를 들어 클래스의 특정 속성을 'Amount'라고하고 클래스의 클라이언트에게 값을 변경하거나 추출하는 옵션을 제공하려는 경우 'Amount'변수를 비공개로 설정해야합니다. 클래스)를 사용하고 값 (public)을 조작하는 getter와 setter의 두 메서드를 생성합니다.

이유는 값을 설정하거나 가져 오기 전에 데이터의 유효성을 검사하거나 조작 할 수 있기 때문입니다.

class test { 

    private $count; //those who use your class are not able to see this property, only the methods above 

    public function setCount($value)  
    { 
      //make some validation or manipulation on data here, if needed 
     $this->count = $value;  
    } 

    public function getCount()  
    {     
     return $this->count;  
    }  
} 
1

PHP 매뉴얼은 실제로이 문제에 대해 자세히 설명하지는 않지만 이지만에는 많은 것을 설명해야하는 매우 자세한 예제가 있습니다. Magic methods: Property overloading

3

클래스의 속성은 private 일 수 있습니다. 즉, 개체 만이 자체 특성을 읽고 쓸 수 있음을 의미합니다. 그러므로 당신은 그것을 할 방법이 필요합니다. 속성 값을 읽고 반환하는 메소드를 getter라고하고 속성을 쓰는 메소드를 setter라고합니다. 이 메서드를 사용하면 클래스에서 나가는 내용과 들어오는 내용을 제어 할 수 있습니다.이 개념을 encapsulation이라고합니다.

+0

일부 경우 getter와 setters는 캡슐화의 반대입니다. 변수에 대한 getter와 setter가있는 경우 기본적으로 해당 내부 멤버를 노출하기 때문에 디자인을 변경해야 할 가능성이 큽니다. 캡슐화 된 'moveTo'또는 'moveBy'메소드를 사용할 수있을 때 setX, getX, setY, getY가있는 이유는 무엇입니까? –

2

게터와 세터 두 마법 함수 __get() 및()로 설정 형태 PHP 5 아주 새로운 개념이다 : 여기 간단한 예이다. 이 두 함수는 다음 예제에서 설명한대로 객체의 속성 값을 설정하거나 가져옵니다.

class Datatype{ 
private $thing; 
public function _set($k,$v){ 
$this->$k = $v; 
} 
public function __get($k){ 
return $this->$k; 
} 
}