3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * SimpleXMLElement Introspection */ error_reporting(~0); $xml = '<document> <child> give <grandchild a1="v1" a2="v2"> me </grandchild> <grandchild> more </grandchild> sugar. </child> <child> </child> <single/> </document> '; $simple = new SimpleXMLElement($xml); /** * @param SimpleXMLElement $element * @return bool */ function simplexml_is_documentelement(SimpleXMLElement $element) { list($elementNode) = $element->xpath('.'); list($documentElement) = $element->xpath('/*'); return $elementNode == $element and $documentElement == $element; } $documentElement = $simple; $attributeList = $simple->child->grandchild->attributes(); $attributeListEmpty = $simple->child->attributes(); $attribute = $simple->child->grandchild['a1']; $suite = array( 'is_documentelement' => array('simplexml_is_documentelement', array( array(true, $documentElement), array(false, $documentElement->child), array(false, $documentElement->single), array(true, reset(($simple->xpath('/*')))), array(true, reset(($simple->simple->xpath('/*'))), array(false, $documentElement->child[0]), array(false, $documentElement->child->grandchild), array(false, $attribute), array(false, $attributeList), array(false, $attributeListEmpty), )), ); echo "Running tests with LIBXML ", LIBXML_DOTTED_VERSION, ":\n"; run_test_suite($suite); function run_test_suite(array $testsuite) { foreach ($testsuite as $caselabel => $testcasedef) { list($callback, $testcase) = $testcasedef; $stats[] = run_testcase($testcase, $callback, $caselabel); } echo "\n"; $stat['tests'] = 0; $stat['failures'] = 0; foreach ($stats as $singled) { $stat['tests'] += $singled['tests']; $stat['failures'] += $singled['failures']; echo $singled['messages']; } printf("Done %d tests with %d failures.", $stat['tests'], $stat['failures']); } function run_testcase(array $testcase, $callback, $label = null) { if ($label === null) $label = $callback; $stats['tests'] = 0; $stats['failures'] = 0; $messages = ''; foreach ($testcase as $i => $test) { list($expected, $subject, $testlabel) = $test + array(2 => "#$i"); $labeltest = $label . ' ' . $testlabel; ob_start(); $result = run_test($expected, $subject, $callback, $labeltest); $buffer = ob_get_clean(); echo $result ? '.' : 'F'; if ($buffer) { $messages .= sprintf("### %s ###\n", $labeltest); $messages .= $buffer; } $stats['tests']++; if (!$result) $stats['failures']++; } return $stats + array('messages' => $messages); } function run_test($expected, $subject, $callback, $label) { $actual = call_user_func($callback, $subject); if ($expected instanceof SimpleXMLElement and $actual instanceof SimpleXMLElement) { $result = $actual == $expected; } else { $result = $actual === $expected; } if (!$result) { $extra = ''; if ($subject instanceof SimpleXMLElement) { $extra = sprintf(' with %s', rtrim($subject->asXML())); } printf("FAILED to test %s%s.\n", $label, $extra); echo 'expected: ', var_dump($expected); echo 'actual:', var_dump($actual); } return $result; }

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
5.4.110.0130.06016.33
5.4.100.0100.04016.67
5.4.90.0030.07316.29
5.4.80.0100.06716.37
5.4.70.0130.05716.41
5.4.60.0000.07716.65
5.4.50.0100.07316.37
5.4.40.0030.07016.29
5.4.30.0070.05316.36
5.4.20.0030.07716.36
5.4.10.0130.06716.27
5.4.00.0100.07015.95
5.3.210.0030.05014.62
5.3.200.0100.07314.62
5.3.190.0100.07314.47
5.3.180.0070.07714.61
5.3.170.0100.07314.61
5.3.160.0070.07314.72
5.3.150.0070.07014.65
5.3.140.0130.05314.63
5.3.130.0000.05014.57
5.3.120.0130.06714.48
5.3.110.0100.03714.58
5.3.100.0200.05714.10
5.3.90.0030.07714.04
5.3.80.0030.04014.05
5.3.70.0070.07714.08
5.3.60.0100.04314.05
5.3.50.0030.04314.11
5.3.40.0130.07014.02
5.3.30.0030.03713.89
5.3.20.0000.04313.75
5.3.10.0170.06013.82
5.3.00.0000.07713.68

preferences:
145.29 ms | 1394 KiB | 7 Q