3v4l.org

run code in 300+ PHP versions simultaneously
<?php function assign_foo($instance) { $instance->foo = 2; } final class Content { protected $data; public function __get(string $name) { return $this->data[$name]; } public function __set(string $name, mixed $value): void { if ($value === 1) { assign_foo($this); } else { $this->data[$name] = $value; } } } set_error_handler(function () { echo (new Exception)->getTraceAsString(); }); $content = new Content(); $content->foo = 1;
Output for 8.4.1
#0 /in/YtnAhT(4): {closure:/in/YtnAhT:23}(8192, 'Creation of dyn...', '/in/YtnAhT', 4) #1 /in/YtnAhT(16): assign_foo(Object(Content)) #2 /in/YtnAhT(28): Content->__set('foo', 1) #3 {main}
Output for 8.2.0 - 8.2.26, 8.3.0 - 8.3.14
#0 /in/YtnAhT(4): {closure}(8192, 'Creation of dyn...', '/in/YtnAhT', 4) #1 /in/YtnAhT(16): assign_foo(Object(Content)) #2 /in/YtnAhT(28): Content->__set('foo', 1) #3 {main}
Output for 8.0.1 - 8.0.30, 8.1.0 - 8.1.31

preferences:
51.64 ms | 408 KiB | 5 Q