php - 在 PHP 中为动态调用指定尚未定义的参数

标签 php

我正在使用 PHPcall_user_func_array函数进行动态调用。我创建了一个函数名称数组及其相应的参数,然后在循环中执行。例如:

$methods = [
    [ 'myfunction1', [$arg1, $arg2] ],
    [ 'myfunction2', [$arg3, $arg4] ],
];

foreach ($methods as $method) {
    call_user_func_array($method[0],$method[1]);
}

虽然这工作正常,但我面临的问题是,在我定义 $methods 数组的那一刻,一些参数尚未定义(例如 $arg1,$arg4 有,$arg2$arg3 没有)但是它们是在调用函数时定义的。

因此,我正在寻找一种方法来告诉函数在哪里可以找到该参数的值。到目前为止,我想到的是用表示变量名称的字符串替换变量:

$methods = [
     [ 'myfunction1', [$arg1, 'ARG2'] ],
     [ 'myfunction2', ['ARG3', $arg4] ],
];

然后在 foreach 循环中,我遍历每个参数,检查它是否是一个字符串,并且该字符串是否匹配一个变量,我用该变量的值替换该字符串:

foreach ($methods as $method) {
    foreach ($method[1] as $k => $arg) {
        if (is_string($arg)) {
            $name = strtolower($arg);
            if (isset(${$name})) {
                $method[1][$k] = ${$name};
            }
        }
    }
    call_user_func_array($method[0], $method[1]);
}

虽然这行得通,但我想知道 PHP 中是否使用了其他已知方法,因为它可能会帮助我改进我的代码。

您是否知道我可以通过在定义时未设置某些参数来定义动态调用的任何其他方法?

最佳答案

您可以使用匿名函数作为未知参数,在调用时返回参数值。这是工作代码:

function myfunction($arg1, $arg2)
{
    echo "\nARGS: $arg1, $arg2";
}

$arg2func = function() {
    return 'foo';
};

$arg3func = function() {
    return 'bar';
};

$arg1 = 'baz';
$arg4 = 'chopchop';

$methods = [
    [ 'myfunction', [$arg1, $arg2func] ],
    [ 'myfunction', [$arg3func, $arg4] ],
];
foreach ($methods as $method) {
    foreach ($method[1] as $k => $arg) {
        if (is_callable($arg)) {
            $method[1][$k] = $arg();
        }
    }
    call_user_func_array($method[0], $method[1]);
}

关于php - 在 PHP 中为动态调用指定尚未定义的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15221744/

相关文章:

php - 更新 MySQL 字段数组

php - 如果有人通过特定网站上的链接检查您的网站,如何隐藏页脚

php - 如何在paypal中设置定期付款

PHP 防止函数同时执行(通过 PHP 进行限制)

php - 使用 mysql_insert_id() 将 .php 的 id 传递给另一个 .php

php - 根据产品总数对某些类别进行折扣

javascript - 从 React 前端调用 PHP Lumen 后端并解决 CORS 问题

php - 如何生成有效的 PEM 私钥字符串?

php - 返回未插入 mysql 表中的数据

php - php 中的 PDOException “could not find driver”