将20多个参数传递给函数

时间:2014-07-08 18:07:46

标签: php

我正在编写几个将参数传递给函数的函数,但是其中许多函数需要传递20-30个参数才能传递给函数。出于本示例的目的,我只在下面的函数中包含相关的代码部分。

例如,我想将参数传递给这样的函数:

function shortexample($id, $name, $pass) {
    $body = array(
        'username' => "$name",
        'password' => "$pass",
        'campaign_id' => $id
    );
}

我预计问题是将许多(20-50)个变量传递给函数,而不仅仅是上面的3个,传递那么多参数似乎效率很低,如果我传递太多,可能甚至会出现内存问题他们。

所以我的实际问题是将有效数量的参数有效传递给PHP函数的最佳方法是什么。

我不想让你们发布完成的代码,虽然我欢迎您提供的任何片段,但实际上我只是想知道你们认为最好的做法是通过极端数量的函数的参数。

更新/澄清: 更具体地说,需要这么多参数的目的是因为API请求需要这些值。我不是一遍又一遍地编写相同的代码,而是编写一个函数,我可以调用它来根据需要发出API请求,但我需要将参数/变量传递给函数,然后将它们放入数组中,这是然后发送API请求。所有值都是非常小的字符串或数值。

3 个答案:

答案 0 :(得分:4)

我相信通过依赖注入,使用更高级的编程模型,尤其是面向对象的方式来获取复杂值的最佳方法

function shortexample(\stdClass $args) {
    $body = array(
        'username' => $args->username,
        'password' => $args->pass,
        'campaign_id' => $args->id,
    );
}

您应该使用接口

改进将要接收的对象的定义
//....
interface shortExampleInterface {
    public function getUsername();
    public function getPass();
    public function getId();
}



function shortexample(\shortExampleInterface $args) {
    $body = array(
        'username' => $args->getUsername(),
        'password' => $args->getPass(),
        'campaign_id' => $args->getId(),
    );
}

但我发现由于上下文实际上可能需要非常多的参数,因此值得尝试PHP 5.6的新功能:

可变参数函数

此功能允许您捕获函数的可变数量的参数,并结合" normal"如果你愿意,传入的参数。用一个例子来看最简单:

function concatenate($transform, ...$strings) {
    $string = '';
    foreach($strings as $piece) {
        $string .= $piece;
    }
    return($transform($string));
}

echo concatenate("strtoupper", "I'd ", "like ",
    4 + 2, " apples");

函数声明中的参数列表中包含...运算符,它基本上意味着" ......其他一切都应该进入$strings"。您可以将2个或更多参数传递给此函数,第二个和后续参数将添加到$strings数组中,随时可以使用。

示例2:

function f($req, $opt = null, ...$params) {
    // $params is an array containing the remaining arguments.
    printf('$req: %d; $opt: %d; number of params: %d'."\n",
           $req, $opt, count($params));
}

f(1);
f(1, 2);
f(1, 2, 3);
f(1, 2, 3, 4);
f(1, 2, 3, 4, 5);

答案 1 :(得分:1)

在PHP 5.6之前,您可以使用func_get_args()来获取传递的所有参数的数组。您还可以使用call_user_func_array()来解压缩要传递给函数的参数数组。

答案 2 :(得分:0)

传递一个将成为函数列表的关联数组。每个键都是参数的名称($ id,$ name $ etc),值将是您为该参数传递的值。