php-传递给函数的变量的动态数量

php-传递给函数的变量的动态数量,php,function,variables,Php,Function,Variables,我正在寻找一种最优雅的方法来传递可变数量的参数来传递函数 考虑这样一个函数: function abc ($x, $y, $l, $m) { ... } 有没有一种优雅的方法,不使用大量的“ifs”或变量数组作为一个变量来调用函数: all ($x, $y, $l, $m) arguments first three ($x, $y, $l) arguments first and third ($x, $l) arguments only second ($y) argument last

我正在寻找一种最优雅的方法来传递可变数量的参数来传递函数

考虑这样一个函数:

function abc ($x, $y, $l, $m) {
...
}
有没有一种优雅的方法,不使用大量的“ifs”或变量数组作为一个变量来调用函数:

all ($x, $y, $l, $m) arguments
first three ($x, $y, $l) arguments
first and third ($x, $l) arguments
only second ($y) argument
last two ($l, $m) arguments

请注意。

我宁愿使用数组作为参数,并在函数内部检查它,以查看变量是否存在:

function abc ($data) {

    if(isset($data['x']){
       //whatever
    }

    if(isset($data['y']){
       //whatever
    }

    ...
}

看看
func\u get\u args()
func\u get\u arg()
func\u num\u args()


当然,当您使用这些参数时,您无法仅通过调用
abc($x,$l)
获得“first”和“third”参数。你必须调用abc($x,null,$l)

你想说你想检查函数中设置了多少变量吗? 也许这会有帮助

function abc($a) {
    $args = func_num_args();
    for($i = 0; $i < $args; $i++) {
        print_r(func_get_arg($i));   
    }
}
abc(1,2,3,4);
功能abc($a){
$args=func_num_args();
对于($i=0;$i<$args;$i++){
打印(函数获取参数($i));
}
}
abc(1,2,3,4);
//使用**func\u get\u args**函数获取函数中传递的所有arg
可变函数($a,$b){
$args=func_get_args();
foreach($args作为$arg){
回显“$arg
\n”; } } //作为数组传递 $arg=array('a'=>a,'a'=>b美元) 函数变量($arg) { 如果(isset($arg[a])) }
我想不出任何确切的替代方案来替代您的解决方案。。。 或者必须将null传递给不想发送的参数 比如
abc(null,$y,null,$m)

或者我们想的是使用call\u user\u func\u数组之类的东西

 $params = array('','y','','m');
 call_user_func_array('abc', $params);
然后调用函数,如:

所有($x,$y,$l,$m)参数

前三个($x,$y,$l)参数

第一个和第三个($x,null,$l)参数

只有第二个(null,$y)参数


最后两个(null,null,$l,$m)参数

我最近需要一个函数来动态调用其他函数,并试图使其变得最优雅和易于维护。也许这种方法对那些需要将不同数量的参数传递给同一个函数的人很有用,看看如何使用一种方法调用所需的任何函数

$return = call_user_func_array($function_name, $parameters);
在我的例子中,我传递一个web服务中可用的函数,并用每个函数所需的参数馈送
$parameters
数组


您是在寻找还是在寻找替代方法?不幸的是,由于您无法在PHP中命名参数,函数如何理解您是在传递前3个参数还是在传递后3个参数?除非您使用数组(但您说过要避免它)+对于可选的命名参数,使用数组是大多数框架中常见的方法。还要看看。要检查有什么样的参数,我必须把所有(在本例中是四个)变量都放在函数中。。。有时我会把一个,另一个时间-3,所以这不是解决方案,所以你需要传递一个参数数组,这样你就可以使用数组键作为你传递的参数的标签(x,y,m或l)。@JasonMcCreary不抱歉,在你要求它之前我没有:)。虽然这确实利用了PHP的动态特性,如果我写abc(1,2,4),我不知道4是$m而不是$l:(你是对的。我知道的唯一其他方式,就像@JasonMcCreary描述的那样,有一个带有key=>value对的数组。我希望有某种“神奇的”解决方案-精彩、优雅、短暂、有效……不幸的是,生活就是生活。肮脏、灰色、长得像卫生纸:你可以发送abc(0,0,1,0),然后检查它-如果$x=0,那么忽略它。我从一开始就知道这个解决方案,但肯定不是优雅的方式。为什么它不优雅?你的意思是什么“优雅”?是的,但是你不会做“大量的IFS”或使用数组。把它当作一个简化的例子,但是函数例如需要10或20个参数。现在,绝对不优雅的方式是调用这样的函数:ABC(1, 0, 1,1, 0, 0,0, 1, 2,5, 6, 7,2, 0, 0,2)。也许它看起来不坏,但你怎么能记住which参数是哪一个呢?然后按数组调用:abc(数组('x'=>'1','y'=>0)),或者为它创建一个类(有点过分了),并通过以下方式调用:$abc=new abc();$abc->setX(1);$abc->setY(0);$abc->run();
function abc ($x=null, $y=null, $l=null, $m=null) {

}
$return = call_user_func_array($function_name, $parameters);