2015-06-11 7 views
33

PHP में ::class नोटेशन क्या है?PHP में कक्षा क्या है?

एक त्वरित Google खोज वाक्यविन्यास की प्रकृति के कारण कुछ भी नहीं लौटाती है।

पेट के पेट के वर्ग

इस अंकन उपयोग करने का लाभ क्या है?

protected $commands = [ 
    \App\Console\Commands\Inspire::class, 
]; 

उत्तर

14

class विशेष है, जो पूरी तरह से योग्य वर्ग के नाम प्राप्त करने के लिए php द्वारा प्रदान की गई है।

http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name देखें।

<?php 

class foo { 
    const test = 'foobar!'; 
} 

echo foo::test; // print foobar! 
+0

क्या कोई कारण है कि लार्वेल ने इसे स्विच करने का फैसला किया? – Yada

+6

यह प्रेरणा वर्ग पर स्थिर नहीं है। यह PHP द्वारा प्रदान की गई स्थिरता है। यह पूरी तरह से योग्य वर्ग नाम प्राप्त करने का एक त्वरित तरीका है। http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name – jfadich

+1

@Yada मुझे विश्वास है कि इसका उपयोग कर लार्वेल के पीछे तर्क यह है कि यह आपको बनाने के लिए एक कम जगह देता है एक लेखन त्रुटि।आप एक ही चीज़ प्राप्त करने के लिए स्ट्रिंग '\ App \ Console \ Commands \ Inspire' या Inspire :: class का उपयोग कर सकते हैं, लेकिन आपका आईडीई बाद में सिंटैक्स/वर्तनी त्रुटियों को पकड़ लेगा जिससे इसे डीबग करना थोड़ा आसान हो जाएगा। – jfadich

24

यह सुविधा 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 
0

कृपया निम्नलिखित का उपयोग करने के बारे में पता होना

unexpected 'class' (T_CLASS), expecting variable (T_VARIABLE) or '$'

लेकिन आप क्या कर सकते हैं निम्नलिखित बजाय:

$class = static::class; 
if ($whatever instanceof $class) {...} 

शायद यह अल्रिया है PHP 7 में तय किया गया है।

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