2009-01-24 9 views
5

मुझे पता है कि आप get_class ($ यह) सामान्य रूप से उपयोग कर सकते हैं, लेकिन मुझे कक्षा के नाम को स्थिर कार्य में प्राप्त करने की आवश्यकता है जहां ऑब्जेक्ट को तत्काल नहीं किया गया है।PHP में एक uninstantiated वस्तु से वर्तमान कक्षा का नाम पाने के लिए संभव है?

class ExampleClass 
{ 
    static function getClassName() 
    { 
     echo get_class($this); // doesn't work unless the object is instantiated. 
    } 
} 

$test1 = new ExampleClass(); 
$test1->getClassName(); // works 

ExampleClass::getClassName(); // doesn't work 
+0

आप यह जानने के लिए अपना प्रश्न संपादित करना चाहते हैं कि आप समझते हैं कि $ स्थिर स्थिति में इसका कोई अर्थ नहीं है - मुझे लगता है कि कुछ लोग आसानी से सोच सकते हैं कि आपको यह समझ में नहीं आता कि यह '$' का क्या अर्थ है। get_called_class के बारे में भी मेरा उत्तर देखें। –

उत्तर

3

मैं पता लगा आप __CLASS__ का उपयोग कर सकते वर्ग के नाम पाने के लिए:

निम्नलिखित कोड देखें। उदाहरण:

class ExampleClass 
{ 
    static function getClassName() 
    { 
     echo __CLASS__; 
    } 
} 
+7

ध्यान दें कि __CLASS__ उस वर्ग को वापस कर देगा जहां फ़ंक्शन परिभाषित किया गया है। यदि आप इसे विस्तारित करते हैं, तो आपको उप-वर्ग नहीं मिलेगा। – troelskn

+1

@troelskn: गधे में पूछने वाले को बहुत अच्छी तरह से काट सकता है। आपको इसे एक उत्तर के रूप में जमा करना चाहिए ताकि लोग इसे देख सकें। –

8

मैं तुम्हें get_called_class() फ़ंक्शन के लिए देख रहे हैं, अगर आप एक स्थिर विधि से वर्ग के नाम प्राप्त करना चाहते हैं लगता है।

अधिक जानकारी के लिए get_called_class documentation देखें।

0

मेरा सवाल यह है कि, आप कक्षा के नाम को पहली जगह जानने के बिना स्थिर कार्य को कॉल करने के लिए कैसे प्रबंधित कर रहे हैं?

केवल दो तरीके मैं के बारे में सोच सकते हैं:

ExampleClass::getClassName(); //Hard Coded - the class name is hard and visible 
$class = "ExampleClass"; 
$class::getClassName();  //Soft Coded - the class name is the value of $class 

शायद एक बेहतर समाधान अगर हम संदर्भ में जो आप कॉल करने के लिए कोशिश कर रहे हैं पता था की पेशकश की जा सकती है?

+0

मैं विरासत वर्ग को बुला रहा हूं और अभिभावक वर्ग में एक स्विच() कथन है जिसके लिए कक्षा का नाम तय करना है कि –

+0

क्या वैरिएबल डेटा है जिससे आप स्विच करने की कोशिश कर रहे हैं जिसके लिए एक स्थिर कार्य की आवश्यकता होगी? –

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