2009-07-03 16 views
47

मैं इस तरह कुछ करना चाहता हूँ:PHP 5.2 में array_map फ़ंक्शन के रूप में एक विधि का उपयोग किया जा सकता है?

 
class Cls { 
    function fun($php) { 
    return 'The rain in Spain.'; 
    } 
} 

$ar = array(1,2,3); 
$instance = new Cls(); 
print_r(array_map('$instance->fun', $ar)); 
       //^this won't work 

लेकिन array_map को पहला तर्क समारोह के नाम पर माना जाता है। मैं $ example-> मज़े के आसपास एक रैपर फ़ंक्शन लिखने से बचना चाहता हूं, लेकिन ऐसा लगता है कि यह संभव नहीं है। क्या यह सच है?

उत्तर

111

हाँ, आप विधियों के लिए कॉलबैक हो सकता है, इस तरह:

array_map(array($instance, 'fun'), $ar) 

अधिक जानकारी

+1

साफ। यह नहीं पता था कि यह करने योग्य था। +1 –

+25

यदि विधि स्थैतिक सरणी है ('कक्षा', 'StaticMethod') भी काम करता है –

+0

धन्यवाद जानी। यह रास्ता अच्छा है! – allyourcode

28

के लिए PHP के मैनुअल में the callback type देख आप भी

array_map('Class::method', $array) 

सिंटैक्स का उपयोग कर सकते हैं।

+9

यह केवल स्थिर विधि – nXqd

+0

टिप के लिए धन्यवाद के साथ काम करता है! – aymericbeaumet

+6

यह भिन्नता 'array_map (' self :: method ', $ array) के लिए भी काम करता है। – alanng

6

असल में, आप, कॉलबैक की परिभाषा जानने की जरूरत कृपया निम्नलिखित कोड का संदर्भ लें:

<?php 

// An example callback function 
function my_callback_function() { 
    echo 'hello world!'; 
} 

// An example callback method 
class MyClass { 
    static function myCallbackMethod() { 
     echo 'Hello World!'; 
    } 
} 

$myArray = [1, 2, 3, 4]; 

// Type 1: Simple callback 
array_map('my_callback_function', $myArray); 

// Type 2: Static class method call 
array_map(array('MyClass', 'myCallbackMethod'), $myArray); 

// Type 3: Object method call 
$obj = new MyClass(); 
array_map(array($obj, 'myCallbackMethod'), $myArray); 

// Type 4: Static class method call (As of PHP 5.2.3) 
array_map('MyClass::myCallbackMethod', $myArray); 

// Type 5: Relative static class method call (As of PHP 5.3.0) 
class A { 
    public static function who() { 
     echo "A\n"; 
    } 
} 

class B extends A { 
    public static function who() { 
     echo "B\n"; 
    } 
} 

array_map(array('B', 'parent::who'), $myArray); // A 
?> 
संबंधित मुद्दे