передача аргументов с помощью вызова метода на основе массива - PullRequest
0 голосов
/ 24 ноября 2011

Мне нужно вызвать метод изнутри функции, поэтому я должен передать его как массив следующим образом:

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 голосов
/ 24 ноября 2011

Может быть, что-то в этом роде подойдет:

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);
0 голосов
/ 24 ноября 2011

Если вы посмотрите на call_user_func , вы увидите, что у него есть второй необязательный параметр, называемый параметром.

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

Используйте это.

Или выможет сделать это грязным способом, как упомянуто в комментарии к call_user_func

$method_name = "AMethodName";
$obj = new ClassName();
$obj->{$method_name}();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...