3v4l.org

run code in 300+ PHP versions simultaneously
<?php $urls = [ 'absolute' => 'https://stackoverflow.com/questions/20248666/in-this-case-which-is-better-in-matching-regular-expression-or-parse-url', 'relative' => '/questions/20248666/in-this-case-which-is-better-in-matching-regular-expression-or-parse-url', 'absolute-with-query' => 'https://stackoverflow.com/questions/20248666/in-this-case-which-is-better-in-matching-regular-expression-or-parse-url?r=https://3v4l.org', 'relative-with-query' => '/questions/20248666/in-this-case-which-is-better-in-matching-regular-expression-or-parse-url?r=https://3v4l.org', ]; $parseTester = function ($url) { $urlComponents = parse_url($url, PHP_URL_SCHEME); return strncmp($url, '//', 2) && empty($urlComponents); }; $regexpTester = function ($url) { return preg_match('@^((\w+):)?//@', $url); }; $strposTester = function ($url) { return strpos($url, 'https://') !== 0 || strpos($url, 'http://') !== 0 || strpos($url, '//') !== 0; }; $strposAlternativeTester = function ($url) { if (strncmp($url, '//', 2) === 0) { return false; } $pos = strpos($url, '://'); if ($pos === false) { return true; } $queryPos = strpos($url, '?'); return $queryPos === false || $pos < $queryPos; }; $test = function ($testerName, $callback) use ($urls) { foreach ($urls as $scenario => $url) { $time = microtime(true); for ($i = 0; $i < 1000000; $i++) { $callback($url); } echo "$testerName-$scenario: ", number_format(microtime(true) - $time, 10), "\n"; } echo "\n"; }; $test('parseTester', $parseTester); $test('regexpTester', $regexpTester); $test('strposTester', $strposTester); $test('strposAlternativeTester', $strposAlternativeTester);
Output for git.master_jit
parseTester-absolute: 0.2132999897 parseTester-relative: 0.1588981152 parseTester-absolute-with-query: 0.2423079014 parseTester-relative-with-query: 0.2249200344 regexpTester-absolute: 0.0743257999 regexpTester-relative: 0.0598721504 regexpTester-absolute-with-query: 0.0687208176 regexpTester-relative-with-query: 0.0677759647 strposTester-absolute: 0.0946879387 strposTester-relative: 0.0589728355 strposTester-absolute-with-query: 0.0932340622 strposTester-relative-with-query: 0.0708849430 strposAlternativeTester-absolute: 0.0917887688 strposAlternativeTester-relative: 0.0664248466 strposAlternativeTester-absolute-with-query: 0.1087219715 strposAlternativeTester-relative-with-query: 0.0945329666
Output for git.master
parseTester-absolute: 0.2042329311 parseTester-relative: 0.1631050110 parseTester-absolute-with-query: 0.2427229881 parseTester-relative-with-query: 0.2114999294 regexpTester-absolute: 0.0711851120 regexpTester-relative: 0.0638949871 regexpTester-absolute-with-query: 0.0655729771 regexpTester-relative-with-query: 0.0671560764 strposTester-absolute: 0.1013681889 strposTester-relative: 0.0553939342 strposTester-absolute-with-query: 0.0963969231 strposTester-relative-with-query: 0.0659339428 strposAlternativeTester-absolute: 0.0956130028 strposAlternativeTester-relative: 0.0714588165 strposAlternativeTester-absolute-with-query: 0.0969221592 strposAlternativeTester-relative-with-query: 0.0980410576
Output for rfc.property-hooks
parseTester-absolute: 0.2296910286 parseTester-relative: 0.1712510586 parseTester-absolute-with-query: 0.2380099297 parseTester-relative-with-query: 0.1837730408 regexpTester-absolute: 0.0635509491 regexpTester-relative: 0.0565450191 regexpTester-absolute-with-query: 0.0636751652 regexpTester-relative-with-query: 0.0736341476 strposTester-absolute: 0.0749530792 strposTester-relative: 0.0501070023 strposTester-absolute-with-query: 0.0834679604 strposTester-relative-with-query: 0.0554630756 strposAlternativeTester-absolute: 0.0820360184 strposAlternativeTester-relative: 0.0635800362 strposAlternativeTester-absolute-with-query: 0.0862269402 strposAlternativeTester-relative-with-query: 0.0866460800

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:
32.58 ms | 411 KiB | 5 Q