【问题标题】:passing arguments with an array based object method call使用基于数组的对象方法调用传递参数
【发布时间】:2011-11-24 10:02:43
【问题描述】:

我需要从一个函数中调用一个方法,所以我必须像这样将它作为一个数组传递:

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 中使用回调的方式(不认为它是相关的,事实证明它是相关的)。已投票结束。

【问题讨论】:

  • 请澄清。您需要将参数与回调函数引用一起传递吗?这……不寻常。
  • 你不需要在 PHP 中使用& 来回调对象方法。
  • @deceze 是的,要么就是这样,要么写几个不同的回调,只改变一行。

标签: php oop object methods


【解决方案1】:

如果你看一下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}();

【讨论】:

  • 此方法不起作用,因为它调用函数,而不是传递对它的引用。
【解决方案2】:

也许这些方面的东西会做:

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);

【讨论】:

    猜你喜欢
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多