我试图通过如下数组调用PHP函数:
$x = (object) array(
"one" => "value",
"two" => "value2",
"three" => function() {
return "return_value";
}
);
echo($x->three());
由此我收到错误:
<b>Fatal error</b>: Call to undefined method stdClass::three()
我搜索了一下,找不到任何关于此的文档,但我通过
运行了php -l filename.php
没有发现语法错误。
我想知道我正在尝试做的是什么(最终目标是使用数组中的参数调用函数)。 有人能够对此有所了解吗?
由于
注意,我也尝试过:
function foo() {
return "bar";
}
$x = (object) array(
"foo" => foo
);
...
导致相同的结果。
答案 0 :(得分:3)
使用数组而不是对象:
$x = array(
"one" => "value",
"two" => "value2",
"three" => function() {
return "return_value";
}
);
要调用lambda函数,您可以执行以下操作:
echo $x['three']();
如果您真的必须使用某个对象,那么您可以执行以下操作:
$x = array(
"one" => "value",
"two" => "value2",
);
$obj = (object) $x;
$obj->three = function() {
return "return_value";
};
调用该函数:
echo $obj->three->__invoke();
答案 1 :(得分:2)
您创建的方法类型被归类为匿名函数,由Closure类表示,因此继承其属性,其中包括Amal Murali指定的调用方法。
您有两种方法可以调用此函数:
echo $x->three->__invoke();
echo call_user_func( $x->three );
如果您需要传递参数,可以拨打$x->three->__invoke( $args );
或call_user_func( $x->three, $args1, $args2 );
。