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
            )
    
    )
    
  • 相关阅读:
    Tensorflow中张量的数学运算
    TensorFlow2.0中tf.concat和tf.stack的区别
    机器学习之K-Means(聚类分析)
    机器学习之线性回归
    机器学习之随机森林
    机器学习之决策树
    python爬取FTP文件,并批量下载到本地。
    ATOM系列之-atom报错"Cannot load the system dictionary for zh-CN"
    开机出现loading (hd0)/ntldr。。。
    如何制作一张符合上传的照片
  • 原文地址:https://www.cnblogs.com/makalochen/p/13718512.html
Copyright © 2011-2022 走看看