Correction status:Uncorrected
Teacher's comments:
函数定义
function 函数名(参数1,参数2,…){
//函数体
//return
}
返回值
PHP 中提供了 return 语句来返回函数的运行结果,其语法格式如下: return 返回值; 可以返回包括数组和对象的任意类型。返回语句会立即中止函数的运行,并且将控制权交回调用该函数的代码行。
返回单个值
function square($num)
{
return $num * 2;
}
echo square(2),'<br>'; //输出 4.
函数不能返回多个值,但可以通过返回一个数组来得到类似的效果
// 返回数组
function numbers()
{
return array(1, 2, 3);
}
var_dump(numbers()); //输出 array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }.
返回json字符串
// 返回json字符串
function jsons()
{
return json_encode(array('code'=>1,'msg'=>'登陆成功'),JSON_UNESCAPED_UNICODE);
}
var_dump(jsons()); //输出 string(31) "{"code":1,"msg":"登陆成功"}".
返回序列化
function selizes()
{
return serialize(array('code'=>1,'msg'=>'登陆成功'));
}
var_dump(selizes()); //输出 string(51) "a:2:{s:4:"code";i:1;s:3:"msg";s:12:"登陆成功";}".
返回函数
function funs()
{
return function (){};
}
var_dump(funs()); //输出 object(Closure)#1 (0) { }.
参数
函数的参数有形式参数和实际参数
1、函数的参数默认是值传递
2、如果要传递地址,在参数前面加&
3、如果是地址传递,不能直接写值
参数个数不匹配
1、实参少于形参(报错)
2、实参多于形参,只取前面对应的值
3、func_num_args() //获取参数的个数
4、func_get_args() //获取参数数组
参数默认值
1、在定义函数的时候给形参赋值就是参数的默认值
2、默认值必须是值,不能用变量代替
3、默认值可以使用常量
4、有默认值的写在后面,没有默认值的写在前面
function sum($a, $b, $c=10)
{
return $a + $b + $c;
}
echo sum(1,2,20); // 输出 23
echo sum(1, 2); //输出 13 c使用了默认值10
echo sum(1, 2, 30, 40); //输出 33 不报错
定义变长参数...$参数
当使用变长参数时,可使用…$arry展开数组
function sum(...$numbers) {
$acc = 0;
foreach ($numbers as $n) {
$acc += $n;
}
return $acc;
}
echo sum(1, 2, 3, 4); //输出 10
参数约束(7.0后)
类型约束
//约束$name是字符串型,$age是整型
function fun(string $name,int $age) {
echo "姓名:{$name},年龄:{$age}";
}
fun('tom',22); //输出姓名:tom,年龄:22
返回值约束
function fun(int $num1,int $num2):int { //必须返回整型
return $num1+$num2;
}
echo fun(10,20); //输出 30
2. 回调函数,匿名函数
回调函数
回调函数就是一个作为函数的参数来传递的函数. 回调函数在主线程执行的过程中,突然跳去执行设置的回调函数,回调函数执行结束后, 再回到主线程处理接下来的流程
php提供了两个内置函数call_user_func()和call_user_func_array()提供对回调函数的支持.
call_user_func()call_user_func($callback,参数1,参数2,…)的参数个数根据回调函数的参数来确定的。
// 自定义一个匿名函数
$sum = function ($a, $b) {
return $a + $b;
};
echo call_user_func($sum,2,4); //输出 6
call_user_func_array()call_user_func_array ($callback ,$param_arr),它只有两个参数。是以数组的形式接收回调函数的参数
// 自定义函数
$sum = function (...$arr) {
$total = 0;
foreach ($arr as $v) {
$total += $v;
}
return $total;
};
echo call_user_func_array($sum, array(1,2,3,4,5)); //输出 15
匿名函数
匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数 callable参数的值。
// 匿名函数
$greet = function($name)
{
printf("Hello %s\r\n", $name);
};
$greet('World'); //输出 Hello World
$greet('PHP'); //输出 Hello PHP
匿名函数可以用 use 语言结构从父作用域中继承变量。
$play = '吃过了么';
$greet = function($name) use ($play)
{
printf("Hello %s,%s\r\n", $name, $play);
};
echo $greet('张三'); //输出 Hello 张三,吃过了么