自动加载命名空间
Autoloading namespaces
我正在为一个简单的网站创建我自己的 MVC 框架,我想使用命名空间,但我不知道如何自动加载它们。到目前为止,这是我尝试过的:
我有一个 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;
这段代码 returns "yes" 所以它找到了 App 文件。但是它也 returns 一个致命错误: D:\xampp\htdocs\MVC\App/../App/Core/App.phpyes
Fatal error: Class 'App\Core\App' not found in D:\xampp\htdocs\MVC\App\init.php on line 28
第 28 行是 $app = new App;
以下是我命名应用程序文件的方式:
<?php
namespace App\Core\App;
class App
{
.....
文件结构如下:
| App
|--| Core
|--|--| App.php
...
| init.php
知道为什么吗?
与其制作自己的自动加载器,不如使用 composer 内置的自动加载器。您只需在 composer.json
文件中添加以下段即可完成:
"autoload": {
"psr-4": {
"": "dir_where_namespaces_start...usually_src"
}
}
另外,你不能真正做到 "mvc framework",因为 MVC 架构是应用程序代码实现的,而不是框架。
我正在为一个简单的网站创建我自己的 MVC 框架,我想使用命名空间,但我不知道如何自动加载它们。到目前为止,这是我尝试过的:
我有一个 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;
这段代码 returns "yes" 所以它找到了 App 文件。但是它也 returns 一个致命错误: D:\xampp\htdocs\MVC\App/../App/Core/App.phpyes
Fatal error: Class 'App\Core\App' not found in D:\xampp\htdocs\MVC\App\init.php on line 28
第 28 行是 $app = new App;
以下是我命名应用程序文件的方式:
<?php
namespace App\Core\App;
class App
{
.....
文件结构如下:
| App
|--| Core
|--|--| App.php
...
| init.php
知道为什么吗?
与其制作自己的自动加载器,不如使用 composer 内置的自动加载器。您只需在 composer.json
文件中添加以下段即可完成:
"autoload": {
"psr-4": {
"": "dir_where_namespaces_start...usually_src"
}
}
另外,你不能真正做到 "mvc framework",因为 MVC 架构是应用程序代码实现的,而不是框架。