我想学习 PHP 中的自动加载器,但加载器将我的路径复制到我的文件,但它不起作用。
<?php
function myAutoLoader($class){
$directories = [
__DIR__ . "/classes/account/",
__DIR__ . "/classes/database/",
];
$extension = ".php";
foreach ($directories as $directory){
$fullPath = $directory . str_replace('\\', '/', $class) . $extension;
var_dump($fullPath);
if(file_exists($fullPath)) {
require_once $fullPath;
return true;
}
}
return false;
}
spl_autoload_register('myAutoLoader');
和我的课程,我想要获得路径吗:
<?php
namespace controllers;
use classes\account\RegisterAccount;
require_once __DIR__ . "/../includes/autoloader.php";
class RegisterController extends RegisterAccount
但是路径重复: 字符串(94)“C:\xampp\htdocs eservationSystem\includes/classes/account/classes/account/RegisterAccount.php" 字符串(95)
我的目录结构是: 项目/ ├── 课程/ │ ├── 帐号/ | ___注册帐户.php │ └── 数据库/ │ └── Connect.php └── 包括/ └── autoloader.php
我在 youtube 和 sof 上搜索答案,但没有找到解决方案。
传入自动加载器的
$class
是包含命名空间的类。
所以在你的情况下
$class
的值是 classes\account\RegisterAccount
所以你可以废弃这部分
$directories = [
__DIR__ . "/classes/account/",
__DIR__ . "/classes/database/",
];
所以你的函数应该是这样的
function myAutoLoader($class){
$extension = ".php";
$fullPath = __DIR__ . '/' . str_replace('\\', '/', $class) . $extension;
if(file_exists($fullPath)) {
require_once $fullPath;
return true;
}
return false;
}