所有PHP别名列表

时间:2014-09-20 06:17:13

标签: php alias

在PHP中,您可以使用class_alias function定义类别名。有没有办法获取当前在运行时定义的所有类别名的列表?

2 个答案:

答案 0 :(得分:4)

看看PHP的源代码。注册别名后,PHP不知道原始内容是什么,别名是什么。就像文件系统中的硬链接一样。您可以在此处查看代码(最新版本):https://github.com/php/php-src/blob/master/Zend/zend_API.c#L2728

(请注意,在您阅读本文时,链接可能已过时。然后搜索函数zend_register_class_alias_ex。)

但是,可以制作一个函数来显示具有多个命名引用的类表的条目(在PHP的核心中,使用C)但看起来它现在不可用。

答案 1 :(得分:4)

正如hek2mgl所示,这在PHP中是不可能的。根据为什么,您希望这可能会有可行的解决方法。

我现在假设您正在尝试检测在第三方代码中创建的别名。然后,您可以install the Runkit module,将runkit.internal_override设置为1以启用本机功能修改,并在项目的根文件中执行以下操作:

runkit_function_rename('class_alias', 'class_alias_internal');
function class_alias($original, $alias, $autoload = TRUE)
{
    Logsomewhere("Creating alias from $original to $alias!");
    class_alias_internal($original, $alias, $autoload);
}

当然,这也意味着您可以精确构建您正在寻找的列表。我没有看到任何运行时生产用于此功能(如果我错了,请纠正我),因此您只需要在开发服务器上执行此操作,只要需要。由于Runkit是一个非常危险的模块,我甚至会在你完成它后立即在devserver上禁用它。

对于其他情况,类似的解决方法可能是可行的,但我需要知道您为什么要查找此信息。就PHP而言,别名是假设的是不可检测的,所以它的工作正常(为了改变)。