call_user_func по методам - PullRequest
       0

call_user_func по методам

4 голосов
/ 10 января 2012

Есть ли разница между:

$callback = array(&$this, 'method');
$callback[0]->$callback[1]($args);

и

call_user_func(array(&$this, 'method'), $args);

?

Ответы [ 3 ]

2 голосов
/ 10 января 2012

Нет, нет разницы между вызовом метода / функции переменной и использованием call_user_func. Я не сталкивался с обстоятельствами, когда мне нужно было последнее. Кстати, вам не нужно передавать $this по ссылке; все объекты автоматически передаются по ссылке.

2 голосов
/ 10 января 2012

Без разницы, но я предпочитаю второй для удобства чтения. Первый менее понятен и занимает две строки ...

1 голос
/ 10 января 2012

Я действительно не видел первый используемый пример, но он кажется действительным и должен быть быстрее, чем call_user_func(), поскольку у вас нет лишних затрат на вызов другой функции.

UPDATE:

Кроме того, вы не можете сделать это с call_user_func(), если вы включили уровень ошибки E_STRICT:

// ...

public function &example($foo)
{
    $this->bar = 'foo';
    return $this->bar;
}

// ...

$dummy = &$callback[0]->$callback[1]($args);

В этом случае call_user_func() вызовет что-то вроде этого:

Строгие стандарты PHP: только переменные должны назначаться по ссылке в коде оболочки php в строке X

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...