摘要:一 函数分为哪几类? 1. 普通函数:标准函数 使用function 在全局中声明的如下function demo(){ ..... } 2.匿名函数:将函数定义以值的方式赋值给一个变量,常用作闭包或者回调如下 &n
一 函数分为哪几类?
1. 普通函数:标准函数 使用function 在全局中声明的如下
function demo(){
.....
} 2.匿名函数:将函数定义以值的方式赋值给一个变量,常用作闭包或者回调如下
$demo = function(){
.....
} 3.自调用函数:定义与执行同步完成如下 ps: php7以上才可以
(function(){
.....
})();二.函数参数分哪几类?
1.必须参数:调用函数是必须传入参数,且顺序必须相同如:
function demo1($a,$b) //形式参数 不要赋值
{
return ($a+$b);
}
echo demo1(15,20),"<hr>";` //35 2.可选参数:可选参数必须与参数的默认值配合使用
function demo2($a,$b=30) //形式参数 给个默认值 注意 如果有多个参数,有默认值的参数要写到参数列表的后面
{
return ($a+$b);
}
//调用 先写必选参数 在写可选参数
echo demo2(20),"<hr>"; //20+b的默认值30 ===>20+30 3.无参数:通过系统函数来获取参数,其实参数本质就是一个占位符如:
function demo3()
{
//函数来获取参数列表
$a = func_get_arg(0); //100
$b = func_get_arg(1); //40
$num = func_num_args(); //获取参数个数
$res = print_r(func_get_args(),true); //func_get_args() 获取所有参数 返回一个数组
// return '当前函数的参数数量'.$num.'个'; //5
return '<pre>当前函数的参数有:'.$res.'</pre>'; //格式化输出参数
// return ($a+$b); //140
}
//调用
echo demo3(100,40,123,'asd zcz ','啊啊啊'),"<hr>";三.回调函数: 简单的说,就是在一个函数中调用另一个函数
1.普通函数当做参数传入另一个函数中如下
function bigger($a,$b)
{
//将较大的值返回
return "$a 和 $b 中,较大的一方是".(($a>$b) ? $a : $b);
}
//创建另一个函数main()
function main($bigger) //参数可以是一个函数
{
//这就叫回调,函数注入
return $bigger(100,88);
}
//调用 将普通函数bigger名称 传入
echo main('bigger'); 2.将匿名函数注入到函数中
$bigger = function ($a,$b)
{
//将较大的值返回
return "$a 和 $b 中,较大的一方是".(($a>$b) ? $a : $b);
};
echo "<br>";
function main1($bigger)
{
return $bigger(200,25);
}
echo main1($bigger),'<hr>'; 3.php还内置了两个函数:用来执行回调函数 call_user_func(),call_user_func_array() 如下 他的功能不仅限于函数,和函数功能类似的成员都可以使用 对象 类中方法.....
echo call_user_func('bigger',200,500); //将参数以字符串的形式传入
echo '<hr>';
echo call_user_func($bigger,552,1000); //将参数以字符串的形式传入
echo '<hr>';
echo call_user_func_array($bigger,[30,27]); //将参数以数组的形式传入
echo '<hr>';
-----------------------------------------------------------------
class Demo
{
public static function getMethod()
{
return '方法是:'.__METHOD__;
}
}
echo call_user_func(['Demo','getMethod']);
echo '<hr>';
echo call_user_func('Demo::getMethod');
echo '<hr>';
echo Demo::getMethod();四. 匿名函数和闭包
1.在函数中调用一个匿名函数时会产生闭包
2.当匿名函数当做一个函数参数传递给函数时会产生闭包
3.当匿名函数当做函数返回值的时候 也就是一个函数返回一个匿名函数就会产生闭包
//匿名函数也有自己的作用域
$belle = '三叔';
$demo2 = function ($name) //通过传参来使用外部变量
{
return $name .'最爱的人是:陈文锦';
};
echo $demo1($belle),'<hr>';匿名函数还可以用use关键字来访问参数列表外的数据如下
$man = '四叔';
$demo3 = function ($name) use ($man) //匿名函数可以用use关键字来访问参数列表外的数据
{
return $name .'最爱的人是:'.$man;
};
echo $demo3('陈文锦'),'<hr>';匿名函数就是一个普通的变量 ,变量的三个使用场景 1.局部变量,2.函数的参数,3.当做函数的返回值 那么匿名函数也可以使用在这三个使用场景
1.匿名函数当做局部变量来使用
$func1 = function (){
$man = '张三丰';
//在函数中声明一个匿名函数
$test = function () use ($man){ //声明局部变量 值为一个匿名函数
return $man. ',我被一个函数包住了,快来救我';
};
//调用,必须执行一下,才能形成闭包
return $test();
}; 2.将匿名函数当做函数的参数来使用
$man = '张三丰';
$test = function () use ($man){ // 声明一个变量值为一个匿名函数(闭包)
return $man. ',师傅,我被当做参数了!!!!';
};
$func2 = function (callable $func){ //将匿名函数传入函数中
return $func(); //调用
};
echo $func2($test),'<hr>'; 3.将匿名函数当做函数返回值来使用
$func3 = function (){
$man = '张三丰';
//在函数中声明一个匿名函数
$test = function () use ($man){ //声明一个值为匿名函数的变量
return $man. ',我被当做返回值了!!!';
};
//当做返回值 返回匿名函数的定义
return $test;
};
//$func3() 返回值是一个匿名函数的定义 :$test
echo $func3()(),'<hr>'; //执行所以闭包的两个生成条件:
1.必须先定义一个匿名函数
2.必须要执行一次匿名函数来生成闭包函数
批改老师:查无此人批改时间:2018-11-19 15:21:15
老师总结:嗯,你说的对,我就不说什么了。少年继续加油