2015-10-27 13 views
5

プロパティ変更時にphpメソッドを実行できますか?プロパティ変更時のPHP実行メソッド

クラス::

class MyClass 
{ 
    public MyProperty; 

    function __onchange($this -> MyProperty) 
    { 
     echo "MyProperty changed to " . $this -> MyProperty; 
    }   
} 

オブジェクト:

$MyObject = new MyClass; 
$MyObject -> MyProperty = 1; 

結果:

"MyProperty changed to 1" 
+2

変数をプライベートにして、それを変更する関数を使用します。 –

+0

これを実装する必要があります。たとえば、プロパティを変更し、イベントをトリガーしてイベントをキャプチャします。 – Xlander

答えて

4

をクラス内でプロパティをプライベートとして設定できる場合は、__set()を使用して変更を検出できます。

class MyClass 
{ 
    private $MyProperty; 

    function __set($name, $value) 
    { 
    if(property_exists('MyClass', $name)){ 
     echo "Property". $name . " modified"; 
    } 
    } 

} 


$r = new MyClass; 
$r->MyProperty = 1; //Property MyProperty changed. 
2

あなたC以下の例に示すと同様setterメソッドを使用してこれを実現してください。

class MyClass 
{ 
    private MyProperty; 

    public function setMyProperty($value) 
    { 
     $this->MyProperty = $value; 
     echo "MyProperty changed to " . $this -> MyProperty; 
    } 

} 

これで値を自分で設定するのではなく、単にsetterを呼び出すだけです。

magic method __setを使用して
$MyObject = new MyClass; 
$MyObject -> setMyProperty(1); 
0

class Foo { 

    protected $bar; 

    public function __set($name, $value) { 
     echo "$name changed to $value"; 
     $this->$name = $value; 
    } 

} 

$f = new Foo; 
$f->bar = 'baz'; 

をではなく昔ながらのセッターを使用して、より良く、より従来の考えかもしれ次の場合、@lucasが言ったように

class Foo { 

    protected $bar; 

    public function setBar($value) { 
     echo "bar changed to $value"; 
     $this->bar = $value; 
    } 

} 

$f = new Foo; 
$f->setBar('baz'); 
関連する問題