2012-01-02 3 views
0

선언 된 속성을 가진 클래스가 있습니다. 클래스의 전체적인 점과 확장은 다른 객체에 대해 null이더라도 항상 사용할 수 있어야한다는 것입니다. 그러나 객체를 인스턴스화 한 후, 내가 직접 선언 된 값을 덮어 쓸 수 있도록하려면선언 된 속성이 설정되었을 때 메서드를 트리거하는 PHP의 Magic 메서드?

class Wrapper { 

    public $a = ""; 
    public $b = ""; 
    public $c = ""; 

    public function Wrapper() { 

     $this -> wrapped = new Wrapped(); 

     foreach($this as $key => $val) { 
       if($key != 'wrapped') { 
       $this -> wrapped -> $key = $val; 
       } 
     } 

    } 
} 

때문에, : : 같은 그것은 본다

$wrap_test = new Wrapper(); 
$wrap_test -> a = 12; 

를 그래서 오히려 방법을 작성하거나 $wrap_test -> wrapped -> a -> 12을 사용하는 것보다, 나는 어떤 속성이 설정 될 때마다 메서드를 호출하는 __set()에 해당하는 것을 찾고있었습니다.

존재합니까?

답변

2

속성이 public으로 선언 된 경우 "이벤트"또는 다른 방법으로 연결할 수 없습니다. 속성은 누구든지 직접 간단히 변경할 수 있습니다.

는 그들이 public 것처럼 속성에 액세스 할 수 있도록 다음 __get__set 메소드를 구현, protected 또는 private 같은 속성이 그래서 그들은 클래스 외부에서 직접 변경할 수 없습니다 선언합니다. __set 메서드에서 속성이 변경 될 때 수행해야하는 작업을 수행하십시오.

+0

Perfect. 이제 유일한 문제는 클래스 자체에서 속성을 설정할 때입니다. 그러나 나는 그것에 대한 생각을 가지고 있다고 생각한다. – Anthony

+0

여기에 내가 생각해 냈다. (정적 변수가 거기에 들어가는 것을 피한다.) : \t $ og_properties = array_keys (array_intersect (get_class_vars (get_class ($ this)), get_object_vars $ this)))); \t \t \t 경우 (와 in_array ($ 이름, $ og_properties)!) { \t \t $이 -> $ 이름 = $ 값; \t} else {' – Anthony