2009-07-03 11 views
47

quiero hacer algo como esto:¿Se puede usar un método como una función array_map en PHP 5.2?

 
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 

pero el primer argumento de array_map se supone que es el nombre de la función. Quiero evitar escribir una función de envoltura alrededor de $ instance-> fun, pero parece que eso no es posible. ¿Es eso cierto?

Respuesta

111

Sí, puede hacer que las devoluciones de llamada a métodos, como esto:

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

ver the callback type en el manual de PHP para obtener más información

+1

aseado. No sabía que esto era factible. +1 –

+25

Si el método es una matriz estática ('Class', 'StaticMethod') también funciona –

+0

Gracias Jani. ¡Esto es genial! – allyourcode

28

También puede utilizar

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

sintaxis.

+9

esto solo funciona con el método estático – nXqd

+0

¡Gracias por la sugerencia! – aymericbeaumet

+6

Esto también funciona para la variación 'array_map ('self :: method', $ array)' – alanng

6

En realidad, lo que necesita saber la definición de devolución de llamada, por favor ponerse en referencia al código siguiente:

<?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 
?> 
Cuestiones relacionadas