PHP में Generics: क्यों आवश्यक हैं और व्यवहार में कैसे उपयोग करें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: Generics क्या हैं और PHP में ये क्यों महत्वपूर्ण हैं

\n\n

PHP में आधुनिक विकास में तेजी से सख्त टाइपिंग और पुन: प्रयोज्य कोड की आवश्यकता होती है। इन लक्ष्यों को प्राप्त करने वाले प्रमुख उपकरणों में से एक हैं Generics (सामान्यीकरण या जेनेरिक्स)। PHP में Generics का समर्थन आधिकारिक तौर पर संस्करण PHP 8.0 से जोड़ा गया था, हालांकि पहले विभिन्न उपयोगिताएँ और एनोटेशन (जैसे, PHPDoc के माध्यम से) मौजूद थे।

\n\n

इस लेख में, हम समझेंगे कि PHP में Generics की आवश्यकता क्यों है, वे व्यवहार में कैसे काम करते हैं, और विशिष्ट कोड उदाहरण देंगे जो आपको अधिक सुरक्षित, पठनीय और स्केलेबल कोड लिखने में मदद करेंगे।

\n\n

PHP में Generics की आवश्यकता क्यों है?

\n\n

Generics का मुख्य उद्देश्य सामान्यीकृत कोड के लचीलेपन को खोए बिना रनटाइम के दौरान टाइप सुरक्षा सुनिश्चित करना है। कल्पना करें कि आप तत्वों के संग्रह के साथ काम करने के लिए एक फ़ंक्शन लिख रहे हैं। Generics के बिना, आप या तो मिश्रित प्रकार (mixed) का उपयोग करते हैं, या प्रत्येक डेटा प्रकार के लिए अलग-अलग फ़ंक्शन लिखते हैं। दोनों दृष्टिकोण त्रुटियों और कोड दोहराव की ओर ले जाते हैं।

\n\n

Generics के उपयोग के मुख्य लाभ इस प्रकार हैं:

\n\n
    \n
  • टाइप सुरक्षा — टाइप त्रुटियाँ रनटाइम के बजाय संकलन चरण पर पहचानी जाती हैं।
  • \n
  • कोड का पुन: उपयोग — एक फ़ंक्शन या क्लास किसी भी डेटा प्रकार के साथ काम करता है।
  • \n
  • पठनीयता — कोड स्व-दस्तावेजीकरण बन जाता है: यह तुरंत दिखाई देता है कि कौन से प्रकार स्वीकार किए जाते हैं और लौटाए जाते हैं।
  • \n
  • IDE के साथ एकीकरण — आधुनिक संपादक (PhpStorm, VS Code) Generics वाले कोड को बेहतर ढंग से समझते हैं, ऑटो-कम्प्लीशन और सुझाव प्रदान करते हैं।
  • \n
\n\n

PHP में Generics कैसे काम करते हैं: सिंटैक्स और मुख्य संरचनाएँ

\n\n

PHP में, Generics को टाइप टेम्पलेट्स के माध्यम से कार्यान्वित किया जाता है, जो कोण कोष्ठक <T> में निर्दिष्ट किए जाते हैं। अक्षर T एक सशर्त टाइप पदनाम है जो फ़ंक्शन को कॉल करने या ऑब्जेक्ट बनाने पर प्रतिस्थापित किया जाएगा। आप किसी भी नाम का उपयोग कर सकते हैं: T, K, V या सार्थक नाम।

\n\n

1. सामान्यीकृत फ़ंक्शन

\n\n

एक सरल उदाहरण पर विचार करें — एक फ़ंक्शन जो सरणी का पहला तत्व लौटाता है:

\n\n
<?php\n\nfunction firstElement(array $items): mixed {\n    return $items[0] ?? null;\n}\n\n// उपयोग\n$numbers = [1, 2, 3];\n$first = firstElement($numbers); // टाइप mixed, IDE को नहीं पता कि यह int है\n
\n\n

Generics के साथ, हम निर्दिष्ट कर सकते हैं कि फ़ंक्शन किसी भी प्रकार के तत्वों की सरणी के साथ काम करता है, लेकिन ठीक उसी प्रकार को लौटाता है जो पारित किया गया था:

\n\n
<?php\n\n/**\n * @template T\n * @param array<T> $items\n * @return T|null\n */\nfunction firstElement(array $items): mixed {\n    return $items[0] ?? null;\n}\n\n// अब IDE समझता है कि $first — int|null है\n$first = firstElement([1, 2, 3]);\n
\n\n

ध्यान दें: PHP 8.0+ में, Generics PHPDoc-एनोटेशन के माध्यम से समर्थित हैं। मूल समर्थन (बिना टिप्पणियों के) अभी तक मौजूद नहीं है, लेकिन आधुनिक परियोजनाओं के लिए यह वास्तविक मानक है।

\n\n

2. सामान्यीकृत क्लासेस

\n\n

Generics के उपयोग का सबसे सामान्य परिदृश्य कलेक्शन क्लासेस है। आइए एक सरल Collection क्लास बनाएं जो किसी भी प्रकार के तत्वों को संग्रहीत कर सके:

\n\n
<?php\n\n/**\n * @template T\n */\nclass Collection {\n    /** @var array<T> */\n    private array $items = [];\n\n    /**\n     * @param T $item\n     * @return void\n     */\n    public function add(mixed $item): void {\n        $this->items[] = $item;\n    }\n\n    /**\n     * @return T|null\n     */\n    public function get(int $index): mixed {\n        return $this->items[$index] ?? null;\n    }\n\n    /**\n     * @return array<T>\n     */\n    public function all(): array {\n        return $this->items;\n    }\n}\n\n// उपयोग\n$intCollection = new Collection<int>();\n$intCollection->add(10);\n$intCollection->add(                

ब्लॉग

पुस्तक अनुशंसाएँ