使用基于数组的对象方法调用传递参数

时间:2011-11-24 10:02:43

标签: php oop object methods

我需要在函数内调用一个方法,所以我必须将它作为一个数组传递给它:

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中使用回调的方式(不认为它是相关的,原来是这样)。投票结束了。

2 个答案:

答案 0 :(得分:0)

如果您查看call_user_func,可以看到它有第二个名为parameter的可选参数。

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

使用它。

或者你可以像the comment on call_user_func

中提到的那样肮脏
$method_name = "AMethodName";
$obj = new ClassName();
$obj->{$method_name}();

答案 1 :(得分: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);