作为程序员一定要保持良好的睡眠,才能好编程

php方法可变参数的定义方式 参数前面的三个点

发布时间:2019-04-19


在项目中经常会看到方法中,定义的参数 前边有 ... 这是做什么用的?


PHP传递参数中  前面的三个点是做什么用的


在php5.6 及更高的版本中 使用... 这三个点加上一个变量名实现的。


function sum(...$numbers) {

    $acc = 0;

    foreach ($numbers as $n) {

        $acc += $n;

    }

    return $acc;

}


echo sum(1, 2, 3, 4);





像 func_num_args()  和 func_get_args() 这两个变量是在5。5及更早的版本前使用。

function sum(){


return "一共传递了".func_num_args().'个参数';


}


function sum() {

    $acc = 0;

    foreach (func_get_args() as $n) {

        $acc += $n;

    }

    return $acc;

}


echo sum(1, 2, 3, 4);




我们还可以指定类型

function total_intervals($unit, DateInterval ...$intervals) {
    $time = 0;
    foreach ($intervals as $interval) {
        $time += $interval->$unit;
    }
    return $time;
}
$a = new DateInterval('P1D');
$b = new DateInterval('P2D');
echo total_intervals('d', $a, $b).' days';
// This will fail, since null isn't a DateInterval object.
echo total_intervals('d', null);
function wxc ($arg1, $arg2, ...$otherArgs){
echo '<pre>';
print_r($otherArgs);
print_r(func_get_args());
echo '</pre>';
}
// wxc (1, 2, ...array(3,4,5));
wxc (1, 2,...array(3,4,5));
    /**
    <pre>Array
(
    [0] => 3
    [1] => 4
    [2] => 5
)
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
**/
wxc (1, 2,array(3,4,5));
/*Array
(
    [0] => Array
        (
            [0] => 3
            [1] => 4
            [2] => 5
        )
)
Array
(
    [0] => 1
    [1] => 2
    [2] => Array
        (
            [0] => 3
            [1] => 4
            [2] => 5
        )
)*/