2012-01-02 4 views
0

私は、宣言されたプロパティを持つクラスを持っています。クラスの全体的な点であり、拡張であるということは、たとえnullであっても、別のオブジェクト上でそれらを常に利用できるようにすることです。だから、次のようになります。宣言されたプロパティが設定されているときにトリガメソッドのPHPのマジックメソッド?

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を使用するよりも、Iプロパティが設定されるたびにメソッドを呼び出す__set()と同等のものを探していました。

これはありますか?

答えて

2

あなたのプロパティがpublicと宣言されている場合は、「イベント」や他の方法を使用することはできません。プロパティは誰でも直接変更することができます。

ので、彼らはあなたが彼らがpublicであるかのようにプロパティにアクセスすることができますので、__get__setメソッドを実装し、その後、クラスの外部から直接変更することはできませんprotectedprivateとしてあなたの特性を宣言します。 __setメソッドでは、プロパティが変更されたときに必要な処理を行います。

+0

パーフェクト。今は唯一の問題はクラス内からプロパティを設定したときです。私はそれについて考えていると思います... – Anthony

+0

これは私が思いついたことです(静的な変数がそこに入るのを防ぎます): ' $ this)))); \t \t \t場合(in_array($名、$ og_properties)!){ \t \t $この - > $名= $値; \t} else {' – Anthony

関連する問題