作业:
练习使用剩余参数,实现不定参数的乘积
【1】PHP自定义函数
可以通过自定义函数的方法来实现特定的功能,通过函数可以实现代码复用和结构化编程。
通常,函数的声明格式为:function 函数名称(函数形参){ 函数体 }
函数通过被调用来执行:函数名(实参);
【2】可变个数参数的函数
PHP 在自定义函数中支持可变数量的参数列表,仅适用于实参数量很多或数量不确定的场景。
如果希望在函数中接受任意数量的参数,则需要在函数中使用PHP系统函数:func_get_args(),它可以把传入的所有实参当作一个数组返回;
PHP5.6以后,在声明函数形参时可以使用“...”运算符,从而实现变长参数函数。
【3】一个实现不定参数乘积的实例:
实例 <?php function muti_product($a, $b, ...$c) { return $a * $b * array_product($c); } echo muti_product(1, 2, 6, 3, 4, 5); ?> 运行实例 » 点击 "运行实例" 按钮查看在线实例
上例中:$a=1,$b=2,则剩余的所有参数全部作为数组赋值给$c,
【4】总结:
经过自己折腾后发现:这种函数在实际应用中需谨慎使用,搞不好就给自己挖了坑。
PHP默认是弱类型模式,传入的实参可以是任意类型数据,意外的强制转换可能会产生不可预见的结果;如果感觉输入不可控,可以设置为严格模式+错误处理的函数来实现。
自由度太高,一定要确保输入的格式可以产生正确的结果。
比如:这样输入参数echo muti_product(1, 2, [6, 3, 4, 5]); 会计算出错误的结果:2
可以这样输入:echo muti_product(1, 2, ...[6, 3, 4, 5]);
也可以使用一个数组变量$x = [6,3,4,5];echo muti_product(1, 2, ...$x);
甚至这种输入也可以获得正确的结果:echo muti_product(1, 2, 6, ...[3, 4, 5]);...运算符的作用:简化了对传入参数的处理,它把所有 / 或者是剩余(有声明对应关系 或者 未声明对应关系)的数据全部放入一个实际的数组中,从而方便处理。所以当一个函数参数比较多时,可以不用逐一传递,只需传递一个数组,数组中的成员就展开为函数的参数了。