zoukankan      html  css  js  c++  java
  • php 函数使用可变数量的参数

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

    php5.5及更早的版本中

    在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及以上的版本中

    在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
    
    ?>1234567891011
    

    例子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
            )
    
    )
    
  • 相关阅读:
    AcWing 1018. 最低通行费
    蓝桥杯赛第10届省赛
    P5745 【深基附B例】区间最大和
    P3383 【模板】线性筛素数
    第12届蓝桥杯赛国赛 小蓝买瓜子
    P4715 【深基16.例1】淘汰赛
    AcWing 1015. 摘花生
    第12届蓝桥杯赛省赛 种菜的最大价值
    linq to sql初步
    汇编语言学习笔记接收鼠标消息
  • 原文地址:https://www.cnblogs.com/makalochen/p/13718512.html
Copyright © 2011-2022 走看看