3v4l.org

run code in 300+ PHP versions simultaneously
<?php header("content-type: text/plain"); class WatchVar { private $data = array(); private $org = array(); private $callbacks = array(); public function __set($name, $value) { if (!array_key_exists($name, $this->data)) { $this->org[$name] = $value; } else { //variable gets changed again! $this->triggerChangedEvent($name, $value); } $this->data[$name] = $value; } public function &__get($name) { if (array_key_exists($name, $this->data)) { if ($this->data[$name] != $this->org[$name]) { //variable has changed, return original //return $this->org[$name]; //or return new state: return $this->data[$name]; } else { //variable has not changed return $this->data[$name]; } } } public function addCallback($name, $lambdaFunc) { $this->callbacks[$name] = $lambdaFunc; } protected function triggerChangedEvent($name, $value) { //$this->data[$name] has been changed! //callback call like: call_user_func($this->callbacks[$name], $value); } } $test = new WatchVar; $test->addCallback('xxx', function($newValue) { echo "xxx has changed to {$newValue}\n"; }); $test->xxx = "aaa"; echo $test->xxx . "\n"; //output: aaa $test->xxx = "bbb"; //output: xxx has changed to bbb echo $test->xxx . "\n"; //output bbb function messyFunction(&$var) { $var->xxx = "test"; } messyFunction($test); //output: nothing, why?

preferences:
41.57 ms | 402 KiB | 5 Q