मैं PHP में किसी विशिष्ट नेमस्पेस के भीतर सभी कक्षाओं के नाम प्राप्त करना चाहता हूं। वर्तमान में, मैं नामित कक्षाओं की एक विशिष्ट सूची पर प्रतिबिंब के माध्यम से कुछ जादू करने का प्रयास कर रहा हूं, लेकिन मैं समय से पहले नाम जानने के बिना इसे करना चाहता हूं।PHP में, क्या सभी घोषित कक्षाओं को एक विशिष्ट नामस्थान में प्राप्त करने का कोई तरीका है?
मैंने get_declared_classes()
पर कॉल करने का प्रयास किया है, लेकिन किसी भी कारण से, मेरे द्वारा उपलब्ध कक्षाएं दिखाई नहीं दे रही हैं। मैं get_declared_classes()
पर कॉल कर सकता हूं, सूची में Event
नहीं देखता, फिर बिना किसी समस्या के $x = new Event()
पर कॉल करें। निम्नलिखित की तरह कुछ, जो मुझे लगता है कि एक समस्या का कारण बनना चाहिए ...
if (! in_array('Event', get_declared_classes())) { $x = new Event(); }
... ठीक काम करता है। मैं सोच रहा हूं कि इन वर्गों को नामित करने और उस तरह से पुनर्प्राप्त करने से समस्या को कम करने में मदद मिलेगी। क्या यह संभव है?
संपादित करें: स्पष्टीकरण के लिए, मुझे यह जोड़ने दें कि मैं वर्तमान में नामस्थान का उपयोग नहीं कर रहा हूं, और मैं विशेष रूप से उपर्युक्त सूचीबद्ध कोड से कुछ प्राप्त करने की कोशिश नहीं कर रहा हूं। मैं जो चाहता हूं वह सभी वर्गों के नाम प्राप्त करना है जिन्हें मैंने घोषित किया है। इस तथ्य के बावजूद कि get_declared_classes()
पर कॉल करने से पहले उन सभी के लिए कक्षा घोषणाएं प्रभावित की जा रही हैं, वे सभी सूची में शामिल नहीं हो रहे हैं। मैं उम्मीद कर रहा था कि नामस्थान समस्या को हल करने में मदद कर सकता है।
EDIT2: कई लोगों ने इंगित किया है कि कक्षाएं ऑटोलोड हो सकती हैं। मैंने निम्नलिखित करके इसका परीक्षण किया। echo(class_exists('Event'))
ने 1
का एक मूल्य वापस कर दिया। echo(class_exists('Event', FALSE))
ने 0 का मान वापस कर दिया। दूसरा, class_exists के लिए वैकल्पिक पैरामीटर यह है कि स्वत: लोड करना है या नहीं। तो, स्पष्ट रूप से कक्षा को स्वत: लोड किया जा रहा है। वह जवाब देता है।
तो, अगला प्रश्न - मैं इसे कैसे रोकूं? मैं एक ढांचे का उपयोग कर रहा हूं जो वास्तव में मुझे बहुत कम स्तर का नियंत्रण नहीं देता है। क्या स्वत: लोडिंग को मजबूर करने का कोई तरीका है, फिर get_declared_classes
पर कॉल करें, या get_declared_classes
पर पहले ऑटोलोड लोड करने के लिए?
इस परिदृश्य में get_declared_classes में ईवेंट नहीं है, क्या इवेंट कोड लोड किया गया है? दूसरे शब्दों में, क्या फ़ाइल में इवेंट की कक्षा घोषणा शामिल है (या अन्यथा कोड के प्रवाह में परिभाषित किया गया है)? – Corbin
मुझे परीक्षण करने के लिए परेशान किया गया है, लेकिन मुझे लगता है कि ऐसा इसलिए हो सकता है क्योंकि आपने एक उपयोग कथन के साथ एक एनएस का संदर्भ दिया है और सरणी में वर्ग का नाम नामस्थान के साथ पूरी तरह से योग्यता प्राप्त करने वाला है। ताकि जब 'नया इवेंट' वास्तव में '\ कुछ \ अन्य नामस्थान \ ईवेंट' का संदर्भ दे रहा हो। – prodigitalson
@ कॉरबिन इवेंट कोड निश्चित रूप से लोड किया गया है। यदि नहीं, तो 'x x = नया इवेंट() 'असफल हो जाएगा, है ना? – rybosome