3v4l.org

run code in 300+ PHP versions simultaneously
<?php if (substr(PHP_VERSION, 0, 5) !== '7.1.5') die('Meh'); function test($label = '') { global $t; $t2 = microtime(1); if ($label) echo str_pad($label . ': ', 32, '.', STR_PAD_RIGHT) . ' ' . 1000 * ($t2 - $t) . 'ms' . "\n"; $t = $t2; } class A { protected $_val = 123; function getVal() { return $this->_val; } function setVal($val) { $this->_val = $val; } } class A2 { protected $_val = 123; function getVal() { return $this->_val; } function setVal($val) { $this->_val = $val; } function __get($name) { return $this->{'__get_' . $name}($name); } function __set($name, $value) { $this->{'__set_' . $name}($value); } } class B { protected $val = 123; function __get($name) { return $this->{'__get_' . $name}($name); } function __set($name, $value) { $this->{'__set_' . $name}($value); } function __get_val() { return $this->val; } function __set_val($val) { $this->val = $val; } } class C { protected $val = 123; function __get($name) { return $this->val; } function __set($name, $value) { $this->val = $value; } } class D { public $val; function __construct() { $this->val = new Prop(123); } } class D2 { public $val; protected $_val = 123; function __construct() { $this->val = new Prop2(function () { return $this->_val; }, function ($value) { $this->_val = $value; }); } } class Prop { protected $_val = 123; function __construct($val) { $this->_val = $val; } function get() { return $this->_val; } function set($val) { $this->_val = $val; } } class Prop2 { protected $get; protected $set; function __construct($get, $set) { $this->get = $get; $this->set = $set; } function get() { return ($this->get)(); } function set($val) { ($this->set)($val); } } class E { public $val = 123; } $c = 1000000; test(); $x = new A(); for ($i = $c; $i--;) { $a = $x->getVal(); $x->setVal(321); } test('methods'); $x = new A2(); for ($i = $c; $i--;) { $a = $x->getVal(); $x->setVal(321); } test('methods + passive magic'); $x = new B(); for ($i = $c; $i--;) { $a = $x->val; $x->val = 321; } test('magic'); $x = new C(); for ($i = $c; $i--;) { $a = $x->val; $x->val = 321; } test('light magic'); $x = new D(); for ($i = $c; $i--;) { $a = $x->val->get(); $x->val->set(321); } test('nested object'); $x = new D2(); for ($i = $c; $i--;) { $a = $x->val->get(); $x->val->set(321); } test('nested proxy'); $x = new E(); for ($i = $c; $i--;) { $a = $x->val; $x->val = 321; } test('property');
Output for 7.0.0 - 7.0.20, 7.1.0 - 7.1.4, 7.1.6 - 7.1.7, 7.2.0
Meh
Output for 7.1.5
methods: ....................... 109.52496528625ms methods + passive magic: ....... 127.41017341614ms magic: ......................... 527.43792533875ms light magic: ................... 334.07807350159ms nested object: ................. 134.22989845276ms nested proxy: .................. 233.9289188385ms property: ...................... 26.618003845215ms

preferences:
76.43 ms | 402 KiB | 35 Q