创建一个variable_function作为类的成员

时间:2011-06-08 11:28:57

标签: php variables dynamic

假设我们有一个类stockFns而且我做

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

这会在$ stockFns中创建一个名为creat_function返回的属性。

现在我想引用(调用)created_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 个答案:

答案 0 :(得分:2)

无论你的方式,还是

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

问题是,PHP无法通过callables区分真正的方法和属性。如果您使用()调用某些内容,则根本不会触及属性,如果存在,可能会调用__call。你可以试试像

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

作为一种解决方法,__call()会重定向到您的回调。

答案 1 :(得分:1)

你试过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