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');