2010-12-28 2 views
15
class theClass{ 
     function doSomeWork($var){ 
      return ($var + 2); 
     } 

     public $func = "doSomeWork"; 

     function theFunc($min, $max){ 
      return (array_map(WHAT_TO_WRITE_HERE, range($min, $max))); 
     } 
    } 

$theClass = new theClass; 
print_r(call_user_func_array(array($theClass, "theFunc"), array(1, 5))); 
exit; 

Может ли одно сказать, что я могу написать на WHAT_TO_WRITE_HERE, так что функция doSomeWork получить передать в качестве первого параметра в array_map. и код работает правильно.Передача метод объекта array_map()

и выдают кладется как

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

Он должен работать, если вы только что написали имя функции там, «doSomeWork « –

+1

' array ($ this, $ this-> func) 'будет работать, когда вы передаете объект, вам нужно передать массив, где первым arg является объект, а второй - метод внутри этого объекта' array ([object [], function]) ' – RobertPitt

ответ

27

Чтобы использовать методы объекта с array_map(), передавать массив, содержащий экземпляр объекта и имя метода. Для области с одинаковым объектом используйте $this как обычно. Поскольку имя вашего метода определено в вашем public $func, вы можете пройти $this->func. Это относится к большинству функций, которые принимают аргумент callback.

В качестве примечания стороны, круглые скобки вне array_map() не нужны.

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

Я не знал, что даже этот синтаксис работал. Но, поскольку вы сказали «function ** name **», одна альтернатива - «array_map» (массив ($ this, 'func'), диапазон ($ min, $ max)). – nevvermind

+0

@nush: Я имел в виду имя функции, как в строке '' doSomeWork'', а не имя свойства '$ func'. – BoltClock

+1

вы правы. Я не обращал внимания на код. PS: Это был очень быстрый ответ. Приветствия. – nevvermind

1

Следующий код предоставляет множество писем от $users массива, который содержит экземпляры класса с getEmail методом:

if(count($users) < 1) { 
     return $users; // empty array 
    } 
    return array_map(array($users[0], "getEmail"), $users); 
Смежные вопросы