Php 自动加载名称空间
我正在为一个简单的网站创建自己的MVC框架,我想使用名称空间,但我不知道如何自动加载它们。以下是我迄今为止所做的尝试: 我有一个具有自动加载功能的Php 自动加载名称空间,php,model-view-controller,autoload,Php,Model View Controller,Autoload,我正在为一个简单的网站创建自己的MVC框架,我想使用名称空间,但我不知道如何自动加载它们。以下是我迄今为止所做的尝试: 我有一个具有自动加载功能的init.php文件: spl_autoload_register(function($class){ $file = __DIR__ . '/../' . str_replace('\\', '/', $class) .'.php'; echo $file; if (file_exists($file)) {
init.php
文件:
spl_autoload_register(function($class){
$file = __DIR__ . '/../' . str_replace('\\', '/', $class) .'.php';
echo $file;
if (file_exists($file)) {
require_once $file;
echo 'yes';
}
use App\Core\App as App;
$app = new App;
此代码返回“是”,因此它可以定位应用程序文件。。但它也返回一个致命错误:D:\xampp\htdocs\MVC\App/。/App/Core/App.phpyes
致命错误:在第28行的D:\xampp\htdocs\MVC\App\init.php中找不到类“App\Core\App”
第28行是$app=新应用代码>
以下是我如何命名我的应用程序文件:
<?php
namespace App\Core\App;
class App
{
.....
你知道为什么吗?与其自己制作自动加载器,不如使用composer内置的自动加载器。只需在composer.json
文件中添加以下片段,即可完成:
"autoload": {
"psr-4": {
"": "dir_where_namespaces_start...usually_src"
}
}
此外,您不能真正创建和“mvc框架”,因为mvc架构是应用程序代码实现的,而不是框架。它可能是目录路径,是D:\xampp\htdocs\MVC\App\App\Core\App.php
?不是D:/xampp/htdocs/MVC/App/Core/App.php
,然后就像Chris说的那样,你需要更改名称空间或修复目录结构。它在呼应它是什么D:\xampp\htdocs\MVC\App/./App/Core/App.php
类App的名称空间应该是namespace-App\Core代码>如果您的命名空间是命名空间App\Core\App你的类是App
,它应该是$App=newapp\Core\App\App()
;你能看出这有多让人困惑吗?这是天才,工作起来很有魅力!我不知道你可以和作曲家一起做这件事。
"autoload": {
"psr-4": {
"": "dir_where_namespaces_start...usually_src"
}
}