• 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
            )
    
    )
    
  • 相关阅读:
    Vue.nextTick()的介绍和使用场景
    JS实现数据双向绑定
    JS对象的可枚举属性和不可枚举属性
    JS中对象转数组方法总结
    Vmware虚拟机安装XP系统
    javascript和c#的深度拷贝的一种通用方法
    c# SQLServer导入大批量数据
    PowerDesigner逆向工程,从SQL Server数据库生成Physical Model -----数据源方式
    虚拟机和主机ping不通,SQL Server无法远程连接的解决方法
    c#生成试卷。。。
  • 原文地址:https://www.cnblogs.com/makalochen/p/13718512.html
Copyright © 2020-2023  润新知