PHP函数 - 最大参数数

时间:2011-11-08 11:27:33

标签: php

在PHP中,定义函数时,您可以创建的参数的最大数量是多少?这不是我正在做的事情,只是在与同事讨论时出现的一个问题:)

这纯粹是内存限制吗?有效无限?

4 个答案:

答案 0 :(得分:12)

没有限制。您始终可以使用func_get_args()func_get_arg()func_num_args()来避免在函数定义中编写所有参数。

答案 1 :(得分:10)

函数的参数被压入堆栈,然后调用函数,然后函数读取堆栈并将这些值用作参数。

因此,只要堆栈未满,就可以继续添加参数,但这取决于具体情况,在设计时你不会知道堆栈大小。

但我真的希望这是纯粹的技术讨论,你不需要IRL。 ; - )

答案 2 :(得分:5)

  

定义函数时,您可以创建的参数的最大数量是多少?

我不知道作为固定数字的参数数量的具体限制。快速测试显示我用255 555参数定义一个函数没有问题。确定函数并执行它需要一些时间。但是,它有效。

随着数字的增加,我遇到了内存限制,这可能是字符串限制。您可能希望改进测试用例,使用缓冲区并按顺序将文件保存到磁盘,然后包含它:

$count = 255555;

$code = 'function test(%s) {return 1;}; return test();';

$params = ltrim(implode('=0, $p', range(0, $count)), '0, =').'=0';

echo eval(sprintf($code, $params));

答案 3 :(得分:3)

我真的不知道有什么限制,但不管怎样,如果你创建一个包含太多参数的函数,你的代码将不会那么容易阅读。如果你想添加许多函数参数,你可以这样做:

$option = array(
    'arg_1' => 'value',
    'arg_2' => 'value',
    ....
    'arg_x' => 'value'
);

function function_name($args = "")
{
    $defaults = array(
        'arg_1' => 'default_value',
        'arg_2' => 'default_value'
        ....
        'arg_x' => 'default_value'
    );

    $arguments = array_merge($defaults, (array)$args);
    extract($arguments);

    echo $arg_1;
    echo $arg_x;
}