2010-10-05 14 views
30

मैं जेएस से PHP (बस मस्ती के लिए) से कुछ प्रोग्रामिंग प्रतिमान उधार लेने की कोशिश कर रहा था। वहाँ करने का एक तरीका है:PHP5.3 में स्वयं निष्पादन कार्य?

$a = (function(){ 
    return 'a'; 
})(); 

मैं सोच रहा था कि use के संयोजन के साथ इस चर जे एस शैली

$a = (function(){ 
    $hidden = 'a'; 
    return function($new) use (&$hidden){ 
     $hidden = $new; 
     return $hidden; 
    }; 
})(); 

को छिपाने के लिए अभी मैं क्या करने की जरूरत है एक अच्छा तरीका हो सकता है:

$temp = function(){....}; 
$a = $temp(); 

यह व्यर्थ लगता है ...

+1

कठिन मेरे लिए समझने के लिए ... :) वास्तव में आपका क्या मतलब था .. –

+0

मैं थोड़ा उलझन में हूं जो आप पूरा करने की कोशिश कर रहे हैं या आप इस तरह से फ़ंक्शन निष्पादित क्यों करना चाहते हैं। हालांकि मुझे पूरा यकीन है कि PHP में इस तरह के फ़ंक्शन को समाहित करने का कोई तरीका नहीं है। जावास्क्रिप्ट में कार्य कक्षाओं के रूप में लागू किए जाते हैं, जबकि PHP में वे वास्तविक कार्य होते हैं। इस कारण से वे सभी वैश्विक नामस्थान के भीतर मौजूद हैं, न कि अपने स्वयं के निहित नामस्थान के भीतर। "स्व-कॉलिंग फ़ंक्शन" की सबसे नज़दीकी चीज मैं कल्पना कर सकता हूं कि 'eval() ' – stevendesu

+0

XiroX के भीतर फ़ंक्शन को परिभाषित करना होगा: क्या आप शायद एक प्रश्न पूछने पर विचार करेंगे? – salathe

उत्तर

51

Function Call Chaining, e.g. foo()() is in discussion for PHP5.4. तब तक, call_user_func का उपयोग करें:

$a = call_user_func(function(){ 
    $hidden = 'a'; 
    return function($new) use (&$hidden){ 
     $hidden = $new; 
     return $hidden; 
    }; 
}); 

$a('foo');  
var_dump($a); 

देता है:

object(Closure)#2 (2) { 
    ["static"]=> 
    array(1) { 
    ["hidden"]=> 
    string(3) "foo" 
    } 
    ["parameter"]=> 
    array(1) { 
    ["$new"]=> 
    string(10) "<required>" 
    } 
} 

PHP7 के रूप में, आप तुरंत अनाम प्रक्रियाएं इस तरह अमल कर सकते हैं:

(function() { echo 123; })(); // will print 123 
+0

क्या आप संभवतः इसे अपडेट करने में सक्षम होंगे? सराहनीय होगा। –

+1

@ हनोनिक्स php7 – Gordon

+3

भयानक के लिए अपडेट किया गया है, मुझे कोई संदेह नहीं है कि यह समुदाय और भविष्य के googlers के लिए एक मूल्य होगा। –

संबंधित मुद्दे