直接从PHP数组调用函数

时间:2014-03-04 17:45:07

标签: php arrays function

我试图通过如下数组调用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
);
...

导致相同的结果。

2 个答案:

答案 0 :(得分:3)

使用数组而不是对象:

$x = array(
    "one" => "value",
    "two" => "value2",
    "three" => function() {
        return "return_value";
    }
);

要调用lambda函数,您可以执行以下操作:

echo $x['three']();

Demo


如果您真的必须使用某个对象,那么您可以执行以下操作:

$x = array(
    "one" => "value",
    "two" => "value2",
);

$obj = (object) $x;
$obj->three = function() {
    return "return_value";
};

调用该函数:

echo $obj->three->__invoke();

Demo

答案 1 :(得分:2)

您创建的方法类型被归类为匿名函数,由Closure类表示,因此继承其属性,其中包括Amal Murali指定的调用方法。

您有两种方法可以调用此函数:

  1. echo $x->three->__invoke();
  2. echo call_user_func( $x->three );
  3. 如果您需要传递参数,可以拨打$x->three->__invoke( $args );call_user_func( $x->three, $args1, $args2 );