PHP में कार्यात्मक प्रोग्रामिंग: सिद्धांत से व्यवहार तक
PHP पारंपरिक रूप से अनिवार्य और ऑब्जेक्ट-ओरिएंटेड दृष्टिकोणों से जुड़ा हुआ है, हालांकि आधुनिक भाषा कार्यात्मक प्रोग्रामिंग (FP) के लिए शक्तिशाली उपकरण प्रदान करती है। इस लेख में, हम PHP में FP के सिद्धांतों को लागू करने का तरीका समझेंगे: अनाम फ़ंक्शन से लेकर करीइंग और इम्यूटेबिलिटी तक। आप सीखेंगे कि कोड को अधिक पूर्वानुमानित, परीक्षण योग्य और संक्षिप्त कैसे बनाया जाए।
1. मूल बातें: अनाम फ़ंक्शन और क्लोज़र
अनाम फ़ंक्शन (लैम्ब्डा) PHP में FP की आधारशिला हैं। वे व्यवहार को डेटा के रूप में पारित करने की अनुमति देते हैं।
<?php// सरल अनाम फ़ंक्शन$greet = function($name) { return "नमस्ते, $name!";};echo $greet('दुनिया'); // नमस्ते, दुनिया!
// array_map के साथ उपयोग$numbers = [1, 2, 3, 4, 5];$squared = array_map(function($n) { return $n * $n;}, $numbers);print_r($squared); // [1, 4, 9, 16, 25]?>क्लोज़र वे अनाम फ़ंक्शन हैं जो use कीवर्ड का उपयोग करके बाहरी स्कोप से वेरिएबल कैप्चर करते हैं:
<?php$factor = 3;$multiply = function($n) use ($factor) { return $n * $factor;};echo $multiply(5); // 15
// परिवर्तनीय वेरिएबल के साथ क्लोज़र (संदर्भ द्वारा)$counter = 0;$increment = function() use (&$counter) { $counter++;};$increment();echo $counter; // 1?>कॉलबैक फ़ंक्शन और फ़ैक्टरी बनाते समय क्लोज़र अपरिहार्य हैं।
2. उच्च-क्रम फ़ंक्शन: array_map, array_filter, array_reduce
PHP में क्लासिक उच्च-क्रम फ़ंक्शन बिल्ट-इन हैं, जो अन्य फ़ंक्शन को तर्क के रूप में स्वीकार करते हैं:
array_map— ऐरे के प्रत्येक तत्व को रूपांतरित करता है;array_filter— शर्त के अनुसार तत्वों को फ़िल्टर करता है;array_reduce— ऐरे को एक मान में संक्षिप्त करता है।
<?php$data = [1, 2, 3, 4, 5, 6];
// सम संख्याओं का फ़िल्टरेशन$even = array_filter($data, function($n) { return $n % 2 === 0;}); // [2, 4, 6]
// प्रत्येक तत्व को दोगुना करना$doubled = array_map(function($n) { return $n * 2;}, $even); // [4, 8, 12]
// सभी मानों का योग$sum = array_reduce($doubled, function($carry, $n) { return $carry + $n;}, 0); // 24?>ध्यान दें: array_filter कुंजियाँ बनाए रखता है। यदि पुनः अनुक्रमण की आवश्यकता है, तो array_values() का उपयोग करें।
3. इम्यूटेबिलिटी और डेटा के साथ कार्य
कार्यात्मक प्रोग्रामिंग इम्यूटेबिलिटी को प्रोत्साहित करती है — डेटा की अपरिवर्तनीयता। मौजूदा ऑब्जेक्ट को संशोधित करने के बजाय नए बनाए जाते हैं।
<?php// अनिवार्य दृष्टिकोण (म्यूटेशन)$user = ['name' => 'इवान', 'age' => 25];$user['age'] = 26; // मूल ऐरे बदलना
// कार्यात्मक दृष्टिकोण (इम्यूटेबल)$user = ['name' => 'इवान', 'age' => 25];$updatedUser = array_merge($user, ['age' => 26]); // नया ऐरे?>ऐरे के साथ काम करने के लिए array_merge, array_slice और spread-ऑपरेटर (PHP 7.4+) का उपयोग करें:
<?php$original = [1, 2, 3];$new = [...$original, 4]; // [1, 2, 3, 4] — मूल अपरिवर्तित?>इम्यूटेबिलिटी डीबगिंग को सरल बनाती है और कोड को थ्रेड-सेफ बनाती है।
4. करीइंग और आंशिक अनुप्रयोग
करीइंग — कई तर्कों वाले फ़ंक्शन को एक तर्क वाले फ़ंक्शन के अनुक्रम में रूपांतरित करना। आंशिक अनुप्रयोग — तर्कों के एक भाग को स्थिर करना।
PHP में बिल्ट-इन करीइंग नहीं है, लेकिन इसे आसानी से लागू किया जा सकता है:
<?php// करीड जोड़ फ़ंक्शनfunction curryAdd($a) { return function($b) use ($a) { return function($c) use ($a, $b) { return $a + $b + $c; }; };}
$add5 = curryAdd(5);