2014-09-20 7 views
6

PHP में, आप class_alias function का उपयोग कर कक्षा उपनाम परिभाषित कर सकते हैं। वर्तमान में रनटाइम पर परिभाषित सभी कक्षा उपनामों की सूची प्राप्त करने का कोई तरीका है?सभी PHP उपनामों की सूची

+2

नहीं, लेकिन यदि आप केवल एक ही उपनाम बना रहे हैं, तो आप इसे किसी के लिए संभालने के लिए किसी प्रकार का रैपर सिंगलटन क्लास बना सकते हैं। – Smuuf

उत्तर

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); 
} 
बेशक

यह भी मतलब है कि आप वास्तव में सूची आप बना सकते हैं की मांग की। मुझे इस कार्यक्षमता के लिए कोई रनटाइम उत्पादन उपयोग नहीं दिख रहा है (यदि मैं गलत हूं तो मुझे सही करें) ताकि आपको केवल तब तक विकास सर्वर पर ऐसा करना होगा जब तक आवश्यक हो। चूंकि रंकिट काफी खतरनाक मॉड्यूल है, जैसे ही आप इसके साथ काम कर रहे हैं, मैं इसे डिवीसर पर भी अक्षम कर दूंगा।

अन्य परिदृश्यों के लिए समान कार्यवाही व्यवहार्य हो सकती है, लेकिन मुझे यह जानना होगा कि आप यह जानकारी क्यों लेते हैं। जहां तक ​​PHP का संबंध है, उपनाम माना जा सकता है, इसलिए यह अपना काम ठीक कर रहा है (बदलाव के लिए)।

+0

जितना ज्यादा संदेह है, और हां, यह तीसरे पक्ष के कोड में उपनामों का पता लगा रहा है। रनकिट सुझाव के लिए धन्यवाद! –

4

PHP के स्रोत कोड पर एक नज़र डालें। उपनाम पंजीकृत होने के बाद, PHP को पता नहीं है कि मूल क्या है और उपनाम क्या है। फाइल सिस्टम में हार्डलिंकिंग की तरह। यह सबसे हाल के संस्करण, यहाँ है में आप कोड देख सकते हैं,: (। ध्यान दें कि लिंक पल आप यह पढ़ रहे हैं पर पुराना हो सकता है समारोह zend_register_class_alias_ex के लिए खोज तो।) https://github.com/php/php-src/blob/master/Zend/zend_API.c#L2728

हालांकि, एक फ़ंक्शन जो क्लास टेबल की प्रविष्टियों को दिखाता है जिसमें एक से अधिक नाम संदर्भ हैं, को तैयार किया जा सकता है (PHP के मूल में, सी के साथ) लेकिन ऐसा लगता है कि यह फिलहाल उपलब्ध नहीं है।

+1

+1 मैं आपके लिए स्रोत के माध्यम से खुदाई करने की अत्यधिक सराहना करता हूं - यह उन चीजों में से एक है जो मैं चाहता हूं कि मैं बेहतर था। –

+1

मुझे खुशी है कि मैं मदद कर सकता हूं .. :) – hek2mgl

संबंधित मुद्दे