3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * Benchmark: Reflection Performance * * Conclusion: there is no performance-gain from caching reflection-objects. */ define('NUM_TESTS', 10); header('Content-type: text/plain'); $func = function($a, $b, $c) { // ... }; class Foo { public $a; protected $b; private $c; public function foo($a,$b,$c) {} protected function bar($a,$b,$c) {} private function baz($a,$b,$c) {} } for ($i=0; $i<NUM_TESTS; $i++) { $start = microtime(true); $ref = new ReflectionClass($func); $end = microtime(true); echo "ReflectionClass # $i: " . number_format(1000000*($end-$start), 3) . " µsec\n"; } for ($i=0; $i<NUM_TESTS; $i++) { $start = microtime(true); $ref = new ReflectionFunction($func); $end = microtime(true); echo "ReflectionFunction # $i: " . number_format(1000000*($end-$start), 3) . " µsec\n"; } class Cache { private $cache = array(); public function getReflection($class) { if (!isset($this->cache[$class])) { $this->cache[$class] = new ReflectionClass($class); } return $this->cache[$class]; } } $cache = new Cache; for ($i=0; $i<NUM_TESTS; $i++) { $start = microtime(true); $ref = $cache->getReflection('Foo'); $end = microtime(true); echo "Cached ReflectionClass # $i: " . number_format(1000000*($end-$start), 3) . " µsec\n"; }

preferences:
34.65 ms | 402 KiB | 5 Q