परिचय
अनाम फ़ंक्शन (जिन्हें लैम्ब्डा भी कहा जाता है) Closure क्लास का ऑब्जेक्ट लौटाते हैं। इस क्लास में कुछ अतिरिक्त मेथड हैं जो अनाम फ़ंक्शन पर आगे नियंत्रण प्रदान करते हैं।
सिंटैक्स
Closure {
/* Methods */
private __construct ( void )
public static bind ( Closure $closure , object $newthis [, mixed $newscope = "static" ] ) : Closure
public bindTo ( object $newthis [, mixed $newscope = "static" ] ) : Closure
public call ( object $newthis [, mixed $... ] ) : mixed
public static fromCallable ( callable $callable ) : Closure
}
मेथड्स
- private Closure::__construct() - यह मेथड केवल Closure क्लास के इंस्टेंटिएशन को रोकने के लिए मौजूद है। इस क्लास के ऑब्जेक्ट अनाम फ़ंक्शन द्वारा बनाए जाते हैं।
- public static Closure::bind() - एक विशिष्ट बाउंड ऑब्जेक्ट और क्लास स्कोप के साथ क्लोजर को डुप्लिकेट करता है। यह मेथड Closure::bindTo() का स्टेटिक वर्जन है।
- public Closure::bindTo() - एक नए बाउंड ऑब्जेक्ट और क्लास स्कोप के साथ क्लोजर को डुप्लिकेट करता है। समान बॉडी और बाउंड वेरिएबल के साथ एक नया अनाम फ़ंक्शन बनाता है और लौटाता है, लेकिन अलग ऑब्जेक्ट और नए क्लास स्कोप के साथ।
- public Closure::call() - अस्थायी रूप से क्लोजर को newthis से बांधता है, और दिए गए किसी भी पैरामीटर के साथ इसे कॉल करता है।
Closure उदाहरण
<?php
class A {
public $nm;
function __construct($x) {
$this->nm = $x;
}
}
// call मेथड का उपयोग
$hello = function() {
return "Hello " . $this->nm;
};
echo $hello->call(new A("Amar")) . "\n";
// bind मेथड का उपयोग
$sayhello = $hello->bindTo(new A("Amar"), 'A');
echo $sayhello();
?>
आउटपुट
Hello Amar Hello Amar
व्याख्या: call() अस्थायी रूप से $this को बांधता है और कॉल करता है। bindTo() एक नया क्लोजर बनाता है जिसमें स्थायी रूप से बाउंड $this होता है। fromCallable() किसी भी कॉल करने योग्य को क्लोजर में बदलता है।
उपयोग के मामले: कॉलबैक, डेलीगेशन, डिपेंडेंसी इंजेक्शन, लेजी इवैल्यूएशन।