如果他们在名称空间中,我无法让我的自动加载器找到我的课程。
如果我在index.php中说没有命名空间Plugin \的新App并且没有在app.class.php中定义命名空间,那么它可以工作。
但是当我添加命名空间插件时,它说:
"致命错误:spl_autoload():类插件\ App无法加载.."
我尝试了不同的解决方案,甚至回归基础,但它似乎无法发挥作用。
我正在运行Windows 10 - 64位并使用Xammp
的index.php:
/**
* Require the autoloader
*/
require_once plugin_dir_path(__FILE__) . 'autoloader.php';
/**
* The init
*/
$class_ui = new Plugin\App;
$class_ui::init('Test');
autoloader.php:
set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__ . DIRECTORY_SEPARATOR . 'classes');
spl_autoload_extensions('.class.php');
spl_autoload_register();
app.class.php:
namespace Plugin;
class App {
static function init($echo) {
echo $echo;
}
}
修改
所以我有一个替代解决方案,但我不想打电话给答案'答案'因为内置的自动加载功能更快。
在我的 autoloader.php
中spl_autoload_register(function($class) {
$parts = explode('\\', $class);
require_once end($parts) . '.class.php';
});
所以我通过了注册功能一个自定义的关闭,它带有了类名(在我的情况下'插件/应用程序')并且只需要使用' App'部分并自己要求。它的工作原理也是如此(至少我也想要它)。
目前我的功能出现问题: - 没有内置功能那么快。 - 显然Windows不区分大小写,但unix是。所以在linux等上确保文件名与你调用的类名相匹配。但是可以先制作小写字母。 - 可能还有其他事情......
如果你有一个更好的解决方案,我会观看并标记答案,如果它很好。