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

开始用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()方法是获得函数参数列表的参数个数,返回一个整形数值。
举个栗子:

";
    if($num>=2){
        echo "第二个参数是:".func_get_arg(1)."
"; } $arg_list = func_get_args(); for ($i = 0; $i < $num; $i++) { echo "Argument $i is: " . $arg_list[$i] . "
"; } } 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学习笔记--扩展函数参数列表)