php - php - 自动加载不适用于静态方法
问题描述
我使用 spl_autoload_register 来自动加载类
我的结构
index.php
Module\Autoloader.php
Module\MyClass.php
Test\test.php
在index.php
文件中
require_once ("Module\Autoloader.php");
use Module\MyClass;
include 'Test\test.php';
在Module\Autoloader.php
文件中
class Autoloader {
static public function loader($className) {
$filename = __DIR__."/" . str_replace("\\", '/', $className) . ".php";
echo $filename.'<br>';
if (file_exists($filename)) {
include($filename);
}
}
}
spl_autoload_register('Autoloader::loader');
在Module\MyClass.php
文件中
namespace Module;
class MyClass {
public static function run() {
echo 'run';
}
}
在Test\test.php
文件中
MyClass::run();
但它有错误
Fatal error: Uncaught Error: Class 'MyClass' not found in ..\Test\test.php
怎么解决 谢谢
解决方案
你的问题是你预先__DIR__
__DIR__
基于调用它的文件所在的位置:
__DIR__
文件的目录。如果在包含中使用,则返回包含文件的目录。这相当于 dirname(
__FILE__
)。此目录名称没有尾部斜杠,除非它是根目录。
http://php.net/manual/en/language.constants.predefined.php
因此,因为您的自动加载程序例程位于 ./Module/
__DIR__
从 index.php 调用时不会返回/
,但是Module
,使您完成的类路径Module/Module/MyClass.php
显然无法找到。
要么使用另一种添加目录的方法,例如预先确定的列表,要么使用命名空间的第一部分(所以只需放弃__DIR__
)或将类移动到相对于包含文件所在目录的位置。
推荐阅读
- javascript - 导航栏菜单与部分内容一起出现?
- javascript - 如何使用 JQuery 函数模块化大型 js 文件?
- javascript - WordPress网站被黑重定向
- python - 将 VBA 脚本转换为 Python 脚本
- android - Xamarin Forms VLC 自动音频延迟
- python - 使用纹理贴图自动分配着色器
- php - 分页显示一个额外的页面
- python - Python:将一列添加到具有不同长度的数据框中,重复添加的列直到填充数据框长度
- mysql - ERROR 1452:无法在 MySQL 中添加或更新子行
- javascript - 工具提示在点击时显示/隐藏 JavaScript / CSS