例如,假设我有以下代码。
$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);
}
}
我知道如果这样的事情是可能的,这不是最好的做法,但我仍然想知道它是不是。
答案 0 :(得分:3)
没有。您可以加载其他文件。你可以加载任何文件。你可以加载几个文件。但是在自动加载之后,PHP期望该类存在就像它被调用一样。
如果你调用类X,你就不能神奇地给PHP类Y.
也许它足以设置这样的文件系统,但仍保留文字类名称?
<强> PS 强>
我也想要一段时间。当我还没有访问命名空间时。现在我做了,我的所有问题都解决了=)如果你有权访问命名空间,你应该'学习'PSR-0。
答案 1 :(得分:0)
也许你可以这样使用class_alias:
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);
}
}
希望它可以帮到你。