2010-12-28 9 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; 

Może ktoś powiedzieć, co mogę napisać na WHAT_TO_WRITE_HERE, tak że funkcja doSomeWork się przekazać jako pierwszy parametr do array_map. i kod działa poprawnie.Przechodząc metoda obiektu do array_map()

I dają się umieścić jak

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

To powinno działać, jeśli tylko napisali tam nazwę funkcji „doSomeWork " –

+1

' tablica ($ this, $ this-> func) 'będzie działać, gdy przekazujemy obiekt, który musisz przekazać w tablicy, gdzie pierwszy argument jest obiektem, a drugi jest metodą w tym obiekcie' tablica ([obiekt [], funkcja]) ' – RobertPitt

Odpowiedz

27

stosowanie metod obiektu z array_map() przechodzą tablicę zawierającą wystąpienie obiektu i nazwę metody. W przypadku zakresu tego samego obiektu, używaj normalnie $this. Ponieważ nazwa metody jest zdefiniowana we właściwości public $func, można przekazać $this->func. Dotyczy to większości funkcji, które przyjmują argument jako callback.

Na marginesie nawiasy poza array_map() nie są konieczne.

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

Nie wiedziałem, że działa nawet ta składnia. Ale, ponieważ powiedziałeś "funkcja ** nazwa **", jedną z alternatyw jest "tablica_map (tablica ($ this, 'func'), zakres ($ min, $ max))". – nevvermind

+0

@nush: Miałem na myśli nazwę funkcji jak w ciągu '' doSomeWork "', a nie nazwę właściwości '$ func'. – BoltClock

+1

masz rację. Nie zwróciłem uwagi na kod. PS: To była bardzo szybka odpowiedź. Twoje zdrowie. – nevvermind

1

Poniższy kod zapewnia szereg e-maili z $users tablicy zawierającej instancje klasy z getEmail metody:

if(count($users) < 1) { 
     return $users; // empty array 
    } 
    return array_map(array($users[0], "getEmail"), $users); 
Powiązane problemy