2011-11-24 59 views
0

我需要从一个函数中调用一个方法,所以我必须通过它作为像这样的数组:与基于数组对象方法调用传递参数

array($this, 'display_page'); 

但我需要与它一起传递参数。这可能吗?

编辑 - 新方法 - 仍然没有工作。

我现在尝试传递一个匿名函数,而不是数组回调。

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

正是如此编辑的功能:

class MyClass{ 

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

,但我得到的是无报告!

编辑问题在于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);