2011-01-10 17 views
13

वहाँ एक रास्ता चर के माध्यम से एक समारोह कॉल करने के लिए है?php - फोन एक समारोह गतिशील

उदाहरण के लिए मैं फोन करने के लिए समारोह लॉग इन चाहते हैं()। क्या मैं यह कर सकता हूं:

$varFunction = "Login"; //to call the function 

क्या मैं $ varFunction का उपयोग कर सकता हूं?

+1

हाँ, पीएचपी इस का समर्थन करता है। लेकिन मैं दृढ़ता से इसका इस्तेमाल करने की, जब तक आप एक masochist या कुछ तोड़-फोड़ –

+2

हाय, वास्तव में इस का कारण यह क्योंकि मैं एक ही समारोह का नाम चाहते हैं, लेकिन विभिन्न मॉड्यूल के लिए योजना बना रहे हैं नहीं सुझाव है। इसलिए उदाहरण के लिए लॉग इन मॉड्यूल और प्रोफाइल मॉड्यूल दोनों में फ़ंक्शन कॉल मुख्य है() – nuttynibbles

+0

दोह! ** विरासत ** यह! –

उत्तर

23

हाँ, आप कर सकते हैं:

$varFunction(); 

या:

call_user_func($varFunction); 

सुनिश्चित करें कि आप $ varFunction दुर्भावनापूर्ण इनपुट के लिए मान्य।


संपादित करें:

अपने मॉड्यूल के लिए, (आपका वास्तविक जरूरतों के आधार पर) कुछ इस तरह विचार करें:

abstract class ModuleBase { 
    public function main() { 
    echo 'main on base'; 
    } 
} 

class ModuleA extends ModuleBase { 
    public function main() { 
    parent::main(); 
    echo 'a'; 
    } 
} 

class ModuleB extends ModuleBase { 
    public function main() { 
    parent::main(); 
    echo 'b'; 
    } 
} 

function runModuleMain(ModuleBase $module) { 
    $module->main(); 
} 

और फिर सही मॉड्यूल उदाहरण के साथ runModuleMain() कहते हैं।

+0

अरे tks .. मुझे लगता है कि मैं इसका उपयोग करूंगा। क्या कोई संभावना है कि वेब होस्टिंग कंपनी इस फ़ंक्शन को अक्षम कर देगी ?? – nuttynibbles

+0

यह सिर्फ एक स्क्रिप्ट है, इसलिए यदि वे इसे निष्क्रिय तो आप शायद किसी भी कोड को चलाने के लिए सक्षम नहीं होगा। – maartenba

6

आप उपयोग कर सकते हैं ...

$varFunction = "Login"; 
$varFunction(); 

... और यह सुनिश्चित करें कि चर विश्वसनीय है बनाने के लिए कह रही है बिना चला जाता है।

+0

हे tks यह भी काम करता है। हालांकि, इस और call_user_func(); के बीच अलग-अलग wats ;?? – nuttynibbles

+0

@nuttynibbles कोई भी वास्तव में, संस्करण मैंने कहा समारोह कॉल के लिए और वाक्यात्मक चीनी है। शायद कुछ मामूली मतभेद हैं, लेकिन मुझे यकीन नहीं है कि क्या। – alex

2
<?php 
    $fxname = 'helloWorld'; 

    function helloWorld(){ 
    echo "What a beautiful world!"; 
    } 

    $fxname(); //echos What a beautiful world! 
?> 
0

आप वास्तव में मॉड्यूल के लिए कक्षाओं के उपयोग पर विचार के रूप में यह आप दोनों के लिए संगत कोड संरचना है और कई मॉड्यूल के लिए समान विधि के नाम रखने की अनुमति होगी चाहिए। यह आपको हर मॉड्यूल के लिए कोड विरासत या बदलने में लचीलापन भी देगा।

विषय पर, जैसा कि ऊपर कहा गया है तरीकों बुला के अलावा अन्य (अर्थात, समारोह के नाम, या call_user_func_ * कार्यों परिवार के रूप में चर का प्रयोग करके), पीएचपी 5.3 के साथ शुरू आप closures उपयोग कर सकते हैं कि गतिशील गुमनाम कार्य हैं, जो आप प्रदान कर सकता है आप जो चाहते हैं उसे करने के वैकल्पिक तरीके से।

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