2013-05-13 3 views
16

PHP में उदाहरण के अंदर उपयोग किए जाने पर get_called_class() और get_class($this) के बीच क्या अंतर है?

उदाहरण:

class A { 
    function dump() { 
     echo get_called_class(); 
     echo get_class($this); 
    } 
} 

class B extends A {} 

$A = new A(); 
$B = new B(); 

$A->dump(); // output is 'AA' 
$B->dump(); // output is 'BB' 

इस मामले में कोई अंतर है?

जब मैं एक या दूसरे get_called_class() या get_class($this) का उपयोग करना चाहिए?

उत्तर

18

इस मामले में वहाँ कोई अंतर नहीं है, क्योंकि $this हमेशा सही उदाहरण है, जिसमें से वर्ग के नाम का उपयोग कर get_class() हल हो गई है के लिए अंक है।

समारोह get_called_class() स्थिर तरीकों के लिए है। जब स्थिर तरीकों अधिरोहित कर रहे हैं, इस समारोह वर्ग के नाम है कि वर्तमान पद्धति है कि बुलाया जा रहा है के लिए संदर्भ प्रदान करता है वापस आ जाएगी।

0

इस उदाहरण में कोई अंतर नहीं है, दोनों वर्ग के नाम वापसी, लेकिन get_called _class लेट स्टेटिक

1
इस मामले में

नहीं बाध्यकारी है ... डंप एक स्थिर तरीका था, तो और $this पैरामीटर को खत्म तो get_class दोनों ही मामलों में 'ए' वापसी होगी और get_called_class 'बी' वापसी होगी जब तुमने किया था B::dump();

0

जवाब है, इस विशेष मामले में, यह है: नहीं

कोई अंतर नहीं है।


संदर्भ: (http://php.net/manual/en/function.get-class.php)

स्ट्रिंग get_class ([वस्तु $ वस्तु = शून्य])

...

वस्तु शामिल न करने पर जब अंदर एक वर्ग है, उस वर्ग के नाम दिया जाता है।

11

PHP = = 5.5 में get_called_class() के बहुत तेज़ विकल्प के लिए, static::class का उपयोग करें। यह विरासत में मिला है तरीकों के लिए के रूप में, स्थैतिक विधि कॉल के लिए शीर्ष स्तर वर्ग पाने के लिए और साथ ही काम करता है।

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