2010-12-28 16 views
15

Puede alguien decir lo que puedo escribir en WHAT_TO_WRITE_HERE, de modo que la función doSomeWork pase como primer parámetro a array_map. y el código funciona correctamentePasando el método de objeto a array_map()

Y dar hacia fuera puesto como

Array 
(
    [0] => 3 
    [1] => 4 
    [2] => 5 
    [3] => 6 
    [4] => 7 
) 
+0

que debería funcionar si usted acaba de escribir el nombre de la función allí, "doSomeWork " –

+1

' array ($ this, $ this-> func) 'funcionará, al pasar un objeto que necesita pasar en una matriz donde el primer arg es el objeto y el segundo es el método dentro de ese objeto' array ([object [], función]) ' – RobertPitt

Respuesta

27

Para utilizar métodos de objeto con array_map(), pase una matriz que contiene la instancia de objeto y el nombre del método. Para el alcance del mismo objeto, use $this de forma normal. Dado que el nombre de su método está definido en su propiedad public $func, puede pasar $this->func. Esto se aplica a la mayoría de las funciones que aceptan un callback como argumento.

Como nota al margen, los paréntesis fuera de array_map() no son necesarios.

return array_map(array($this, $this->func), range($min, $max)); 
+13

No sabía que incluso esta sintaxis funcionaba. Pero, como dijiste "función ** nombre **", una alternativa es 'matriz_arranque (matriz ($ this, 'func'), rango ($ min, $ max))'. – nevvermind

+0

@nush: Me refería al nombre de la función como en la cadena '" doSomeWork "', no al nombre de la propiedad '$ func'. – BoltClock

+1

tienes razón. No presté atención al código. PD: Esa fue una respuesta muy rápida. Aclamaciones. – nevvermind

1

El siguiente código proporciona una serie de correos electrónicos de una matriz $users que contiene las instancias de una clase con un método getEmail:

if(count($users) < 1) { 
     return $users; // empty array 
    } 
    return array_map(array($users[0], "getEmail"), $users); 
Cuestiones relacionadas