有没有办法动态更改自动加载的类的名称?

时间:2011-05-02 20:07:50

标签: php autoloader

例如,假设我有以下代码。

$foo = new bar();

像这样的自动加载器。

function autoload($class_name) {
    $class_file_name = str_replace('_', '/', $class_name) . '.php';
    if (file_exists($class_file_name)) {
        include($class_file_name);
    }
}

但是我真正想要加载的类是在'foo / bar.php'文件夹中,真正的类名实际上是foo_bar。有没有办法动态更改自动加载的类的名称?例如,这样的事情?

function autoload(&$class_name) {
    $class_name = 'foo_' . $class_name;
    $class_file_name = str_replace('_', '/', $class_name) . '.php';
    if (file_exists($class_file_name)) {
        include($class_file_name);
    }
}

我知道如果这样的事情是可能的,这不是最好的做法,但我仍然想知道它是不是。

2 个答案:

答案 0 :(得分:3)

没有。您可以加载其他文件。你可以加载任何文件。你可以加载几个文件。但是在自动加载之后,PHP期望该类存在就像它被调用一样。

如果你调用类X,你就不能神奇地给PHP类Y.

也许它足以设置这样的文件系统,但仍保留文字类名称?

<强> PS
我也想要一段时间。当我还没有访问命名空间时。现在我做了,我的所有问题都解决了=)如果你有权访问命名空间,你应该'学习'PSR-0

答案 1 :(得分:0)

也许你可以这样使用class_alias

  • PHP需要X类
  • 您想要加载Y类。
  • 您为类Y创建别名X,因此X的行为类似于Y。

E.g:

function autoload($class_name) {
    $real_class_name = 'foo_' . $class_name;
    $class_file_name = str_replace('_', '/', $real_class_name) . '.php';
    if (file_exists($class_file_name)) {
        include($class_file_name);
        class_alias($real_class_name, $class_name);
    }
}

希望它可以帮到你。