PHP विशेषताएँ PHP 8.0 में पेश की गईं। इस संस्करण ने भाषा के लिए एक महत्वपूर्ण मील का पत्थर साबित किया, जिसमें कोड घोषणाओं में मेटाडेटा जोड़ने के लिए विशेषताओं की शुरूआत सहित कई नई सुविधाएं और सुधार लाए गए।
पहली बार मुझे विशेषताओं से निपटना इंस्पेक्टर की PHP लाइब्रेरी में एक समस्या के कारण था। GitHub पर जांचें. समाधान में गहराई से जाने से पहले, आइए एक सिंहावलोकन लें कि विशेषताएँ क्या हैं और उनका उपयोग आपके PHP कोड में कैसे किया जा सकता है।
विशेषताएं एक शक्तिशाली सुविधा है जो आपको कक्षाओं, विधियों या गुणों जैसी घोषणाओं में मेटाडेटा जोड़ने की अनुमति देती है। इन मेटाडेटा को प्रोग्रामेटिक रूप से पुनर्प्राप्त किया जा सकता है, जिससे स्वच्छ, अधिक व्यवस्थित और कुशल कोड के लिए नई संभावनाएं खुलती हैं।
याद रखें, विशेषताओं का रनटाइम पर कोई प्रभाव नहीं पड़ता है। वे आपके एप्लिकेशन को उन चीजों से अवगत कराने के लिए रिफ्लेक्शन एपीआई में उपलब्ध होंगे जिन्हें आप क्लास, विधि या संपत्ति से जुड़ी विशेषताओं के आधार पर चलाना चाहते हैं।
PHP कई अंतर्निहित विशेषताओं के साथ आता है जो विभिन्न उद्देश्यों को पूरा करते हैं। यहां कुछ उल्लेखनीय हैं:
किसी फ़ंक्शन या विधि को बहिष्कृत के रूप में चिह्नित करता है, यह संकेत देता है कि इसे टाला जाना चाहिए क्योंकि इसे भविष्य के संस्करणों में हटाया जा सकता है।
#[Deprecated("Use newFunction() instead")] function oldFunction() { // Function implementation }
सुनिश्चित करता है कि चाइल्ड क्लास में विधि का उद्देश्य मूल वर्ग में एक विधि को ओवरराइड करना है।
class Child extends Parent { #[Override] public function defaultMethod() { // Method implementation } }
यदि defaultMethod() अंततः मूल वर्ग में अपना नाम बदल देगा तो यह अब ओवरराइड नहीं है। इस मामले में PHP एक चेतावनी जारी करेगी क्योंकि हमने स्पष्ट रूप से घोषणा की है कि हम ओवरराइड होने की उम्मीद करते हैं और हमें गलत संरेखण के बारे में सचेत करते हैं।
वैसे भी, एक अच्छी आईडीई हमें इस प्रकार की गलतियाँ नहीं करने देगी।
किसी विशेष कोड के लिए विशिष्ट चेतावनियों को दबाता है।
#[SuppressWarnings("SomeWarning")] function someFunction() { // Function implementation }
अब, एक कस्टम विशेषता वर्ग बनाएं। यह तब फायदेमंद होता है जब आप किसी विशेषता के भीतर विशिष्ट व्यवहार को समाहित करना चाहते हैं।
#[Attribute] class CustomAttribute { public string $message; public function __construct(string $message) { $this->message = $message; } }
फिर आप इस कस्टम विशेषता का उपयोग विभिन्न तत्वों पर कर सकते हैं:
class MyClass { #[CustomAttribute("This is a custom attribute")] public $myProperty; #[CustomAttribute("Another custom attribute")] public function myMethod() { // Method implementation } }
आइए एक व्यावहारिक उदाहरण देखें। मान लीजिए कि आप एक वेब एप्लिकेशन बना रहे हैं, और आप एक स्ट्रिंग की लंबाई निर्धारित करने के लिए एक कस्टम विशेषता बनाना चाहते हैं:
#[Attribute(Attribute::TARGET_PROPERTY)] class MaxLength { public int $maxLength; public function __construct(int $maxLength) { $this->maxLength = $maxLength; } }
उपरोक्त उदाहरण में हमने विशेषता को केवल वर्ग गुणों पर लागू करने की क्षमता को प्रतिबंधित किया है। अब हम इसे उपयोगकर्ता वर्ग में उपयोग कर सकते हैं:
class User { #[MaxLength(20, message: "Username must be 20 characters or less")] public string $username; // Other properties and methods }
जैसा कि संपत्ति में विशेषता जोड़ने से पहले उल्लेख किया गया है, निष्पादन के दौरान कोई प्रभाव नहीं पड़ता है। लेकिन अब हम अंततः कुछ कार्रवाई करने के लिए प्रतिबिंब का उपयोग करके इस जानकारी को पुनः प्राप्त कर सकते हैं।
सिम्फनी और लारवेल जैसे सबसे अधिक उपयोग किए जाने वाले PHP फ्रेमवर्क पहले से ही मूल रूप से "एनोटेशन" को बदलने के लिए विशेषताओं को अपना रहे हैं। सिम्फनी 5.2 या उच्चतर में आप एक नियंत्रक घोषित करने और विशेषताओं का उपयोग करके इसे एक रूट पर तार करने में सक्षम हैं:
public class Arrayable implements \ArrayAccess { … public function offsetExists($offset) { return isset($this->data[$offset]); } … }
PHP 8 के बाद से ArrayAccess इंटरफ़ेस की परिभाषा बदल गई:
विशेषताओं के उपयोग के साथ उन्होंने ऑफसेट फ़ंक्शंस में तर्कों के लिए डेटा प्रकार की घोषणा को लागू किया। यदि कार्यान्वयन तर्कों के लिए डेटा प्रकार प्रदान नहीं करता है, तो लैंग्वेजलेवलटाइपएवेयर विशेषता का उपयोग करते हुए यह "बहिष्करण चेतावनी" सक्रिय करता है।
लेकिन फ़ंक्शन तर्कों में डेटा प्रकार घोषित करने से PHP के पुराने संस्करणों के साथ संगतता टूट जाती है जो तर्क डेटा प्रकार घोषणा का समर्थन नहीं करते हैं।
चूंकि यह भविष्य में होने वाले बदलावों के लिए सिर्फ एक चेतावनी थी, इसलिए हमने चेतावनी को दबाने के लिए एक अन्य अंतर्निहित PHP विशेषता के साथ समस्या का समाधान किया:
public class Arrayable implements \ArrayAccess { … #[\ReturnTypeWillChange] public function offsetExists($offset) { return isset($this->data[$offset]); } … }
ReturnTypeWillChange विशेषता केवल PHP को बताती है कि हम भाषा में भविष्य के परिवर्तनों के बारे में जानते हैं, और हमने पहले ही आवश्यक अपडेट की योजना बना ली है।
विशेष रूप से इस परिवर्तन के लिए उन्हें निश्चित रूप से PHP 9 में लागू किया जाएगा।
अपने कोडबेस को साफ और अच्छी तरह से प्रलेखित रखते हुए, विशेषताओं का विवेकपूर्वक उपयोग करना याद रखें। यह SaaS उत्पाद विकास में विशेष रूप से महत्वपूर्ण है जहां स्केलेबिलिटी, रखरखाव और दक्षता सर्वोपरि है।
इंस्पेक्टर एक कोड निष्पादन निगरानी उपकरण है जो विशेष रूप से सॉफ्टवेयर डेवलपर्स के लिए डिज़ाइन किया गया है। आपको सर्वर स्तर पर कुछ भी इंस्टॉल करने की आवश्यकता नहीं है, बस कंपोजर पैकेज इंस्टॉल करें और आप जाने के लिए तैयार हैं।
अन्य जटिल, ऑल-इन-वन प्लेटफ़ॉर्म के विपरीत, इंस्पेक्टर सुपर आसान और PHP अनुकूल है। आप हमारे लारवेल या सिम्फनी पैकेज को आज़मा सकते हैं।
यदि आप प्रभावी स्वचालन, गहरी अंतर्दृष्टि, और अपने मैसेजिंग वातावरण में अलर्ट और सूचनाओं को अग्रेषित करने की क्षमता की तलाश में हैं तो इंस्पेक्टर को निःशुल्क आज़माएं। अपना खाता पंजीकृत करें।
या वेबसाइट पर अधिक जानें: https://inspector.dev
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3