在PHP中,您可以使用class_alias
function來定義類別別名。有沒有辦法獲得當前在運行時定義的所有類別名單?所有PHP別名列表
回答
正如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而言,一個別名是假設不可檢測,所以它的工作正常(對於更改)。
可疑的是,它是檢測第三方代碼中的別名。感謝您的runkit建議! – 2014-09-20 19:51:08
看看PHP的源代碼。別名註冊後,PHP不知道什麼是原始的,什麼是別名。像文件系統中的硬鏈接一樣。然而https://github.com/php/php-src/blob/master/Zend/zend_API.c#L2728
,答:你可以查看代碼,在它的最新版本,在這裏(注意,鏈接可能在你正在閱讀這個時刻已經過時搜索功能zend_register_class_alias_ex
然後。)函數顯示具有多個指定引用的類表的條目可以製作(在PHP的核心中,使用C),但看起來目前不可用。
+1我非常感謝你爲我挖掘源代碼 - 這是我希望自己擅長的事情之一。 – 2014-09-20 19:52:05
我很高興我可以幫忙.. :) – hek2mgl 2014-09-20 23:24:33
- 1. 搜索PHP陣列的所有級別
- 2. php mysql自動選擇別名表中的所有字段?
- 3. Android手機中所有證書的列表別名
- 4. MySQL從兩個表中選擇所有列別名
- 5. 如何在mySQL中同時'別名'表和所有列?
- 6. 如何識別所有表中存在名稱的列?
- 7. 如何獲取每個表的所有表名和所有列名和行名?
- 8. 所有可能的類別列表?
- 9. 所有用戶名的Postfix別名?
- 10. 重命名所有表中的列 - SQL
- 11. 所有頂級域名列表
- 12. postgres查詢列出所有表名
- 13. 列出所有列名
- 14. 命名實體識別與Python/PHP的預設名稱列表
- 15. 如何使用表別名返回具有重複列的所有數據
- 16. MYSQL聯盟所有有別名
- 17. 獲取所有PHP會話列表session_id
- 18. PHP MYSQL分頁列表所有字段
- 19. 製作列表的元素列表裏沒有別名
- 20. 表[表名]沒有列名爲[列名]
- 21. PL/SQL表和列別名
- 22. 尋找別名列表
- 23. 從ebay類別列表中導入所有類別
- 24. 獲取給定級別的所有級別兒童的列表
- 25. OPENROWSET沒有列別名?
- 26. 遊標SELECT列表中所需的別名,以避免重複的列名稱
- 27. 查詢MySQL表格一次以獲取所有類別的所有列表
- 28. SQLite和PHP列表類別
- 29. php獲取所有子目錄和所有文件的列表
- 30. 選擇類別列表是否具有父類別名稱?
不,但如果你是唯一一個創建別名,你可以做一些包裝單體類來處理這個亞。 – Smuuf 2014-09-20 08:16:30