我已经创建了下一个类来自动加载其他类:
declare(strict_types=1);
namespace Framework;
if (!defined('DS')) {
define('DS', DIRECTORY_SEPARATOR);
}
if (!defined('BD')) {
define('BD', dirname(__DIR__));
}
use Exception;
class Autoloader
{
private static ?Autoloader $instance = null;
public static function getInstance(): Autoloader
{
if (!self::$instance instanceof self) {
self::$instance = new self();
}
return self::$instance;
}
public function __construct()
{
spl_autoload_register([$this, 'autoload'], true, true);
}
public function autoload($class): void
{
try {
$newclass = str_replace('\\', '/', $class);
$parts = explode(DS, $newclass);
$filename = BD . DS . implode(DS, $parts) . '.php';
if (file_exists($filename)) {
require_once $filename;
} else {
throw new Exception('Class File not Found: ' . $filename);
}
} catch (Exception $e) {
echo $e->getMessage();
}
}
}
Autoloader::getInstance();
这是我的项目的目录和文件结构:
+project
|
+public (root)
| +----index.php (.htaccess entry point)
|
+FrameWork
+----App
| +----ClDetector.php
| +----Core.php
+----Autoloader.php
当我尝试加载ClDetector.php
时,测试成功。
稍后,当我尝试加载Core.php
时,我得到错误:
但服务器上存在这两个文件:
我在linux服务器上得到这个错误;在windows 11上本地主机工作得很好,我不知道发生了什么...或者如何解决这个问题...
ExceptionHandler
File: /home/vol1_1/epizy.com/epiz_33082351/htdocs/FrameWork/Autoloader.php
Line: 54 Level: Not Set
Description: Class File not Found: /home/vol1_1/epizy.com/epiz_33082351/htdocs/Framework/App/Core.php
BackTrace Log:
Magic Call Method: (Framework\Autoloader)->autoload()
/home/vol1_1/epizy.com/epiz_33082351/htdocs/public/index.php 16 calling Method: spl_autoload_call()
1条答案
按热度按时间5t7ly7z51#
是否尝试将目录从
FrameWork
重命名为Framework
?小写的
w