函数的参数分为两种:形参和实参
形参:形式参数,不具有实际意义的参数,是在函数声明定义时使用的参数 实参:实际参数,具有实际数据意义的参数,是在函数调用时使用的参数
形参是实参的载体 实参在调用时通常是需要传入到函数内部参与计算(运算),将数据以实参的形式传递给形参,给形参赋值,从而函数内部可以用到外部数据。
说明: 1、形参可以有多个,使用逗号分隔即可 2、传入的实参,可以是变量或者其他有值的表达式(常量、变量、运算符计算结果)
function add($arg1,$arg2) { echo $arg1 + $arg2; } $num1 = 10; add($num1,20); //编译结果:30运行原理: 1、系统调用add函数:去内存中寻找是否有add函数:有 2、系统会在栈区开辟内存空间运行函数add 3、系统会查看函数本身是否有形参:有,两个 4、系统会判断调用的时候是否有实参:有,两个 5、系统默认会将实参的值$num1,20取出顺序赋值给形参:$arg1和$arg2 6、执行函数体:运行 7、返回函数执行(返回值)
注意事项: 1、在php中允许实参个数多于形参个数:多余部分函数内部不用而已 2、在php中理论上形参个数没有限制(实际开发不会太多) 3、实参不能少于形参个数
默认值 默认值:(default value)指的是形参的默认值,在函数定义的时候,就给形参进行了一个初始赋值,如果实际调用传入的参数(实参)没有提供,那么形参就会使用定义时的值来进入函数内部参与运算
示例如下:
<?php $num1 = 10; function add($num1 = 0,$num2 = 0) { echo $num1+$num2; } add($num1); //编译结果:10 ?>注意事项: 1、默认值的定义一般放在最右边的,不能左边形参有默认值,但是右边没有(这样方便调用,以防默认值被覆盖造成数据错误) 2、函数调用时值按顺序传入,如果函数定义时存在默认值,可以不用传入,
函数的传址调用 实参在调用时会将值赋值给形参,那么实际上使用的方式就是一种简单的值传递(函数默认值传递),形参与外部实际传入的参数本身没有任何关联关系,只是结果一样,有的时候,希望在函数内部拿到外部数据能够在函数内部改变,那么在定义时就需要明确告知函数,函数才会在调用的时候去主动获取外部数据的内存地址(在新开栈区内传入实参的地址,同时传入实参的值),以上这种定义形式叫做函数传地址调用(传地址调用形参使用&变量名)
示例如下:
<?php function display($a,&$b) //编译结果:50 { // 25 $a = $a * $b; // 10 $b = $b * $b; // 25 echo $a."\n".$b."\n"; } $a = 10; $b = 5; display($a,$b); //错误调用示例:display(10,5); echo $a."\n".$b; ?>说明:函数在定义的时候,对应的b形参采用的是取地址:所以在实参传入之后,系统b取到了外部变量b的内存地址,而a取的是值,因此改变之后a只改变了函数内部自己,b改变自己的同时也改变了外部
函数传址调用注意事项:在调用的时候,必须给引用传值的参数位置传入实际参数,而且参数本身必须是变量(变量才有指向数据的内存地址而不是单纯的数字)