PHP Academy · पाठ

अनाम फ़ंक्शन और क्लोज़र

इनलाइन फ़ंक्शन लिखें और use से वेरिएबल कैप्चर करें।

पाठ 4, कुल 4 में से13 चरण

अनाम फ़ंक्शन और क्लोज़र, CoddyKit पर PHP Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह PHP Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। PHP Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

अनाम फ़ंक्शन क्या होते हैं

अनाम फ़ंक्शन (लैम्ब्डा) बिना नाम का फ़ंक्शन होता है। PHP में यह अंतर्निर्मित Closure क्लास का एक इंस्टेंस होता है और इसे वेरिएबल में संग्रहीत किया जा सकता है, आर्ग्युमेंट के रूप में पास किया जा सकता है या किसी अन्य फ़ंक्शन से लौटाया जा सकता है।

मूल अनाम फ़ंक्शन

किसी फ़ंक्शन को वेरिएबल में असाइन करके उसे कॉल करें:

<?php
$double = function(int $n): int {
    return $n * 2;
};

echo $double(5);   // 10
echo $double(21);  // 42

अनाम फ़ंक्शन पास करना

क्लोज़र को array_map, usort जैसे फ़ंक्शनों या अपने कॉलबैक में आर्ग्युमेंट के रूप में पास करें:

<?php
$nums = [3, 1, 4, 1, 5, 9];

$squared = array_map(function(int $n): int {
    return $n ** 2;
}, $nums);

print_r($squared); // [9, 1, 16, 1, 25, 81]

फ़ंक्शन लौटाना

कोई फ़ंक्शन क्लोज़र बना कर लौटा सकता है — यह फ़ैक्टरी पैटर्न है:

<?php
function makeMultiplier(int $factor): Closure {
    return function(int $n) use ($factor): int {
        return $n * $factor;
    };
}

$triple  = makeMultiplier(3);
$tenX    = makeMultiplier(10);

echo $triple(5);   // 15
echo $tenX(5);     // 50

क्लोज़र और use

क्लोज़र use की सहायता से बाहरी दायरे से वेरिएबल कैप्चर कर सकते हैं। कैप्चर मान के रूप में होता है (प्रतिलिपि), जब तक कि आप & न जोड़ें:

<?php
$taxRate = 0.18;

$addTax = function(float $price) use ($taxRate): float {
    return $price * (1 + $taxRate);
};

$taxRate = 0.20;  // change outer variable
echo $addTax(100); // 118 — captured value at creation time

use(&) के साथ संदर्भ द्वारा कैप्चर

क्लोज़र को बाहरी मानों में हुए बदलाव दिखाई देने देने के लिए संदर्भ द्वारा कैप्चर करें:

<?php
$count = 0;

$increment = function() use (&$count): void {
    $count++;
};

$increment();
$increment();
echo $count;  // 2

ऐरो फ़ंक्शन (PHP 7.4)

ऐरो फ़ंक्शन संक्षिप्त, एकल-एक्सप्रेशन वाले क्लोज़र होते हैं, जो बाहरी दायरे को मान के रूप में अपने-आप कैप्चर करते हैं:

<?php
$rate = 1.18;
$prices = [10, 20, 30];

// Arrow function — no 'use' needed
$withTax = array_map(fn($p) => $p * $rate, $prices);

print_r($withTax); // [11.8, 23.6, 35.4]

ऐरो फ़ंक्शन बाहरी दायरे में बदलाव नहीं कर सकते

ऐरो फ़ंक्शन केवल मान के रूप में कैप्चर करते हैं — वे बाहरी वेरिएबल में बदलाव नहीं कर सकते:

<?php
$total = 0;
$nums  = [1, 2, 3];

// This does NOT modify $total!
array_walk($nums, fn($n) => $total += $n);

echo $total;  // 0

// Use a reference closure for mutation:
array_walk($nums, function($n) use (&$total) { $total += $n; });
echo $total;  // 6

कॉलबैक के रूप में क्लोज़र

कई PHP फ़ंक्शन कॉल करने योग्य मान स्वीकार करते हैं — आप क्लोज़र, एक ऐरे [$obj, 'method'] या किसी फ़ंक्शन के नाम वाली स्ट्रिंग पास कर सकते हैं:

<?php
$words = ['banana', 'apple', 'cherry'];

usort($words, fn($a, $b) => strcmp($a, $b));

print_r($words); // ['apple', 'banana', 'cherry']

तुरंत कॉल किया गया क्लोज़र

आप एक ही पंक्ति में क्लोज़र को परिभाषित और कॉल कर सकते हैं — यह अलग-थलग दायरा बनाने के लिए उपयोगी है:

<?php
$result = (function(): int {
    $x = 10;
    $y = 20;
    return $x + $y;
})();

echo $result; // 30
// $x and $y are not in outer scope

Closure::bind और bindTo

आप Closure::bind() की सहायता से क्लोज़र को किसी अन्य ऑब्जेक्ट के संदर्भ में फिर से बाँध सकते हैं:

<?php
class Counter {
    private int $value = 0;
}

$increment = Closure::bind(function(int $by): void {
    $this->value += $by;
}, new Counter(), Counter::class);

// Now $increment has access to private $value

त्वरित जाँच

PHP में use वाले सामान्य क्लोज़र और ऐरो फ़ंक्शन के बीच मुख्य अंतर इनमें से कौन-सा है?

पुनरावलोकन: अनाम फ़ंक्शन और क्लोज़र

सारांश:

  • अनाम फ़ंक्शन वेरिएबल में संग्रहीत किए जाते हैं और एक स्थान से दूसरे स्थान पर पास किए जाते हैं
  • क्लोज़र use($var) से बाहरी वेरिएबल को मान के रूप में या use(&$var) से संदर्भ के रूप में कैप्चर करते हैं
  • ऐरो फ़ंक्शन (PHP 7.4) बाहरी दायरे को मान के रूप में अपने-आप कैप्चर करते हैं
  • कॉलबैक के लिए उपयोगी: array_map, usort, array_filter…
  • फ़ैक्टरी फ़ंक्शन से लौटाए जा सकते हैं
शुरुआत निःशुल्क

एआई शिक्षक के साथ PHP सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
49
पाठ
195

अक्सर पूछे जाने वाले प्रश्न

क्या “अनाम फ़ंक्शन और क्लोज़र” पाठ निःशुल्क है?

हाँ—“अनाम फ़ंक्शन और क्लोज़र” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और PHP Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। PHP Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“अनाम फ़ंक्शन और क्लोज़र” में मैं क्या सीखूँगा?

इनलाइन फ़ंक्शन लिखें और use से वेरिएबल कैप्चर करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ PHP Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या PHP Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर PHP Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“अनाम फ़ंक्शन और क्लोज़र” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस PHP Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर PHP Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. फ़ंक्शन परिभाषित करना और कॉल करना
  2. डिफ़ॉल्ट और वैरिएडिक पैरामीटर
  3. वेरिएबल स्कोप: स्थानीय और वैश्विक
  4. अनाम फ़ंक्शन और क्लोज़र
← PHP Academy पर वापस जाएँ