是否有办法将无限量的参数传递给函数,并访问所有这些参数,而无需在标题中定义每个参数。这是一个让它更清晰的例子:
function doSomething($var1="", $var2="".........)
{
// Do something with the arguments
}
我不想要定义一堆参数。有没有办法只获取数组中的所有参数?即使他们没有被定义? (PHP BTW)
最终结果应如下所示:
func("hello", "ya", "hi", "blah", "test", "go");
function func()
{
//Loop Over Arguments
}
我已经看到一些本机PHP函数能够接受看似无限数量的参数,但是用户定义的函数可以做同样的事情吗?
答案 0 :(得分:5)
您可以使用func_get_args
,func_get_arg
和func_num_args
考虑到你已经宣布了这三个变量:
$param_1 = "A";
$param_2 = "B";
$param_3 = "C";
这是第一个例子,使用func_get_args
获取一个数组中的所有参数:
my_function_1($param_1, $param_2, $param_3);
function my_function_1()
{
$num_args = func_num_args();
if ($num_args >= 1) {
$args = func_get_args();
var_dump($args);
}
}
这是另一个用func_get_arg
:
my_function_2($param_1, $param_2, $param_3);
function my_function_2()
{
$num_args = func_num_args();
if ($num_args >= 1) {
$args = func_get_args();
for ($i = 0 ; $i<$num_args ; $i++) {
var_dump(func_get_arg($i));
}
}
}
答案 1 :(得分:3)
见func_get_args。它完全符合您的要求
答案 2 :(得分:2)
是的,肯定有。查看func_get_args(),它应该完全符合您的需求。
答案 3 :(得分:0)
您可以通过using func_num_args()找出函数调用的参数数量。然后,您可以通过使用func_get_arg(index)或使用func_get_args()将所有参数指定为数组来获取每个参数。
示例:
function variable_arguments() {
echo "This function was called with ".func_num_args()." arguments.<br />";
echo "Those arguments were:<br /><pre>";
echo print_r(func_get_args());
echo "</pre>";
}
variable_arguments("Hello", 42, array(true));
答案 4 :(得分:0)
正如其他人发布之前您可以使用func_get_args()
但为什么不尝试传递数组中的参数? PHP的类型是松散的,因此您可以在其中存储任何内容。
$params = array(1, 2, 'something');
doSomething($params);
function doSomething($params) {
foreach ($params as $value) {
// do something.
}
}
我更喜欢这个,因为它使开发人员可以看到你期望函数的参数,你仍然可以通过paramters数组传递尽可能多的参数,而且开销很小。