含义
函数是一种代码形式。
函数就是一个具有特定功能的代码片段。
定义
说明:
1,函数名的命名规则,跟变量名一样;
2 , 函数名不区分大小写;
3,定义函数的目的就是为了以后能够调用(代码复用);
4,调用函数,其实就是执行函数中代码;
5 , 形参,其实就是变量,是只能在该函数内部使用的变量;
6, 实参,其实就是数据,是会传入函数内部的数据(是一一对应地赋值给形参变量)
函数的执行原理
程序总是运行在一个“内存空间”。
程序开始执行的位置所在的空间,可以称之为“主运行空间”。
实际上,通常函数外面的那些程序,都是运行在主空间中。
那么,函数的运行,就相对独立了——每个函数的每次调用,都是运行在单独的一个自己的空间中(开辟栈空间)。
提示:
在从主空间进入函数空间的时刻,会先将函数调用时的“实参数据”,赋值(传值)给“形参变量”
而后,才开始执行函数内部的语句!
函数的参数
形参
就是定义函数的时候,在函数名后的小括号中给出的变量名。
形参,只能在函数内部使用——即该变量的使用范围仅仅局限于当前函数内部。
形参的本质是变量!
实参
就是调用函数的时候,在函数名后的小括号中给出的数据值,传递给形参的值。
实参的本质是数据!
函数参数的传值方式
含义:实参变量的值,以什么方式传给形参。
说明:
其前提是:实参是一个变量的情况。
所以其实这里讨论的是:两个变量的传值方式问题。
默认情况下是值传递。
可以使用“&”符号设定为引用传递,形式如下:
function f1( $p1, &$p2, .... ){
。。。。。
}
此时,在函数内部,对该形参变量改变其值,则对应的实参变量(在函数外部)的值也改变了。
形参的默认值
形参可以设定默认值。形式为:$形参名 = 某值。
设定默认值的形参,只能放在没有设定默认值的形参的后面(右边)。
设定了默认值的形参对应的实参可以不提供数据,此时函数就会使用该默认值当做实参的值。
function f1($p1, $p2, $p3 = 3, $p4 =true ){
//函数体语句块
}
则此时调用上述函数,以下形式都可以:
f1(1,2);
f1(3, 4, 5);
f1(6,7,8, 9);
函数的返回值
一个函数在执行结束时,可以让其返回一个数据,这就是函数的返回值。
语法:
return 要返回的数据;
说明:
1,一般情况下一个函数执行结束都是需要返回一个数据值的。
2,函数也可以在执行的中途返回数据,此时,函数也是结束了的。
3,一个函数执行得到的返回值,可以在任何需要数据的场合使用,跟使用一个变量数据一样。
结论:只要执行到return语句,函数就会结束,是否返回数据,看该行代码。
可变函数
函数名是一个变量。(这个变量的值是一个函数名)。
可变函数实际上就是在调用函数的时候,使用一个变量来表示函数名,并用该变量去调用函数。
注意:定义函数的时候,不可以使用可变函数名!
对比:
可变变量,就是变量名是一个变量,比如:$$v1;
可变函数,就是函数名是一个变量,比如:
调用函数f1的语法是这样:f1();
可以使用可变函数的语法来调用: $func_name = “f1”; $func_name(); //此时实际就是调用f1
可变函数的本质是:一个变量的内容是一个字符串,该字符串是一个函数的名字,比如:
function f1(){ ....... }
function f2(){ ....... }
$f = “f1”;
$f(); //调用了函数f1,这就是可变函数!!
$f = “f2”;
$f(); //调用了函数f2,这就是可变函数!!
$f = “f3”;
$f(); //报错!因为没有f3这个函数,实际是,就是相当于: f3();
匿名函数
就是一个“定义时没有名字”的函数。
此时,就面临一个问题,那就是:没有名字,怎么调用呢?
实际上,此时它通过另一个方式来调用,如下所示:
$f1 = function (形参...) { ....... }; //这是定义匿名函数的形式。
$f1(实参); //这就是调用该调用。可见其调用,跟可变函数的写法非常类似。
匿名函数通常被用作函数的参数。