在PHP中,定义函数时,您可以创建的参数的最大数量是多少?这不是我正在做的事情,只是在与同事讨论时出现的一个问题:)
这纯粹是内存限制吗?有效无限?
答案 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;
}