php - 如何使用不同的参数顺序调用 PHP 匿名函数

标签 php function lambda closures

我想调用一个有一些参数的匿名函数(lambda 或闭包),我知道参数名称但不知道它们的顺序! call_user_func_array() 函数可以调用带有参数数组的函数,但该数组不能是关联数组来设置所需参数的每个值,以下代码是我尝试解决我的问题但它们不起作用!

函数:

$function = function ($b, $c, $a) {
    echo "a=" . $a . " & b=" . $b . " & c=" . $c;
};

我想要的输出:

a=1 & b=2 & c=3

我的尝试:

// Attempt 1
call_user_func_array($function, array("a" => 1, "b" => 2, "c" => 3));
// Attempt 2
$ref = new ReflectionFunction($function);
$ref->invokeArgs(array("a" => 1, "b" => 2, "c" => 3));

产量输出:

a=3 & b=1 & c=2

最佳答案

您必须按位置传递参数,根本不考虑名称。您可以使用反射按名称将参数映射到它们的位置:

$params = array("a" => 1, "b" => 2, "c" => 3);
$ref = new ReflectionFunction($function);

$arguments = array_map(
    function (ReflectionParameter $param) use ($params) {
        if (isset($params[$param->getName()])) {
            return $params[$param->getName()];
        }
        if ($param->isOptional()) {
            return $param->getDefaultValue();
        }
        throw new InvalidArgumentException('Missing parameter ' . $param->getName());
    },
    $ref->getParameters()
);

$ref->invokeArgs($arguments);

关于php - 如何使用不同的参数顺序调用 PHP 匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34785190/

相关文章:

php - 在wordpress中将值插入数据库的问题

Javascript:在函数外获取 `this`

java - 使用反射为泛型类型变量生成 lambda 类

Python:如何使用 1 个 lambda 函数进行多种浮点格式设置

.net - 封装 Linq to SQL 数据访问的最佳方法是什么?

php - 替换服务器上文件的最佳方法

javascript - 我如何在 php 中分别打印多个值?

php - CDN 上的静态内容使用 PHP 获取地址

php - 无法重新声明函数php

javascript - 可以在 IF 语句中从函数声明变量吗?