1 2 3 4 5 6 7 8 9 10 11 12 13 |
/* 可变函数 可变函数:当前有一个变量所保存到值,刚好是一个函数的名字,那么就可以使用 变量+();来充当函数名使用 $变量 = 'displ'; function display(){ //函数体 } //可变函数使用 $变量(); */ |
1 2 3 4 5 6 7 8 9 10 11 |
//定义函数 function display(){ echo '行数:',__LINE__,';函数名:',__FUNCTION__; } //定义变量 $fun = 'display'; //可变函数 $fun(); echo '<hr/>'; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//定义系统函数(假设) function sys_function($arg1,$arg2){ //给指定的函数(第一参数),求对应的第二参数值的4次方 //为实际用户输入的数值进行处理 //将一个用户定义的函数传入给另外一个函数(函数名)去使用的过程,称之为回调过程,而被闯入的函数称之为回调函数。 $arg2 = $arg2 + 10; return $arg1($arg2); } //定义一个用户函数:求一个数的4次方 function user_function($num){ return $num * $num * $num * $num; } //求10的4次方 echo sys_function('user_function', 10); |
1 2 3 4 5 6 7 8 9 10 11 |
/* 匿名函数 基本概念 匿名函数:没有名字的函数 基本语法: 变量名 = function(){ //函数体 }; */ |
1 2 3 4 5 6 7 8 9 10 11 |
//定义基本匿名函数 $niming = function(){ //函数体 echo 'hell world'; }; //调用匿名函数 $niming(); |
1 2 3 4 5 6 7 8 9 10 11 12 |
/* 变量保存匿名函数,本质得到的是一个对象(cosure) 闭包:Closure,一次来源于一下两者的结合: - 要执行的代码块:由于自由变量被包含在代码块中,这写自由变量一级它们的对象没有被释放 - 作用域:自由变量提供绑定的计算机环境 简单理解: 函数内部有一些局部变量(要执行的代码块)在函数执行之后没有被释放,是因为在函数内部还有对应的函数在引用(匿名的内部函数:匿名函数) */ |
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 28 |
//闭包函数 function bibao(){ //函数体 $name = '行数:'.__LINE__; //定义匿名函数 $niming = function() use($name){ //use()就是将外部变量(局部)保留给内部使用 //匿名函数 函数体 //echo '函数名:',__FUNCTION__; echo $name; }; //使用匿名函数需要在}后面加上;分号 //调用函数 $niming(); return $niming; //返回给外部使用 } //调用函数 $fanhui = bibao(); echo '<hr/>'; /* 证明:函数的局部变量再函数使用完之后没有被释放? 1、使用内部匿名函数; 2、匿名函数使用句变量:use; 3、匿名函数被返回给外部使用; */ $fanhui(); //因为上面返回匿名函数到 $fanhui 所以可以直接使用新变量调用 |