3v4l.org

run code in 300+ PHP versions simultaneously
<?php $a = function($className) { if (strpos($className, '\\') !== false) { $parts = array_map('strtolower', array_values(explode('\\', $className))); $count = count($parts); $folder = $file = ''; while ($count--) { if ($count >= 1) { $folder .= array_shift($parts) . ($count > 1 ? '/' : ''); } else { $file = array_shift($parts); } } // Not really a great idea if (substr($folder, 0, 3) == 'api') { $folder = str_replace('api', 'controller/api', $folder); } $fileName = ROOT . '/' . $folder . '/' . $file . '.php'; // Reroute \<namespace>\exception.php -> \library\exception.php if ($file == "exception" && $className != 'API\Exception') { $fileName = ROOT . '/library/exception.php'; } if (is_readable($fileName)) { return $fileName; return true; } } return false; }; $b = function($className) { $className = ltrim($className, '\\'); $fileName = ''; $namespace = ''; if ($lastNsPos = strrpos($className, '\\')) { $namespace = substr($className, 0, $lastNsPos); $className = substr($className, $lastNsPos + 1); $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR; } $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; return $fileName; }; $tests = [ '\Library\Database::doQuery', '\Vendor\twilio-php\x', '\namespace\package\Class_Name', '\namespace\package_name\Class_Name' ]; echo '<pre>'; foreach ($tests as $test) { echo 'input ', $test, PHP_EOL; echo 'icr: ', $a($test), PHP_EOL; echo 'psr: ', $b($test), PHP_EOL; }

preferences:
69.28 ms | 402 KiB | 5 Q