return
- 中断文件的功能:终止的仅仅是当前return所在的文件,而不是终止整个程序。
- 返回值
- return返回结果,可以是一个变量,所以,同样支持值传递和引用传递两种方法,如果使用引用传递,则在函数名的前面加上一个&
exit()/die()
exit()和die()的功能一模一样,他们就是一个功能的两种叫法。作用是终止程序。
sleep()
sleep后面有一个参数,代表程序延迟多少秒后继续执行。
函数调用时间
代码是先进行解析再执行里面的语句,解析阶段已经预先给function开辟了空间,所以执行阶段调用函数时,可以将调用函数放在函数声明之前。
可变函数
可以用一个变量来存放函数名,需要调用函数的时候,直接调用这个变量
作用:将一堆复杂的函数放在一个可变的数组集合中。
1 | imagecreatefromjpg(); |
匿名函数
没有函数名的函数,称之为匿名函数,匿名函数一般是将他赋值给一个变量,需要加载的时候,直接加载这个变量
作用:调用完成后使用unset快速销毁
1 | $fn = function($name){ |
// 计算不确定个数数字的和。
//方法一
function hs(){
$num=func_num_args();
$sum=0;
for($i=0;$i<$num;$i++){
$sum+=func_get_arg($i);
}
echo $sum;
}
hs(1,3,5,6,7,8,9);
//方法二
function hs2(){
$arr=func_get_args();
$sum=0;
for($i=0,$n=count($arr);$i<$n;$i++){
$sum+=$arr[$i];
}
echo $sum;
}
hs2(1,3,5,6,7,8,9);
1 | >我们可以用func_get_args去同时替代func_get_arg,func_num_args两个函数 |
function hs(){
global $age;
$age++;
unset($age);
}
$age = 27;
hs();
echo $age;
结果:28;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22>虽然global被php大力推广,但是效果很差,程序员还是习惯使用$GLOBALS用法
### 变量的生命周期
全局变量的生命周期,是从**被定义的时候开始,到文件运行完毕**以后,当前文件的全局变量生命周期就会结束。
局部变量的生命周期,是从**函数内部被定义开始,到函数执行完毕**以后,当前函数内的所有变量,生命周期就会结束
**static 静态变量**
static 用来定义一个静态变量
>静态变量只会被初始化一次,之后不会被重新初始化
静态变量的生命周期等同与全局变量的生命周期,但是他的作用域等同于局部变量的作用
以上所说都是正常情况下变量的生命周期,但是,我们同样可以用unset()来提前结束一个变量的生命周期。
### 匿名函数
可以通过对变量的类型进行判断,如果是一个字符串,说明是一个可变函数,如果是一个对象,说明是一个匿名函数
匿名函数的优点
>匿名函数可以随时随地被调用,也可以随时随地被销毁。特别适合一些临时性的函数
**use**
虽然,匿名函数是一个赋值语句,但是里面的变量都是一些局部变量。 我们可以利用use将一个和函数处于同一作用域的变量引用进来
$c = 30;
$fn = function() use($c){
$a = 10;
$b = 20;
echo $a+$b+$c;
}
$fn();
结果:60;1
2
$name = ‘rose’;
function abc(){
$name = ‘jack’;
$fn = function() use($name){
echo $name;
}
$fn();
}
abc();
结果是:jack;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27>作用域并不是一成不变的,一个全局变量,也可能会变成一个局部变量。
use调用函数同样支持值传递和引用传递,如果使用引用传值,在use右边的变量前加上一个&
### 递归函数
递归是属于分治(分,治,合)的算法。迭代也属于分治的算法。
递归函数,就是在一个函数里面继续调用一个函数。
递归函数必须由两个部分组成:
递归点:一个函数继续调用他本身。 如果没有递归点,他就不算一个递归函数。
递归出口:如果一个函数不断地调用他本身,没有出口的话,这个函数会一直运行到空间耗尽或者是时间耗尽的情况才会结束。所以一个函数必须要有递归出口
计算个菲波拉契数列,输出第n项的数字
```php
//计算菲波拉契数列
//用递归实现菲波拉契数列
function fn($n){
//第一项和第二项的结果是1
if($n==1||$n==2){
return 1;
}
//从第三项开始,每一项等于前两项的和
return fn($n-1)+fn($n-2); //递归点
}
echo fn(11);