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; } }