2012-02-02 19 views
6
class example() 
{ 
    function shout($var) 
    { 
     echo 'shout'.$var; 
    } 

    function whisper($var, $bool) 
    { 
     if($bool) 
     { 
      echo $var; 
     } 
    } 
} 

$obj = new example(); 

if($var) 
{ 
    $func = $obj->shout(); 
}else 
{ 
    $func = $obj->whisper(); 
} 

मैं लूप में स्थितियों को रखने के बजाय पहले उपयोग के लिए फ़ंक्शन वैरिएबल तैयार करना चाहता हूं। क्या ऐसा करने का कोई संभावित तरीका है?किसी ऑब्जेक्ट फ़ंक्शन को चर के लिए कैसे असाइन करें?

+0

कानाफूसी/चिल्लाओ/आदि पर तर्क के साथ सावधान। आप quacks-like-a-duck fire के साथ खेल रहे हैं। – landons

+0

@landons मैं नहीं देखता कि कैसे "quacks-like-a-duck" आग है, इसे देखते हुए (PHP) सभी गतिशील रूप से टाइप किया गया है ... –

+0

वास्तव में @landons? मैंने यह भी ध्यान नहीं दिया कि वह – kaz

उत्तर

4

आप एक स्ट्रिंग में समारोह नाम डाल सकते हैं कॉलबैक का भी उपयोग करें:

if($var) 
{ 
    $func = array($obj, 'shout'); 
}else 
{ 
    $func = array($obj, 'whisper'); 
} 

बाद में:

call_user_func($func); 

या:

call_user_func_array($func, $args); 
+0

@notJim, कौन सा उपयोग करने के लिए अधिक सलाह दी जाती है? – kaz

+0

@pst: यह [php manual] (http://php.net/manual/en/language.pseudo-types.php) के अनुसार कॉलबैक है। @kaz: मेरे पास कोई भी मजबूत राय नहीं है। मैं आमतौर पर '$ obj -> $ func' का उपयोग करता हूं, जब तक कि मुझे इसे अन्य कार्यों में पास करने की आवश्यकता न हो। – notJim

+0

@notJim यह मेरे हिस्से पर जीभ-इन-गाक का थोड़ा सा था: मुझे लगता है कि मुझे इसके बजाय जोर देना चाहिए था कि यह (दूसरा दृष्टिकोण) "नाम से विधि का आह्वान करने के लिए जानकारी का एक गुच्छा है" और प्रथम श्रेणी नहीं मान (या कॉलबैक फ़ंक्शन) :) –

6

आप नाम से तरीकों कॉल कर सकते हैं:

if($var) 
{ 
    $func = 'shout'; 
}else 
{ 
    $func = 'whisper'; 
} 
बाद में

:

$obj->$func 

आप कर सकते हैं

if ($var) { 
    $fn = 'shout'; 
} else { 
    $fn = 'whisper'; 
} 

$obj->$fn(); 
+3

हां (+1) आप कर सकते हैं, लेकिन यह तकनीकी रूप से सवाल नहीं पूछ रहा है :-) रुबी और पायथन में यह है "बाध्य विधियों" (ऑब्जेक्ट संदर्भ से जुड़े कार्यों) प्राप्त करने के लिए संभव है, जबकि सी # में विधि समूह हैं जो प्रतिनिधियों के लिए परिवर्तनीय हैं (इस मामले में किसी ऑब्जेक्ट संदर्भ से भी जुड़े हुए हैं)। PHP के साथ ऐसी कोई अवधारणा है? (कहें, 5.3) –

+0

@pst मुझे लगता है कि बाध्य विधि का कोई PHP समकक्ष नहीं है - हम इसे ढूंढ रहे हैं। PHP वास्तव में एक पुरानी भाषा है, हम केवल भाग्यशाली हैं क्योंकि यह लचीला है कि प्रोग्रामर काम की संख्या कर सकते हैं। – kaz

+0

@pst: ऐसा नहीं है। पीएचपी के पास PHP 5.3 - हेक, 'create_function' की रिलीज होने तक फ़ंक्शन ऑब्जेक्ट्स _at all_ नहीं था - अभी भी एक gensym लौटाता है - और यहां तक ​​कि उन लोगों के साथ भी किसी भी प्रकार के परिभाषित फ़ंक्शन के लिए फ़ंक्शन ऑब्जेक्ट प्राप्त करने का कोई तरीका नहीं है, अकेले रहने दें एक बाध्य विधि। – duskwuff

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