2012-03-16 16 views
18

मैं अपने PHP5 ऑब्जेक्ट्स में कस्टम एनोटेशन लागू करने में सक्षम होना चाहता हूं, और मैं सीखना चाहता हूं कि पूरी प्रक्रिया कैसे अपना खुद का पार्सर बनाकर काम करती है।PHP5 ऑब्जेक्ट में एनोटेशन कैसे खोजें?

शुरू करने के लिए, मुझे यह जानने की जरूरत है कि एनोटेशन कैसे ढूंढें।

क्या कोई प्रतिबिंब विधि है जिसे मैं याद कर रहा हूं, या कोई और तरीका है?

उदाहरण के लिए, मैं एक कक्षा में निम्नलिखित एनोटेशन को खोजने के लिए सक्षम होने के लिए करना चाहते हैं:

/** 
* @MyParam: myvalue 
*/ 
+0

http://stackoverflow.com/search?q=annotation+parser+php – Gordon

+1

का संभावित डुप्लिकेट क्यों डॉक्टरेट एनोटेशन जैसी लाइब्रेरी का उपयोग नहीं कर रहा है? – leyou

उत्तर

41

आप इस ReflectionClass::getDocComment का उपयोग कर, उदाहरण के कर सकते हैं:

function getClassAnnotations($class) 
{  
    $r = new ReflectionClass($class); 
    $doc = $r->getDocComment(); 
    preg_match_all('#@(.*?)\n#s', $doc, $annotations); 
    return $annotations[1]; 
} 

लाइव डेमो: http://codepad.viper-7.com/u8bFT4

+0

है यदि फ़ाइल में कई टिप्पणियां हैं, तो क्या यह उन सभी को पकड़ लेगी? – johnnietheblack

+0

'-> getDocComment() 'आपके द्वारा जांच की जा रही ऑब्जेक्ट से संबंधित दस्तावेज़ टिप्पणी प्राप्त करता है (उस चीज़ की घोषणा से पहले डॉकब्लॉक टिप्पणी तुरंत)। आप ऑब्जेक्ट्स, क्लासेस, विधियों, फ़ंक्शंस और गुणों पर दस्तावेज़ टिप्पणियां भी प्राप्त कर सकते हैं। – MightyE

+2

@johnnietheblack आप http://php.net/manual/pl/class.reflectionmethod.php का उपयोग कर सकते हैं - निर्दिष्ट विधि के लिए केवल टिप्पणी को पकड़ने के लिए। – Slawek

8

आप टिप्पणी getDocComment प्रतिबिंब वस्तु पद्धति का उपयोग करके ब्लॉक मिल सकता है।

आप हाथ से एनोटेशन पुनः प्राप्त नहीं करना चाहते हैं, तो आप Zend Framework Reflection या अन्य मौजूदा समाधान का उपयोग कर सकते

+0

['सिद्धांत/एनोटेशन'] (https://github.com/doctrine/annotations) सबसे लोकप्रिय – DanFromGermany

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