2011-08-27 14 views
18

मैं गतिशील कुछ कार्यों वैरिएबल का उपयोग कर, इस तरह के नाम करना चाहते हैं परिभाषित करने के लिए एक चर का उपयोग करें:एक PHP समारोह

$thing = 'some_function'; 

function $thing() { 
    echo 'hi!'; 
} 

मैं जानता हूँ कि मैं यह कर सकते हैं कॉल एक समारोह इस तरह एक चर का उपयोग कर:

$something = 'function_exists'; 

if($something('print_r')) { 
    echo 'Yep'; 
} 

लेकिन शीर्ष उदाहरण मेरे लिए काम नहीं करता है।

कोई विचार?

मैं ऐसे सिस्टम का उपयोग कर रहा हूं जिसमें मॉड्यूल हैं। प्रत्येक मॉड्यूल एक एकल PHP स्क्रिप्ट है जिसे किसी विशिष्ट फ़ोल्डर से जोड़ा या हटाया जा सकता है।

प्रत्येक मॉड्यूल को प्रारंभ करने के लिए एक नया फ़ंक्शन चाहिए। मैं फ़ाइल नामों के लिए glob'ing हूँ, तो मैं लूप करना चाहता हूं और कार्यों की एक श्रृंखला बनाना चाहता हूं, प्रत्येक मॉड्यूल के लिए एक।

मैं एक मौजूदा सिस्टम का उपयोग कर रहा हूं और मॉड्यूल हैंडलिंग को फिर से लिख नहीं सकता।

विकल्प केवल सभी इनिट फ़ंक्शंस को लिखना और हार्ड कोड लिखना होगा, लेकिन जैसे ही सूची बढ़ती है, कोड भी होता है - और यदि कोई मॉड्यूल हटाया जाता है तो त्रुटियां फेंक दी जाती हैं।

+1

http://php.net/manual/en/function.call-user-func.php यह जांचें कि – Sleeperson

+0

यह छोड़कर उपयोगी नहीं होगा। आप देखते हैं, यह कार्य स्थैतिक पूर्ण समय है - आप इस तरह से फ़ंक्शन कार्य को अलग-अलग नहीं कर सकते हैं। जो कुछ भी इस समारोह का नाम दिया जाएगा, यह कार्य इस तरह से कार्य करेगा, इससे कोई फर्क नहीं पड़ता। यह 'हैलो()' फ़ंक्शन बनाने जैसा है, अलग-अलग नाम को छोड़कर आप उपयोगकर्ता को कैसे पसंद करते हैं: पी। इस तरह के फ़ंक्शन के लिए, आप शायद इसे 'बेकार बनाकर' $ चीज़() 'का उपयोग करके एक्सेस करेंगे। सामान्य रूप से नाम सामान्य रूप से। – xfix

+0

शायद आप समझा सकते हैं कि आप गतिशील रूप से स्थिर कार्य क्यों बना रहे हैं? यह आमतौर पर बोलने वाला एक बहुत अच्छा विचार प्रतीत नहीं होता है। शायद, अगर आप समस्या को समझाने की कोशिश कर रहे हैं, तो आप सुझाव दे सकते हैं कि लोग आपको बेहतर समाधान दे सकते हैं। –

उत्तर

18

आप क्या कर सकते

$thing = 'some_function'; 
$$thing = function() { 
    echo 'hi'; 
}; 
$some_function(); 

php < 5.3 में है, तो आप anonymous function के बजाय create_function का उपयोग करना होगा:

// Use this in < 5.3 
$thing = 'some_function'; 
$$thing = create_function('', 
    'echo "hi";' 
); 
$some_function(); 

कहा जा रहा है, को परिभाषित कार्यों गतिशील नामों के साथ एक बुरा विचार है। इसके बजाय, उन कार्यों का एक सरणी बनाएं जिन्हें आप कॉल करते हैं, या पॉलीमोर्फिज्म का उपयोग करते हैं।

+1

पश्चिम में सबसे तेज बंदूक :) – Mick

+0

मैं <5.3 का समर्थन करना चाहता हूं, इसका मतलब है create_function। लेकिन यह फ़ंक्शन नामों को "lambda_1", "lambda_2" आदि के लिए मजबूर करता है। मुझे बाद में इन कार्यों को एक विशिष्ट स्ट्रिंग द्वारा कॉल करने की आवश्यकता है। – Mick

+0

@ मिक नहीं, 'create_function' का नामकरण भाग से कोई लेना देना नहीं है। उत्तर में php <5.3 के लिए एक उदाहरण जोड़ा गया। आप कार्यों को सरणी में क्यों नहीं संग्रहीत करते हैं? – phihag

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