美文网首页首页投稿(暂停使用,暂停投稿)
PHP学习笔记--扩展函数参数列表

PHP学习笔记--扩展函数参数列表

作者: PeTu | 来源:发表于2016-06-03 11:33 被阅读78次

开始用PHP后,感觉这个语言越用越爽,丰富的函数支撑,松散的变量与方法定义,强有力的数组和字符串方法,让许多在在其他语言中异常麻烦的地方得到轻松解决,但是对于一开始只会Java的笔者来说,PHP有一个地方却让我感到有点不适,就是方法的重载方面。
在Java中,方法的重载是一个非常便利的特性,Java可以在一个类中定义多种方法而使用同一个名字,只要这些方法的传入的参数个数不同,就会调用不同的方法从而实现不同的功能,然而,PHP语言对于参数个数敏感却没有重载这一特性,让笔者在开发中异常苦恼
然而,问题总是能解决的,在这我发现了两种方法可以实现同一方法的参数扩展,省去不必要的重发代码

1. func_get_args()方法、func_get_arg()方法与func_num_args()方法

func_get_args()方法是获得该方法或函数的所有参数,以数组的形式返回
func_get_arg()方法是获得函数参数列表中的某一个参数,偏移量(offset)从0开始,即func_get_arg(3)获取的是第四个参数,返回用户自定义函数的参数列表中获取某个指定的参数,且 参数类型不变。
func_num_args()方法是获得函数参数列表的参数个数,返回一个整形数值。
举个栗子:

<?php
function foo (){
    $num = func_num_args();
    echo "参数个数:".$num."<br>";
    if($num>=2){
        echo "第二个参数是:".func_get_arg(1)."<br>";
    }
    $arg_list = func_get_args();
    for ($i = 0; $i < $num; $i++) {
        echo "Argument $i is: " . $arg_list[$i] . "<br>";
    }
}
foo('arg1','arg2','arg3','arg4','arg5','arg6');

这段代码输出如下:

参数个数:6第二个参数是:arg2
Argument 0 is: arg1
Argument 1 is: arg2
Argument 2 is: arg3
Argument 3 is: arg4
Argument 4 is: arg5
Argument 5 is: arg6


如此这般,可以在定义方法时,不设置参数的情况下而获得参数的值

这里也特别提示一下PHP语言的传参特性:方法定义是设置的参数为必须要传入的参数,此外可以多传,但是定义了几个参数后,再调用方法时不能少调用,否则会报错。简洁点就是:相对你定义好的参数个数,调用时参数可以多传不能少传

2. 传入数组参数方法

第二个方法属于开发过程中想出来的,就是在某一个参数的传入时利用数组传入多组参数。
例如:

function jointURL($base_url,$platform,$args){
    if(!isset($base_url)){
        return;
    }
    if (isset($platform)) {
        $tmp = $base_url . $platform; 
    }else{
        return;
    }
    if(!isset($args)){
        return $tmp;
    }else{
        foreach ($args as $key => $value){
            $tmp .= "&$key=$value";
        }
    }
    var_dump($tmp);
    return $tmp;
}

这是一个根据补充的参数拼接URL的方法,基础的拼接是是共同的URL和平台的URL拼接,但是有的平台需要添加日期和版本参数,有的只需要添加日期参数,有的只需要添加版本参数,此时就可以将其余的参数列为一个数组信息存入一个数组变量,在jointURL()方法内就可以将$args这个数组参数里的值拼接到URL后面
例如这样传入参数:

$args1 = [
    'date' => '2016-05-30',
    'version' => '1.7.1',
    'channel' => 'baidu'
];
$args2 = [];
jointURL('www.','android',$args1);
jointURL('www.','IOS',$args2);

就会在界面上显示:

string(55) "www.android&date=2016-05-30&version=1.7.1&channel=baidu" 
string(7) "www.IOS"

这样就实现了参数的扩展

其实第二种方法的实现倒是非常简单,但是向方法的参数中传入一个数组参数的这个思想倒是非常受用

相关文章

  • PHP学习笔记--扩展函数参数列表

    开始用PHP后,感觉这个语言越用越爽,丰富的函数支撑,松散的变量与方法定义,强有力的数组和字符串方法,让许多在在其...

  • 八月三十一

    php函数的参数 PHP的函数可以没有参数,也可以有若干个参数,多个参数称之为参数列表,采用逗号进行分割,参数类似...

  • php 可变数量的参数列表(...语法)

    通过...语法,在php中自定义函数时可以实现可变数量的参数列表。 实例1:函数参数使用...语法 将传入的参数包...

  • python高级函数使用

    zip函数 将2个元祖组合成列表 扩展:结合dict函数转换成字典 map函数 map函数接受2个参数,一个参数是...

  • kotlin 类的扩展函数

    类的扩展函数学习笔记###

  • PHP-TSRM线程安全管理器-源码分析

    TSRM 介绍 在查看php源代码或开发php扩展的时候,会出现大量 TSRMLS_ 宏字样在函数参数的位置,这些...

  • 02.11JS变量与作用域

    函数声明语法 function 函数名(参数列表){ 函数体 } 函数变量 = function (参数列表) {...

  • PHP Programming

    PHP编程学习笔记: PHP知识点 PHP 面向对象 XML/SOAP集成 设计模式 性能调试 PEAR 扩展和数...

  • 十月二十三

    PHP的函数可以没有参数,也可以有若干个参数,多个参数称之为参数列表,采用逗号进行分割,参数类似于一个变量,调用时...

  • day10

    匿名函数 1.普通函数: def 函数名(参数列表):函数体 2.匿名函数: 函数名 = lambda 参数列表:...

网友评论

    本文标题:PHP学习笔记--扩展函数参数列表

    本文链接:https://www.haomeiwen.com/subject/vsokdttx.html