3v4l.org

run code in 150+ php & hhvm versions
Bugs & Features
<?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?
Output for 5.3.0 - 7.1.0
aaa xxx has changed to bbb bbb xxx has changed to test
Output for 5.1.0 - 5.2.17
Parse error: syntax error, unexpected T_FUNCTION in /in/H0gpF on line 46
Process exited with code 255.
Output for 5.0.0 - 5.0.5
Parse error: parse error, unexpected T_FUNCTION in /in/H0gpF on line 46
Process exited with code 255.
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/H0gpF on line 5
Process exited with code 255.
Output for 4.3.0 - 4.3.1, 4.3.5 - 4.4.1
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/H0gpF on line 5
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /in/H0gpF on line 5
Process exited with code 255.