prefixes[$name])) {
array_push($this->prefixes[$name], $path);
} else {
$this->prefixes[$name] = [$path];
}
}
/**
* 尝试根据前缀和类名加载文件
* @param $class
* @return bool
*/
private function loadClass($class)
{
// 首次,将前缀等于当前类名
$prefix = $class;
// 从最后一个反斜杠开始分割前缀与类名
while (($pos = strrpos($prefix, '\\')) !== false) {
// 取出当前位置反斜杠分割的前缀
$prefix = substr($class, 0, $pos + 1);
// 取出分割出的实际类名
$className = substr($class, $pos + 1);
// 尝试去加载文件
$loadFile = $this->loadFile($prefix, $className);
if ($loadFile) {
return true;
}
$prefix = rtrim($prefix, '\\');
}
// 未找到文件
return false;
}
/**
* 加载文件
* @param $prefix
* @param $class
* @return bool
*/
private function loadFile($prefix, $class)
{
// echo $class . '
';
$prefix = trim($prefix, '\\');
// 如果存在此前缀
if (isset($this->prefixes[$prefix])) {
// 遍历当前前缀下的目录
foreach ($this->prefixes[$prefix] as $key => $value) {
// 拼接文件名
$file = str_replace('\\', '/', $value . $class) . '.php';
/*echo '
';
echo $file . '
';*/
// 如果文件存在则加载文件
if (file_exists($file)) {
require $file;
return true;
}
}
}
return false;
}
}