<?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