PHP में कार्यात्मक प्रोग्रामिंग: उन्नत स्तर
PHP पारंपरिक रूप से अनिवार्य और ऑब्जेक्ट-ओरिएंटेड शैलियों से जुड़ा हुआ है, हालांकि आधुनिक भाषा (विशेष रूप से संस्करण 7.4 और उससे ऊपर) कार्यात्मक प्रतिमान को लागू करने के लिए शक्तिशाली उपकरण प्रदान करती है। इस लेख में, हम PHP में कार्यात्मक प्रोग्रामिंग (FP) की उन्नत अवधारणाओं पर चर्चा करेंगे जो अधिक पूर्वानुमानित, परीक्षण योग्य और अभिव्यंजक कोड लिखने में मदद करेंगी।
1. शुद्ध फ़ंक्शन और डेटा की अपरिवर्तनीयता
FP के मूल में शुद्ध फ़ंक्शन हैं - ऐसे फ़ंक्शन जो:
- केवल अपने तर्कों पर निर्भर करते हैं (ग्लोबल वेरिएबल या दायरे से बाहर की स्थिति का उपयोग नहीं करते);
- कोई दुष्प्रभाव नहीं पैदा करते (बाहरी डेटा नहीं बदलते, फ़ाइलों में नहीं लिखते, HTTP अनुरोध नहीं भेजते);
- समान इनपुट डेटा के लिए हमेशा समान परिणाम लौटाते हैं।
PHP में फ़ंक्शन की शुद्धता सुनिश्चित करने के लिए डेटा की अपरिवर्तनीयता का सक्रिय रूप से उपयोग किया जाता है। मौजूदा ऐरे या ऑब्जेक्ट को बदलने के बजाय, उनकी प्रतियां परिवर्तनों के साथ बनाई जाती हैं।
<?php// अशुद्ध फ़ंक्शन (ग्लोबल ऐरे का उपयोग करता है)$globalData = [1, 2, 3];function addElementImpure($value) { global $globalData; $globalData[] = $value; // दुष्प्रभाव return $globalData;}
// शुद्ध फ़ंक्शन (नया ऐरे लौटाता है)function addElementPure(array $data, $value): array { $newData = $data; $newData[] = $value; return $newData;}
$original = [1, 2, 3];$modified = addElementPure($original, 4);// $original [1, 2, 3] ही रहता है, $modified = [1, 2, 3, 4]?>2. क्लोज़र और वेरिएबल कैप्चर करना
PHP में क्लोज़र अनाम फ़ंक्शन हैं जो use कीवर्ड के माध्यम से पैरेंट स्कोप से वेरिएबल कैप्चर कर सकते हैं। यह उच्च-क्रम फ़ंक्शन बनाने का आधार है।
मान द्वारा कैप्चर (डिफ़ॉल्ट) और संदर्भ द्वारा कैप्चर (&use) के बीच अंतर करना महत्वपूर्ण है। FP के संदर्भ में, शुद्धता का उल्लंघन न करने के लिए मान द्वारा कैप्चर को प्राथमिकता दी जाती है।
<?php$multiplier = 3;
// क्लोज़र, $multiplier को मान द्वारा कैप्चर करता है$multiply = function ($value) use ($multiplier) { return $value * $multiplier;};
echo $multiply(5); // 15
// उच्च-क्रम फ़ंक्शन का उदाहरण जो क्लोज़र लौटाता हैfunction createGreeter(string $greeting): Closure { return function (string $name) use ($greeting) { return "{$greeting}, {$name}!"; };}
$sayHello = createGreeter('Hello');echo $sayHello('World'); // Hello, World!?>3. करीइंग और आंशिक अनुप्रयोग
करीइंग एक ऐसे फ़ंक्शन का रूपांतरण है जो कई तर्क लेता है, फ़ंक्शन के अनुक्रम में, जिनमें से प्रत्येक एक तर्क लेता है। आंशिक अनुप्रयोग कम मापदंडों वाला नया फ़ंक्शन प्राप्त करने के लिए तर्कों के एक भाग को स्थिर करना है।
PHP में करीइंग के लिए अंतर्निहित समर्थन नहीं है, लेकिन इसे क्लोज़र का उपयोग करके कार्यान्वित किया जा सकता है।
<?php// सामान्य फ़ंक्शनfunction add(int $a, int $b, int $c): int { return $a + $b + $c;}
// करीड संस्करण$curriedAdd = function (int $a) { return function (int $b) use ($a) { return function (int $c) use ($a, $b) { return $a + $b + $c; }; };};
echo $curriedAdd(1)(2)(3); // 6
// सहायक फ़ंक्शन के साथ आंशिक अनुप्रयोगfunction partial(callable $fn, ...$fixedArgs): Closure { return function (...$remainingArgs) use ($fn, $fixedArgs) { return $fn(...array_merge($fixedArgs, $remainingArgs)); };}
$addFive = partial('add', 2, 3);echo $addFive(10); // 15 (2 + 3 + 10)?>4. फ़ंक्शन कम्पोज़ीशन और पाइपलाइन
फ़ंक्शन कम्पोज़ीशन आपको कई सरल फ़ंक्शन को एक जटिल फ़ंक्शन में संयोजित करने की अनुमति देता है, जो परिणाम को पास करता है