假设我们有一个类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
谢谢!
答案 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及更高版本,你应该考虑使用匿名函数