php 函数使用可变数量的参数

原创 2018年04月16日 10:48:52

php在用户自定义函数中支持可变数量的参数列表。

在php5.5及更早的版本中,使用func_num_args(), func_get_arg(), func_get_args()函数实现。

<?php

function myfunc(){

    // 获取参数数量
    echo func_num_args().PHP_EOL;

    // 获取第一个参数的值:
    print_r(func_get_arg(0));
    echo PHP_EOL;

    // 获取所有参数的值
    print_r(func_get_args());
    echo PHP_EOL;

}

myfunc('a');
myfunc(1, 2, 3);
myfunc(array('d','e'), array('f'));

?>

输出:

1
a
Array
(
    [0] => a
)

3
1
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

2
Array
(
    [0] => d
    [1] => e
)

Array
(
    [0] => Array
        (
            [0] => d
            [1] => e
        )

    [1] => Array
        (
            [0] => f
        )

)


在php5.6及以上的版本中,可以使用语法实现。

<?php

function myfunc(...$args){

    // 获取参数数量
    echo count($args).PHP_EOL;

    // 获取第一个参数的值:
    print_r($args[0]);
    echo PHP_EOL;

    // 获取所有参数的值
    print_r($args);
    echo PHP_EOL;

}

myfunc('a');
myfunc(1, 2, 3);
myfunc(array('d','e'), array('f'));

?>



例子1: 使用…$args代替任意数量参数

输出结果与php5.5使用func_num_args(), func_get_arg(), func_get_args()函数一致。 

<?php

function add($a, $b){
    echo $a + $b;
}

$args = array(1, 2);

add(...$args); // 输出3

?>


例子2: 数组转为参数列表
<?php

function display($name, $tag, ...$args){
    echo 'name:'.$name.PHP_EOL;
    echo 'tag:'.$tag.PHP_EOL;
    echo 'args:'.PHP_EOL;
    print_r($args);
    echo PHP_EOL;
}

display('fdipzone', 'programmer');
display('terry', 'designer', 1, 2);
display('aoao', 'tester', array('a','b'), array('c'), array('d'));

?>


例子3: 部分参数指定,其他参数数量不定

输出:

name:fdipzone
tag:programmer
args:
Array
(
)

name:terry
tag:designer
args:
Array
(
    [0] => 1
    [1] => 2
)

name:aoao
tag:tester
args:
Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

    [1] => Array
        (
            [0] => c
        )

    [2] => Array
        (
            [0] => d
        )

)

(JS函数与作用域)[用OOP的思想来学习JavaScript]{第6章}

-
  • 1970年01月01日 08:00

PHP5.6新增加可变函数参数

今天无事,看了下PHP手册。发现PHP版本更新增加不少东西。下面就说说其中的PHP5.6更新中新增加的可变函数参数。 代码1:function sum(...$numbers) { $acc...
  • gao_yu_long
  • gao_yu_long
  • 2016-07-14 18:42:41
  • 6302

C++参数个数可变函数的本质

va_list是一个宏,由va_start和va_end界定。     typedef char* va_list;   void va_start ( va_list ap, prev_pa...
  • a524624859
  • a524624859
  • 2017-04-17 17:28:52
  • 379

php5.6及其以上版本有了新特性,函数可以传入不定数目的参数

php5.6+版本有了新特性,函数可以传入不定数目的参数
  • shi_yi_fei
  • shi_yi_fei
  • 2016-07-24 22:08:44
  • 910

Java---形参个数可变的方法

1>从JDK 1.5以后,Java允许定义形参个数可变的参数,从而允许为方法指定数量不确定的形参。 定义形参个数可变的方法: 2>定义参数个数可变的方法:在方法最后一个形参的类型后面增加三个点(....
  • cxc19890214
  • cxc19890214
  • 2015-05-27 09:27:43
  • 1120

Matlab 定义函数,函数参数个数可变

function re=add_multi(a,b,c,d) % % nargin 表示参数个数 if nargin==4 re=a+b+c+d; elseif nargin==3 r...
  • houyanhua1
  • houyanhua1
  • 2017-10-18 11:22:50
  • 296

详解如何实现定义一个参数个数可变的函数

前言:本文章大部分参考了网易博主喧闹的寂寞的文章如何实现可变参数函数和chinaunix博主vinge的文章编写可变参数c函数,感谢这两偏文章的详细解说。 还记得在以前的一个面试中遇到这样一个题目,...
  • cgqzly123
  • cgqzly123
  • 2016-01-13 22:05:56
  • 867

Python中函数个数可变参数的传递

如果用过C语言中的printf()函数,那么就会对参数传递个数可变的意义比较了解了。尽管可选参数的机制令函数的参数个数是可变的,但还是有限制的,参数个数有最大的限制,而且还要指明哪些是可选参数。而下面...
  • liuguiyangnwpu
  • liuguiyangnwpu
  • 2013-07-20 20:32:36
  • 4598

PHP中可变变量和php可变函数到底有什么用?

什么是可变变量? PHP提供了一种其他类型的变量——可变变量。可变变量允许我们动态地改变一个变量的名称。 可以看到,在这方面,PHP具有非常大的自由度——所有的语言都允许改变变量的值,但是并没有太多...
  • river131
  • river131
  • 2016-01-28 10:09:42
  • 1432

Java可变参数个数方法

/* *可变个数形式参数 *可匹配0至多个参数 */ class NullToMulVar { public static void main(String[] args) { N...
  • u013453970
  • u013453970
  • 2015-08-06 15:24:36
  • 1471
收藏助手
不良信息举报
您举报文章:php 函数使用可变数量的参数
举报原因:
原因补充:

(最多只允许输入30个字)