2

基本上,我有以下问题:我想利用 PHP 的新命名空间功能。不幸的是,我正在运行一个 PHP 版本(5.3.2),其中 linux 的 namespace-autoload-support 似乎仍然存在错误并且不起作用(PHP 应该能够通过其命名空间自动加载类文件而无需使用自定义自动加载器,但这不起作用)。

我想要实现的是编写一个自动加载器,只要 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 的命名空间功能)。

4

1 回答 1

3

我将加载文件(创建XML类),然后将XML类别名为正确命名空间的system\libraries\file\XML类:

class_alias('XML', 'system\libraries\file\XML');

更普遍:

class_alias(basename($class), $class));

虽然我不太确定是否class_alias可以别名为命名空间类......

于 2011-05-28T13:48:04.897 回答