有没有办法动态更改自动加载的类的名称?
例如,假设我有以下代码。
$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);
}
}
我知道这样的事情是否可能,这不完全是最佳实践,但我仍然想知道是否可行。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不,您可以加载不同的文件。您无法加载任何文件。您可以加载多个文件。但是在自动加载之后,PHP 期望该类像被调用时那样存在。
如果你调用一个类 X,你不能神奇地给 PHP 类 Y。
也许像这样设置文件系统就足够了,但仍然保留字面类名?
PS
我也想要这个有一段时间了。当我还没有访问命名空间的时候。现在我做到了,我所有的问题都解决了 =) 如果您确实有权访问命名空间,您应该“学习”PSR-0。
No. You could load a different file. You could load no file. You could load several files. But after autoloading, PHP expects the class to exist like it was called.
If you call a class X, you can't magically give PHP class Y.
Maybe it's enough to set up the filesystem like that, but still keep literal class names?
PS
I've wanted this for a while too. When I didn't have access to namespaces yet. Now that I do, all my problems are solved =) If you do have access to namespaces, you should 'study' PSR-0.
也许你可以使用class_alias,这样:
例如:
希望它可以帮助您。
Maybe you can use class_alias, this way:
E.g.:
Hope it can help you.