我想要实现的是编写一个自动加载器,只要php的命名空间功能正常工作(不使用自定义自动加载器时似乎有速度优势),我就可以简单地删除它,而不得不像以下那样更改代码事后可能。
所以我有这样的电话:
$filereader = new system\libraries\file\XML();
作为字符串“system \ libraries \ file \ XML”正确传递给我的自动加载功能。我可以加载相应的文件“system / libraries / file / XML.class.php”。但是,那里的类将被命名为
class XML { ... }
(或者与“system \ libraries \ file \ XML”不同的东西),因此具有与PHP尝试加载它的名称不同的名称。那么是否有一种简单的方法来加载该类(“XML”),该类的名称与我传递给自动加载器函数的名称不同?我可以在自动加载器中做一些事情来实现这种行为吗? (我正在使用spl_autoload_register)。
我知道即使它成功了,我仍然无法使用命名空间的所有功能,因为(简单的)自动加载器不会尊重“使用命名空间”指令,我仍然需要使用相当长的名称加载一个类。但是,如果我正确理解了PHP的命名空间功能,那么当我稍后切换到使用本机命名空间支持而不是自动加载器时,我可以保留代码。
如果我尝试做的事情在您看来根本没有意义或者我误解了命名空间,请告诉我( - 我还没有使用过PHP的命名空间功能)。
答案 0 :(得分:3)
我会加载文件(创建XML
类),然后将XML
类别名为正确命名空间的system\libraries\file\XML
类:
class_alias('XML', 'system\libraries\file\XML');
更一般地说:
class_alias(basename($class), $class));
虽然我不太确定class_alias
是否可以为命名空间类设置别名......