बंद सुंदर हैं! वे बहुत सी समस्याओं को हल करते हैं जो गुमनाम कार्यों के साथ आती हैं, और वास्तव में सुरुचिपूर्ण कोड संभव बनाती हैं (कम से कम जब तक हम php के बारे में बात करते हैं)।
जावास्क्रिप्ट प्रोग्रामर हर समय बंद का उपयोग करते हैं, कभी-कभी इसे जाने बिना भी, क्योंकि बाध्य चर स्पष्ट रूप से परिभाषित नहीं होते हैं - यही "उपयोग" php में है।
उपरोक्त से बेहतर वास्तविक दुनिया के उदाहरण हैं। मान लें कि आपको एक उप-मान द्वारा बहुआयामी सरणी को सॉर्ट करना है, लेकिन प्रमुख परिवर्तन।
<?php
function generateComparisonFunctionForKey($key) {
return function ($left, $right) use ($key) {
if ($left[$key] == $right[$key])
return 0;
else
return ($left[$key] < $right[$key]) ? -1 : 1;
};
}
$myArray = array(
array('name' => 'Alex', 'age' => 70),
array('name' => 'Enrico', 'age' => 25)
);
$sortByName = generateComparisonFunctionForKey('name');
$sortByAge = generateComparisonFunctionForKey('age');
usort($myArray, $sortByName);
usort($myArray, $sortByAge);
?>
चेतावनी: बिना कोड वाला कोड (मेरे पास php5.3 atm नहीं है), लेकिन इसे कुछ इस तरह दिखना चाहिए।
वहाँ एक नकारात्मक पहलू है: अगर आप उन्हें बंद करने के साथ सामना करते हैं तो बहुत सारे php डेवलपर्स थोड़े असहाय हो सकते हैं।
क्लोजर के अच्छे-से समझने के लिए, मैं आपको एक और उदाहरण दूंगा - इस बार जावास्क्रिप्ट में। समस्याओं में से एक है स्कूपिंग और ब्राउज़र अंतर्निहित अतुल्यकालिकता। विशेष रूप से, अगर यह window.setTimeout();
(या अंतःवृत्त) की बात आती है । इसलिए, आप सेटटाइमआउट के लिए एक फ़ंक्शन पास करते हैं, लेकिन आप वास्तव में कोई पैरामीटर नहीं दे सकते हैं, क्योंकि प्रदान करने वाले पैरामीटर कोड को निष्पादित करते हैं!
function getFunctionTextInASecond(value) {
return function () {
document.getElementsByName('body')[0].innerHTML = value; // "value" is the bound variable!
}
}
var textToDisplay = prompt('text to show in a second', 'foo bar');
// this returns a function that sets the bodys innerHTML to the prompted value
var myFunction = getFunctionTextInASecond(textToDisplay);
window.setTimeout(myFunction, 1000);
myFunction एक प्रकार का पूर्वनिर्धारित पैरामीटर के साथ एक फ़ंक्शन देता है!
ईमानदार होने के लिए, मुझे 5.3 और गुमनाम कार्यों / बंदों के बाद से php बहुत पसंद है। नामस्थान अधिक महत्वपूर्ण हो सकते हैं, लेकिन वे बहुत कम सेक्सी हैं ।