入门 - 函数参数

  • 作者:KK

  • 发表日期:2016.9.1


前面的起步 - 函数只是简单快速地讲了一下函数参数,这里做一些其它知识的补充说明


定义参数默认值

可以实现如果某个参数不传进来,那这个参数就默认为某个值这样

function add($a, $b = 9){
	return $a + $b;
}

echo add(5); //14   没有传b,于是默认5+9了
echo add(5, 15); //20
  • 默认值参数必须排后面

    这样定义是不行的:

    function add($a = 11, $b, $c = 8989){}
    

    这里说第1和第3个是默认参数,可是第2个没有默认值,是必传参数,那你让人家调用的时候只想传第2个参数的话怎么写好呢?如果写成add(, 77)这样表示跳过第1个参数不传,只传第2个参数逻辑上是可以,可是PHP不支持这样的语法哦呵呵,所以要这样定义才正确:

    function add($b, $a = 11, $c = 8989){}
    

  • 默认值可以有计算表达式

    function add($b, $a = 11 + 99){}
    

    但不能和变量进行计算,只能和常量做计算

    define('AGE', 18);
    function add($b, $a = 11 + AGE){} //对的
    	
    function add2($b, $a = 11 + $_POST['age']){} //错的
    

调用传递的参数可以比声明的参数多

function add($a, $b){
	return $a + $b;
}

echo add(111, 222, 333);

传了第3个参数 333,但函数没有定义第3个参数,PHP不会报错


无限参数

可以先了解一下array_merge这个函数,试想自己设计一个同样的函数来实现数组合并,你会怎么设计array_merge的参数表?

如果你的函数声明是function array_merge($arr1, $arr2, $arr3)的话,人家要合并4个数组时怎么办呢?你又不处理第4个参数是吧

其实可以用func_get_args函数获取传进来的所有参数:

function add($a, $b){
	//print_r(func_get_args());
	$args = func_get_args();
	$result = 0;
	foreach($args as $arg){
		$result += $arg;
	}
	return $result;
}

echo add(111, 222, 333);

这样就传多少个参数就加多少个参数了,由于使用了func_get_args来获取参数,不看参数表的了,那其实参数表意义并不是很大,所以完全可以这样来写这个函数:

function add(){
	//print_r(func_get_args());
	$args = func_get_args();
	$result = 0;
	foreach($args as $arg){
		$result += $arg;
	}
	return $result;
}

还有func_num_argsfunc_get_arg两个函数也是处理函数参数相关的,通常这些东西都在底层封装时用得多,平时写代码用得比较少