2011-11-24 2 views
0

I 함수 내에서 메소드를 호출 할 필요가 있으므로 I 배열과 같이로 전달해야전달 인자

array($this, 'display_page'); 

하지만 그것과 함께 인수를 전달해야 . 이것이 가능한가?

편집-새로운 방법-여전히 작동하지 않습니다.

나는 배열 호출 대신에 익명 함수를 전달하려고 시도했다.

class MyClass{ 

static function display_page($arg = false) 
    { 
     if($arg){ 
     echo $arg; 
     } else { 
     echo "Nothing to report!"; 
     } 
    } 
} 

을하지만, 내가 할 모든보고 아무것도 없다 :

function(){MyClass::display_page($display);} 

및 thusly 히 기능을 편집!

EDIT 문제는 콜백이 Wordpress 내에서 사용되는 방식에 있습니다 (관련성이 있다고 생각하지 않았을 때, 그 것이 밝혀졌습니다). 투표를 종료했습니다.

+0

분명히하십시오. 콜백 함수 참조와 함께 인수를 전달해야합니까? 그건 ... 특이한 일이야. – deceze

+2

PHP에서는 객체 메소드의 콜백에'&'를 사용할 필요가 없습니다. – hakre

+0

@deceze 네, 그 중 하나가 아니면 하나의 라인이 바뀌는 몇 가지 다른 콜백을 작성합니다. –

답변

0

call_user_func을 살펴보면 매개 변수라는 두 번째 선택적 매개 변수가 있음을 알 수 있습니다.

mixed call_user_func (callback $function [, mixed $parameter [, mixed $... ]]) 

사용하십시오.

또는 the comment on call_user_func에서 언급 한 것처럼 당신은 그것을 더러운 방법을 할 수

$method_name = "AMethodName"; 
$obj = new ClassName(); 
$obj->{$method_name}(); 
+0

이 메서드는 함수에 대한 참조를 전달하지 않고 함수를 호출하기 때문에 작동하지 않습니다. –

0

아마도 이러한 라인을 따라 뭔가 할 것입니다 :

class Foo { 

    public function callMe() { 
     $args = func_get_args(); 
     var_dump($args); 
    } 

    public function getCallback() { 
     $that = $this; 
     return function ($oneMoreArg) use ($that) { 
      $that->callMe(1, 2, $oneMoreArg); 
     }; 
    } 

} 

$foo = new Foo; 
$callback = $foo->getCallback(); 
$callback(3); 

당신은 PHP 5.3, 최선을 실행하지 않는 경우 할 수있는 것은 아마도 "맞춤 콜백 배열"과 "맞춤 전화 번호"를 반환하는 것입니다 :

$callback = array($this, 'callMe', 1, 2); 

$args = array_splice($callback, 2); 
$args[] = 3; 
call_user_func_array($callback, $args);