一个函数实参可以有几个?通常下,形参有几个实参就有几个。如果形参中有默认值,那实参的对应项可以省略。
一个函数形参可以有几个,0个、1个、2个……具体多少个,不是语法问题,而是应用问题。
实参的个数,至少应该不少于形参中的没有默认值的形参个数。意思是:实参是可以多于形参的。
看第10行代码,是不会报错的。
是不是定义函数时,比如上面的get_number函数,没有第三个形参,就获取不到第10行的实参6了。答案肯定不是,程序可以通过以下3个函数获取到没有定义相对形参的实参。
func_get_args(); //获得一个函数所接收到的所有实参数据,并结果是一个数组
func_get_arg(n); //获得一个函数所接收到的第n歌实参数据(n从0开始)
func_num_args(); //获得一个函数所接收到的所有实参数据的个数
结果:
楠神就不做具体的示例演示了,像这样方式函数获取外部实参,不能说用不到不实用,只是实际开发用的不多,一旦有类似需求还必须需要这种方式获取实参。三个函数不用死记,知道有这样三个函数,以后有需要查手册。
实参与形参传值问题:
实际上,函数的参数传值问题,跟变量之间的传值问题,是一样的规则(模式):默认都是值传递。
如果实参本身就是“直接数据”,则不存在传值问题,而是简单的“赋值”。
传值问题只发生在实参是变量的情形:
变量与变量之间可以引用传值,那函数的实参与形参也是可以引用传值的。
看第5行代码,变量$b前&符号,意思实参传入的是一个变量的内存地址,函数外部的变量$b与函数内部的变量$b是同一个内存地址,在函数内部被改变,函数外面的也会变。
提前说一句:函数内部的变量与函数外部的变量虽然名字是一样的,但它俩是完全独立的两个变量,如果没有引用传值,不相互影响的,这属于变量作用域知识,下节讲到。
所以,函数内外的变量$a就是完全独立的两个变量,它们是普通的传值赋值,在函数内部变量$a被赋值不影响外部的变量$a。但$b就不一样了,它们是引用传值,内存地址是一样的,外部的$b就会被内部的$b影响。
注意:如果某个形参设定为引用传递,此时,实参只能使用变量,否则出现语法错误。
楠神在学C语言时发现往函数传参会需要引用传值,C语言的特性吧,不然函数外部的变量不能获取函数里的字符串等一些数据。PHP这么智能,最好是函数的数据依靠return直接返回。不要因为传进去一个实参,被函数改变了,影响下面的逻辑运行。