2013-02-02 18 views
5

मैं इस वर्ग स्थिर संपत्ति को acces के लिए वर्ग के नाम के रूप में निरंतर उपयोग करने की आवश्यकता के रूप में निरंतर, किउपयोग वर्ग के नाम

class a { 

    public static $name = "Jon"; 

} 

define("CLASSNAME", "a"); 

echo CLASSNAME::$name; 

इस रिटर्न त्रुटि है तो उस वर्ग CLASSNAME मौजूद नहीं है। कुछ समाधान है?

+1

अच्छा सवाल। हम्म। – Prash

+0

शायद यदि आप बताते हैं कि आप वास्तव में क्या करना चाहते हैं, तो कुछ बेहतर वैकल्पिक तरीके हो सकते हैं। यह एक [XY समस्या] हो सकता है (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –

उत्तर

4

यह प्रतिबिंब के साथ संभव है:

class a { 

    public static $name = "Jon"; 

} 

define("CLASSNAME", "a"); 

$obj = new ReflectionClass(CLASSNAME); 
echo $obj->getStaticPropertyValue("name"); 

यदि यह एक अच्छे डिजाइन पसंद है एक और सवाल है ...

+0

हाँ, यह काम कर रहा है। – ripa

0

उपयोग PHP के अपसंदर्भन के निरपेक्ष गड़बड़:

$CLASSNAME = 'a'; 
$a::$name; 
0

मैं देख रहा था इस समस्या में क्योंकि कक्षा एक निश्चित संदर्भ पर आधारित है जिसे देना है। तो मैं मेरी कक्षा में एक समारोह के उस वर्ग तुम इतनी तरह की आवश्यकता होती है वापस आ जाएगी बनाया:

/** 
* Instantiate a class by class name in variable 
* 
* @param string $className The name of the class 
* @return mixed The instantiated class 
*/ 
protected function getClass($className) 
{ 
    return new $className; 
} 

इसलिए आप $class = new $this->getClass(static::CLASSNAME); का उपयोग करके इसे कॉल कर सकते हैं जब आप वर्तमान वर्ग कि क्लास का नाम धारण भीतर एक निरंतर परिभाषित आप तत्काल करना चाहते हैं। आपके मामले में आप इसका उपयोग 'static::' या जो भी वैरिएबल आप उपयोग करना चाहते हैं उसके बिना कर सकते हैं। कुछ त्रुटि हैंडलिंग को लागू करने के लिए मत भूलना।