3v4l.org

run code in 300+ PHP versions simultaneously
<?php namespace Bench; /** * 1. ZEND_IS_BOOL 命令にコンパイルされる (最速期待) */ function is_bool_native(mixed $v): bool { return \is_bool($v); } /** * 2. 名前空間解決による DO_FCALL。実行時にグローバル関数を探す */ function is_bool_ns(mixed $v): bool { return is_bool($v); } /** * 3. ZEND_IN_ARRAY 命令にコンパイルされる (O(1) 最適化) */ function in_array_native(mixed $v): bool { return \in_array($v, [true, false], true); } /** * 4. 名前空間解決 + DO_FCALL + 通常の線形探索 (O(n)) */ function in_array_ns(mixed $v): bool { return in_array($v, [true, false], true); } /** * 5. ユーザー定義ロジック:キャストと比較 */ function is_bool_cast(mixed $v): bool { return $v === (bool)$v; } /** * 6. ユーザー定義ロジック:論理和 */ function is_bool_or(mixed $v): bool { return $v === true || $v === false; } /** * 7. match式 */ function is_bool_match(mixed $v): bool { return match ($v) { true, false => true, default => false, }; } /** * データセット */ $datasets = [ 'all_bool' => [true, false, true, false], 'no_bool' => [1, 0, "1", "0", "true", [], new \stdClass(), null], 'half_half' => [true, 1, false, "test", true, null, false, []], ]; $testcases = [ 'is_bool (\native)' => is_bool_native(...), 'is_bool (ns)' => is_bool_ns(...), 'in_array (\native)' => in_array_native(...), 'in_array (ns)' => in_array_ns(...), 'is_bool_cast' => is_bool_cast(...), 'logical OR' => is_bool_or(...), 'match_expression' => is_bool_match(...), ]; $iterations = 100000; echo "PHP Version: " . PHP_VERSION . "\n"; echo str_repeat('=', 60) . "\n"; foreach ($datasets as $data_name => $values) { echo "\nDataset: $data_name\n"; echo str_repeat('-', 60) . "\n"; $results = []; foreach ($testcases as $name => $test) { $start = hrtime(true); for ($i = 0; $i < $iterations; $i++) { foreach ($values as $value) { $test($value); } } $end = hrtime(true); // 合計実行回数で割って平均を出すのではなく、あえて「このデータセット一式の処理時間」とする $results[$name] = ($end - $start) / 1e+6; } asort($results); foreach ($results as $name => $ms) { printf("%-20s : %10.4f ms\n", $name, $ms); } }
Output for git.master_jit
PHP Version: 8.6.0-dev ============================================================ Dataset: all_bool ------------------------------------------------------------ match_expression : 10.2944 ms logical OR : 16.0196 ms is_bool_cast : 21.0079 ms is_bool (\native) : 22.8886 ms in_array (\native) : 28.2440 ms in_array (ns) : 30.2819 ms is_bool (ns) : 30.9460 ms Dataset: no_bool ------------------------------------------------------------ is_bool (\native) : 16.8444 ms is_bool_cast : 19.6260 ms logical OR : 20.8472 ms in_array (\native) : 21.7079 ms match_expression : 22.0952 ms is_bool (ns) : 23.6228 ms in_array (ns) : 23.7126 ms Dataset: half_half ------------------------------------------------------------ is_bool (\native) : 16.9744 ms is_bool_cast : 19.3227 ms match_expression : 20.2042 ms logical OR : 20.3736 ms in_array (ns) : 24.1670 ms is_bool (ns) : 24.3117 ms in_array (\native) : 25.4683 ms
Output for git.master
PHP Version: 8.6.0-dev ============================================================ Dataset: all_bool ------------------------------------------------------------ is_bool_cast : 9.6891 ms match_expression : 9.9284 ms logical OR : 9.9347 ms in_array (ns) : 19.6511 ms is_bool (\native) : 23.0480 ms in_array (\native) : 26.0762 ms is_bool (ns) : 30.4578 ms Dataset: no_bool ------------------------------------------------------------ is_bool (\native) : 16.5884 ms is_bool_cast : 19.5895 ms logical OR : 19.8684 ms in_array (\native) : 21.5842 ms match_expression : 22.1797 ms in_array (ns) : 23.5397 ms is_bool (ns) : 23.8009 ms Dataset: half_half ------------------------------------------------------------ is_bool (\native) : 16.8493 ms is_bool_cast : 19.4046 ms logical OR : 20.2830 ms match_expression : 20.8154 ms in_array (\native) : 21.6090 ms in_array (ns) : 23.2462 ms is_bool (ns) : 23.6496 ms

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
28.99 ms | 411 KiB | 5 Q