यह सुविधा PHP 5.5 में लागू की गई थी।
प्रलेखन: http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name
यह 2 कारणों के लिए बहुत उपयोगी है।
- आपको अब अपने वर्ग के नाम तारों में स्टोर करने की आवश्यकता नहीं है। इसलिए, जब आप अपना कोड
- रीफैक्टर करते हैं तो कई क्लास इन क्लास नामों को पुनर्प्राप्त कर सकते हैं आप अपनी कक्षा को हल करने के लिए
use
कीवर्ड का उपयोग कर सकते हैं और आपको पूर्ण श्रेणी का नाम लिखने की आवश्यकता नहीं है।
उदाहरण के लिए:
use \App\Console\Commands\Inspire;
//...
protected $commands = [
Inspire::class, // Equivalent to "\App\Console\Commands\Inspire"
];
अद्यतन:
यह सुविधा भी के लिए Late Static Binding उपयोगी है।
__CLASS__
जादू निरंतर उपयोग करने के बजाय, आप मूल कक्षा के अंदर व्युत्पन्न कक्षा का नाम प्राप्त करने के लिए static::class
सुविधा का उपयोग कर सकते हैं। उदाहरण के लिए:
if ($whatever instanceof static::class) {...}
यह एक वाक्य रचना त्रुटि फेंक देगा::
class A {
public function getClassName(){
return __CLASS__;
}
public function getRealClassName() {
return static::class;
}
}
class B extends A {}
$a = new A;
$b = new B;
echo $a->getClassName(); // A
echo $a->getRealClassName(); // A
echo $b->getClassName(); // A
echo $b->getRealClassName(); // B
क्या कोई कारण है कि लार्वेल ने इसे स्विच करने का फैसला किया? – Yada
यह प्रेरणा वर्ग पर स्थिर नहीं है। यह PHP द्वारा प्रदान की गई स्थिरता है। यह पूरी तरह से योग्य वर्ग नाम प्राप्त करने का एक त्वरित तरीका है। http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name – jfadich
@Yada मुझे विश्वास है कि इसका उपयोग कर लार्वेल के पीछे तर्क यह है कि यह आपको बनाने के लिए एक कम जगह देता है एक लेखन त्रुटि।आप एक ही चीज़ प्राप्त करने के लिए स्ट्रिंग '\ App \ Console \ Commands \ Inspire' या Inspire :: class का उपयोग कर सकते हैं, लेकिन आपका आईडीई बाद में सिंटैक्स/वर्तनी त्रुटियों को पकड़ लेगा जिससे इसे डीबग करना थोड़ा आसान हो जाएगा। – jfadich