2014-09-20 41 views
6

在PHP中,您可以使用class_alias function來定義類別別名。有沒有辦法獲得當前在運行時定義的所有類別名單?所有PHP別名列表

+2

不,但如果你是唯一一個創建別名,你可以做一些包裝單體類來處理這個亞。 – Smuuf 2014-09-20 08:16:30

回答

4

正如hek2mgl所示,這在PHP中不可行。取決於爲什麼你想這可能有可行的解決方法,但。

我假設你現在正在嘗試檢測在第三方代碼中創建的別名。然後install the Runkit module你可以設置runkit.internal_override1,使本機的功能改進,並做這樣的事情在你的項目的根文件:

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而言,一個別名是假設不可檢測,所以它的工作正常(對於更改)。

+0

可疑的是,它是檢測第三方代碼中的別名。感謝您的runkit建議! – 2014-09-20 19:51:08

4

看看PHP的源代碼。別名註冊後,PHP不知道什麼是原始的,什麼是別名。像文件系統中的硬鏈接一樣。然而https://github.com/php/php-src/blob/master/Zend/zend_API.c#L2728

,答:你可以查看代碼,在它的最新版本,在這裏(注意,鏈接可能在你正在閱讀這個時刻已經過時搜索功能zend_register_class_alias_ex然後。)函數顯示具有多個指定引用的類表的條目可以製作(在PHP的核心中,使用C),但看起來目前不可用。

+1

+1我非常感謝你爲我挖掘源代碼 - 這是我希望自己擅長的事情之一。 – 2014-09-20 19:52:05

+1

我很高興我可以幫忙.. :) – hek2mgl 2014-09-20 23:24:33