Создание функции variable_function в качестве члена класса - PullRequest
1 голос
/ 08 июня 2011

Допустим, у нас есть класс stockFns, и я делаю

$stockFns->{$functionOne}=create_function('$a,$b' , 'return $a+$b;');

Это создает свойство в $ stockFns с именем независимо от возвращаемой функции create_function.

Теперь я хочу сослаться (вызвать) насоздал_функцию.

Каким будет простой способ сделать это в одной инструкции ?.Пример

$stockFns=new StockFns;
$functionOne='add';
$stockFns->{$functionOne}=create_function('$a,$b' , 'return $a+$b;');

//echo "***" . ($stockFns->add)(1,2);  // That doesn't work
$theFn=$stockFns->add;
echo $theFn(1,2);         // This works but reuires two instructions

Спасибо!

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

Либо по-вашему, либо

echo call_user_func(array($stockFbs, 'add'), 1, 2);

Проблема в том, что PHP не может отличить реальные методы от свойств с вызываемыми объектами. Если вы вызываете что-то с (), это вообще не затронет свойства и, возможно, вызовет __call, если оно существует. Вы можете попробовать что-то вроде

class StockFns {
  public function __call ($name, $args) {
    $fctn = $this->{$name};
    return call_user_func_array($fctn, $args);
  }
}

В качестве обходного пути, __call() будет перенаправлять на ваш обратный вызов.

1 голос
/ 08 июня 2011

вы пробовали call_user_func?

http://php.net/manual/en/function.call-user-func.php

echo call_user_func(array($stockFns, $functionOne), 1, 2);

если вы используете PHP5.3 или более позднюю версию, вам действительно следует рассмотреть возможность использования анонимной функции

http://my.php.net/manual/en/functions.anonymous.php

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