gpt4 book ai didi

php - 加载一个名称与作为参数传递给自动加载器的名称不同的类

转载 作者:行者123 更新时间:2023-12-04 16:54:01 25 4
gpt4 key购买 nike

基本上,我有以下问题:我想利用 PHP 的新命名空间功能。不幸的是,我正在运行一个 PHP 版本 (5.3.2),其中对 linux 的命名空间自动加载支持似乎仍然有问题并且不起作用(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 的命名空间特性,那么当我以后切换到使用 native 命名空间支持而不是我的自动加载器时,我可以保留代码原样。

如果您认为我尝试做的事情根本没有意义,或者我误解了命名空间,请告诉我(- 我还没有使用 PHP 的命名空间功能)。

最佳答案

我会加载文件(它创建 XML 类),然后别名 XML类到正确命名空间 system\libraries\file\XML类(class):

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

更普遍:
class_alias(basename($class), $class));

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

关于php - 加载一个名称与作为参数传递给自动加载器的名称不同的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6161977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com