Php метод запуска при изменении свойства

можно ли запустить метод php при изменении свойства? Как показано в примере ниже:

класс:

class MyClass
{
    public MyProperty;

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

3 ответов


Как сказал @lucas, если вы можете установить свое свойство как частное в классе, вы можете использовать __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.

вы можете достичь этого лучше всего, используя метод setter.

class MyClass
{
    private MyProperty;

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

}

теперь вы просто вызываете сеттера вместо установки значения самостоятельно.

$MyObject = new MyClass;
$MyObject -> setMyProperty(1);

С помощью магический метод __set:

class Foo {

    protected $bar;

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

}

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

может быть, лучше и более обычной идеей использовать вместо этого хороший старомодный сеттер:

class Foo {

    protected $bar;

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

}

$f = new Foo;
$f->setBar('baz');