PHP - 自动加载和命名空间问题

时间:2016-03-03 17:41:32

标签: php namespaces autoloader

如果他们在名称空间中,我无法让我的自动加载器找到我的课程。

如果我在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等上确保文件名与你调用的类名相匹配。但是可以先制作小写字母。 - 可能还有其他事情......

如果你有一个更好的解决方案,我会观看并标记答案,如果它很好。

0 个答案:

没有答案