2014-11-20 4 views
3

콜백 함수를 인자로받는 함수가 클래스에 있습니다.콜백 함수에 모든 인수를 전달할 수 있습니까?

하지만 다음 콜백에 N 추가 인수를 전달하고 싶습니다 :

내가 달성하기 위해 노력하고있어
$myClass->each(function($result,$arg1,$arg2,$arg3){ 

    echo $arg2; //expected: bar 

},'foo','bar',85); 

:

class myClass { 

    public function each() { 

     $callback = func_get_arg(0); 
     $args = array_slice(func_get_args(), 1); //_____ 
               //  | 
     if (is_callable($callback)) {   //  | I have $args 
      foreach ($this->results as $result) {//  | But how can I pass 
        $callback($result,...$args); //  | them to $callback 
      }      //^    | as a set of args? 
     }       // |__________________| 
    } 

} 

난 유의하시기 바랍니다 PHP 5.4 사용하여 ... 연산자를 사용할 수 없습니다

+1

콜백을 사용하여 배열을 허용하면 func_get_args() 결과를 직접 전달할 수 있습니다. –

답변

3

대답은, 나는 믿습니다, call_user_func_array. 나는 그것이 splat 연산자의 시대에 조금 고풍 것 같아요,하지만 그것은 5.4에서 최고의 옵션이라고 생각합니다.

public function each() { 
    $callback = func_get_arg(0); 
    $args = func_get_args(); 

    if (is_callable($callback)) {    
     foreach ($this->results as $result) { 
       $args[0] = $result; 
       call_user_func_array($callback, $args); 
     }     
    }      
} 

이 단순히 적절한 $result$args의 첫 번째 항목을 (우리가 어쨌든 원하지 않는) 덮어 씁니다.

관련 문제