php -r ‘function a($a){ echo $a;} a(1,2,3);’
不会报错,因为php允许传参数比声明的多
定义参数默认值
可以实现如果某个参数不传进来,那这个参数就默认为某个值这样
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_args和func_get_arg两个函数也是处理函数参数相关的