SHOW:
|
|
- or go back to the newest paste.
| 1 | <?php | |
| 2 | ||
| 3 | /** | |
| 4 | * Performance test for 'Checking if an instance's class implements an interface?' | |
| 5 | * See: http://stackoverflow.com/q/274360/473961 | |
| 6 | * | |
| 7 | * Results for 100,000 iterations: | |
| 8 | - | * class_implements + in_array: 149.19 ms |
| 8 | + | * class_implements + isset: 149.19 ms |
| 9 | * Reflection: 294.79 ms | |
| 10 | * InstanceOf (with cheap __construct()): 84.65 ms | |
| 11 | */ | |
| 12 | ||
| 13 | interface IInterface | |
| 14 | {
| |
| 15 | } | |
| 16 | ||
| 17 | class TheClass implements IInterface | |
| 18 | {
| |
| 19 | } | |
| 20 | ||
| 21 | $tmp = false; | |
| 22 | $interfaces = null; | |
| 23 | $class = null; | |
| 24 | ||
| 25 | $start = microtime(true); | |
| 26 | for ($i = 0; $i < 100000; $i++) {
| |
| 27 | $interfaces = class_implements('TheClass');
| |
| 28 | ||
| 29 | $tmp = isset($interfaces['IInterface']); | |
| 30 | } | |
| 31 | $end = microtime(true); | |
| 32 | ||
| 33 | $total = round(($end - $start) * 1000.0, 2); | |
| 34 | - | echo "class_implements + in_array: " . $total . " ms\n"; |
| 34 | + | echo "class_implements + isset: " . $total . " ms\n"; |
| 35 | ||
| 36 | $start = microtime(true); | |
| 37 | for ($i = 0; $i < 100000; $i++) {
| |
| 38 | $class = new ReflectionClass('TheClass');
| |
| 39 | $tmp = $class->implementsInterface('IInterface');
| |
| 40 | } | |
| 41 | $end = microtime(true); | |
| 42 | ||
| 43 | $total = round(($end - $start) * 1000.0, 2); | |
| 44 | echo "Reflection: " . $total . " ms\n"; | |
| 45 | ||
| 46 | $start = microtime(true); | |
| 47 | for ($i = 0; $i < 100000; $i++) {
| |
| 48 | $class = new TheClass(); | |
| 49 | $tmp = ($class instanceof IInterface); | |
| 50 | } | |
| 51 | $end = microtime(true); | |
| 52 | ||
| 53 | $total = round(($end - $start) * 1000.0, 2); | |
| 54 | echo "InstanceOf: " . $total . " ms\n"; |