在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及以上的版本中,可以使用…语法实现。

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

<?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')); ?>

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

例子2: 数组转为参数列表

<?php

function add($a, $b){
echo $a + $b;
} $args = array(1, 2); add(...$args); // 输出3 ?>

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

<?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')); ?>

输出:

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
) )

可变参...总结:

1,函数定义时的参数使用...$params,那么$params会是一个数组;

2,函数执行时使用 ...$params ,$param(数组格式)会把$param依次解析为函数的参数

php的参数函数与可变参的更多相关文章

  1. C语言中可变参数函数实现原理

    C函数调用的栈结构 可变参数函数的实现与函数调用的栈结构密切相关,正常情况下C的函数参数入栈规则为__stdcall, 它是从右到左的,即函数中的最右边的参数最先入栈.例如,对于函数: void fu ...

  2. C可变参数函数 实现

    转自:http://blog.csdn.net/weiwangchao_/article/details/4857567 C函数要在程序中用到以下这些宏: void va_start( va_list ...

  3. C语言可变参数函数实现原理

    一.可变参数函数实现原理 C函数调用的栈结构: 可变参数函数的实现与函数调用的栈结构密切相关,正常情况下C的函数参数入栈规则为__stdcall, 它是从右到左的,即函数中的最右边的参数最先入栈. 本 ...

  4. c可变参数函数

    C函数要在程序中用到以下这些宏: <pre lang="c" escaped="true">void va_start( va_list arg_p ...

  5. C和C指针小记(十二)-函数的可变参数表

    1.可变参数表是通过宏实现的 宏定义于stdarg.h头文件,它是标准库的一部分.这个头文件声明了一个类型var_list和三个宏--va_start.va_arg.va_end. 我们可以声明一个类 ...

  6. C语言中的可变参数函数

    C语言编程中有时会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为: int printf( const char* format, ...); 它除了有一个参数format固定以外 ...

  7. ios开发-Object-C可变参数函数

    简介 一个可变参数函数是指一个函数拥有不定的参数,即为一个函数可接收多个参数.有时我们会遇到一些算术问题需要用到,比如是计算传入参数的总和,字符串的连接或是其它操作过程,我们在 OC 里也经常使用,最 ...

  8. C语言学习020:可变参数函数

    顾名思义,可变参数函数就是参数数量可变的函数,即函数的参数数量是不确定的,比如方法getnumbertotal()我们即可以传递一个参数,也可以传递5个.6个参数 #include <stdio ...

  9. 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数

    [源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...

随机推荐

  1. window.onload 与 $(document).ready() 的区别

    以浏览器装载文档为例,在页面加载完毕后,浏览器会通过 JavaScript 为 DOM 元素添加事件.在常规的 JavaScript 代码中,通常使用 window.onload 方法 ,而在 jQu ...

  2. Python——爬虫——爬虫的原理与数据抓取

    一.使用Fiddler抓取HTTPS设置 (1)菜单栏 Tools > Telerik Fiddler Options 打开“Fiddler Options”对话框 (2)HTTPS设置:选中C ...

  3. 基于scrapy-redis的分布式爬虫

    一.介绍 1.原生的scrapy框架 原生的scrapy框架是实现不了分布式的,其原因有: 1. 因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls ...

  4. 解决Docker安装MySQL不区分大小写问题

    Docker安装MySQL忽略大小写问题的问题连接MySQL: 查看当前mysql的大小写敏感配置 show global variables like '%lower_case%'; +------ ...

  5. HTML- 标签语法

    HTML 标签语言 概念  超文本标记语言, 是一种用于创建网页的标记语言 ps: 不是编程语言 利用标签来描述网页 扩展名:.html .htm 语法规范 标签不区分大小写, 推荐小写 双标签必须写 ...

  6. [HNOI2016]矿区

    [HNOI2016]矿区 平面图转对偶图 方法: 1.分成正反两个单向边,每个边属于一个面 2.每个点按照极角序sort出边 3.枚举每一个边,这个边的nxt就是反边的前一个(这样找到的是面的边逆时针 ...

  7. c语言计算过程中的过程转换

    graph BT float==>double; id1[char, short]==>int; int-->unsigned unsigned-->long long--&g ...

  8. HTML-Note

    <meta>在 HTML 5 中,有一个新的 charset 属性,它使字符集的定义更加容易. charset character encoding 定义文档的字符编码. e.g. < ...

  9. 使用 gzexe 快速加密解密文件内容

    使用 gzexe 快速加密解密文件内容 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.使用sshpass工具编写远程管理脚本 1>.安装依赖包 [root@node101 ...

  10. java调用matlab绘图

    一 注意事项 1: MatLab的版本必须是2006b+(包括2006b或更高版本),因为只有在这些版本中才有MATLAB Builder for Java(也叫Java Builder). 2: 运 ...