PHP

2013-02-13 52 views
7

में अनाम कार्यों में लपेटने वाले चर, मैं एक जेएस डेवलपर हूं और वैश्विक दायरे के प्रदूषण को कम करने के लिए नियमित रूप से स्वयं निष्पादित अज्ञात कार्यों का उपयोग करता हूं।PHP

अर्थात्: (जे एस)

(function(){ 
    var x = ... 
})(); 

उसी तकनीक संभव/समारोह/चर नाम संघर्ष को कम करने के PHP में सलाह दी जाती है?

अर्थात्: (पीएचपी)

(function(){ 

    $x = 2; 

    function loop($a){ 
     ... 
    } 

    loop($x); 

})(); 
+3

बिल्कुल नहीं, लेकिन PHP में आप "वैश्विक" से बचने के लिए नेमस्पेस का उपयोग कर सकते हैं। – Passerby

+0

या दूसरे शब्दों में, नामस्थान कीवर्ड – hek2mgl

+0

हम्म दिलचस्प समाधान के कारण इसकी आवश्यकता नहीं है। वैश्विक दायरे से नामित और फिर से वापस कैसे स्विच किया जाएगा? – JackMahoney

उत्तर

3

वैश्विक प्रदूषण, उपयोग वर्गों और एक वस्तु उन्मुख दृष्टिकोण से बचने के लिए: See PHP docs here

आगे प्रदूषण से बचने के लिए, स्थिर और वैश्विक चर से बचें।

आपके द्वारा दिखाए गए जैसे क्लोजर जावास्क्रिप्ट में उपयोग किए जाते हैं, इस तथ्य के कारण यह है कि यह (जावास्क्रिप्ट) एक प्रोटोटाइप आधारित भाषा है, जिसमें गुणों (रचनात्मक अर्थ में) सामान्य रूप से ओओ आधारित भाषा में दिखाया गया है।

1

हाँ आप PHP में अज्ञात फ़ंक्शंस बना सकते हैं जो वैश्विक नामस्थान को प्रदूषित किए बिना तत्काल निष्पादित कर सकते हैं;

call_user_func(function() { 
    $a = 'hi'; 
    echo $a; 
}); 

वाक्यविन्यास जावास्क्रिप्ट समकक्ष जितना सुंदर नहीं है, लेकिन यह वही काम करता है। मुझे लगता है कि बहुत उपयोगी निर्माण और अक्सर इसका इस्तेमाल करें।

आप इस तरह के मूल्य भी वापस कर सकते हैं;

$str = call_user_func(function() { 
    $a = 'foo'; 
    return $a; 
}); 

echo($str); // foo 
echo($a);  // Causes 'Undefined variable' error.