繁体   English   中英

直接从PHP数组调用函数

[英]Call function directly from PHP array

我试图通过像这样的数组调用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
);
...

导致相同的结果。

使用数组而不是对象:

$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();

演示

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

您可以通过两种方式调用此函数:

  1. echo $x->three->__invoke();
  2. echo call_user_func( $x->three );

如果需要传递参数,可以调用$x->three->__invoke( $args ); call_user_func( $x->three, $args1, $args2 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM