匿名函数的 use()
匿名函数的作用域和普通函数是一样的,函数内部不能访问函数外部的变量,匿名函数中的use()可以将匿名函数外的变量引入到匿名函数内部。
1
2
3
4
5
6
7 <?php
$num=10;
$fun=function() use ($num){
echo $num;
};
$fun();
?>
输出结果为:10
结论:
use()引入和匿名函数所在同一作用域的变量
use()的传值和传址
默认情况下,use()是传值的。1
2
3
4
5
6
7
8
9<?php
$num=20;
$fun=function() use($num){
$num++;
echo $num,'<br>';
};
$fun();
echo $num;
?>
上述”传值”例子 输出结果为:21 20
1 | <?php |
上述”传地址”例子 输出结果为:21 21
匿名函数的作用
适合建立一个临时函数,用完以后可以销毁,如果一个函数只需要执行一次就可以声明成匿名函数。
1
2
3
4
5
6
7
8
9
10 function myfun(){
$num=20;
$GLOBALS['fun']=function() use($num){
$num++;
echo $num,'<br>';
};
}
myfun();
$fun();//将函数保存在全局变量中科院在外部直接调用。
unset($fun) //销毁函数
输出结果为:21
递归
语法:函数的内部自己调用自己
要素:
- 递归点:递归调用的地方。
- 递归出口:递归调用结束。
案例一:使用递归从1加到1001
2
3
4
5
6function fun($num){
if($num==1)
return 1;//递归出口
return $num+fun($num-1);// 递归点
}
echo fun(100);
案例二:递归:前10个斐波那契数列1
2
3
4
5
6
7
8function cal($n){
if($n==1 || $ n==2)
return 1;
return cal($n-1)+cal($n-2);
}
//前10个斐波那契数列
for($i=1;$i<10;$i++)
echo cal($i),' ';
在递归调用的时候,有时候可能PHP执行的时间不够用,可以通过php.ini配置文件更改php最大执行时间。
函数的代理调用
不直接通过函数名去调用函数,而是通过PHP的内置函数call_user_func_array()来调用函数1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24<?php
function concat() {
$array=func_get_args();
if(empty($array)){
echo '您没有传递参数<br>';
return;
}
$str='';
for($i=0,$n=count($array); $i<$n; $i++) {
$str.=$array[$i];
}
echo $str;
}
//concat(1,2,3);
if(isset($_POST['button'])) {
$str=$_POST['str'];
$array=explode(',',$str);
call_user_func_array('concat',$array); //函数的代理调用
}
?>
<form method="post" action="">
请输入字符,用逗号分隔:<input type="text" name="str">
<input type="submit" name="button" value="连接字符串">
</form>
转载声明
本博客绝大部分文章均来源于互联网,通过本人收集、整理、实践从而形成总结;转载时请注明原链接即可。
特别声明
本人在此发布博文(包括但不限于汉字、拼音、阿拉伯字母 、图片、影像,以及前述之各种任意组合等等)均为随意敲击键盘所出,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能,并不代表本人观点。如需要详查请直接与键盘发明者及生产厂商法人代表联系。