<?php
class Magic {
private string $foo;
private int $bar;
public function __get($name) {
return $this->$name;
}
public function __set($name, $value) {
return $this->$name = $value;
}
}
class ReflectionTest {
private string $foo;
private int $bar;
}
$m = new Magic;
$start = microtime(true);
for ($i=0;$i<100000;$i++) {
$m->foo = 'foo';
$m->bar = 5;
}
printf('Magic Time taken: %0.4fs%s', microtime(true) - $start, PHP_EOL);
$reflection = new ReflectionTest;
$start = microtime(true);
for ($i=0;$i<100000;$i++) {
$foo = new \ReflectionProperty(ReflectionTest::class, 'foo');
$bar = new \ReflectionProperty(ReflectionTest::class, 'bar');
$foo->setAccessible(true);
$bar->setAccessible(true);
$foo->setValue($reflection, 'foo');
$bar->setValue($reflection, 5);
}
printf('Reflection Time taken: %0.4fs%s', microtime(true) - $start, PHP_EOL);
$reflection = new ReflectionTest;
$start = microtime(true);
$foo = new \ReflectionProperty(ReflectionTest::class, 'foo');
$bar = new \ReflectionProperty(ReflectionTest::class, 'bar');
$foo->setAccessible(true);
$bar->setAccessible(true);
for ($i=0;$i<100000;$i++) {
$foo->setValue($reflection, 'foo');
$bar->setValue($reflection, 5);
}
printf('Reflection Time (Cached) taken: %0.4fs%s', microtime(true) - $start, PHP_EOL);
preferences:
24.11 ms | 406 KiB | 5 Q