课后总结
- 知道了可变函数和匿名函数的概念
- 函数的返回值还可以通过数组,json,和字符串序列化后返回,但是本质上只是一个返回值
- 函数参数可以设置默认值,就是可选参数,可选参数必须写在必选参数后
知道了函数中剩余参数的概念,如果函数的参数非常多,并且不确定个数,可以使用剩余参数的概念。
php示例代码
```php
<?php
// 1.函数类型
//a.自定义函数
// 输入分数后获得分数所在的级别
function level(float $score):string{$level='';
if($score >= 90):
$level = '优秀';
elseif($score >= 80):
$level = '良好';
elseif($score >= 70):
$level = '一般';
elseif($score >= 60):
$level = '合格';
else:
$level = '不合格';
endif;
return $level;//函数中有return是显示返回,return后的语句不执行
echo '哈哈,看不到我';
}
$level = level(95);
echo ‘angle的分数为:’.$level,’<br>‘;//b.系统函数
$date = date(‘Y-m-d H:i:s’);
echo ‘今天的日期为:’,$date,’<br>‘;//c.可变函数
// 函数名称存储在一个变量内,调用时可直接使用变量名称+参数进行调用
$funName = ‘level’;
echo ‘hugn的分数为:’,$funName(88.5),’<br>‘;//d.匿名函数
$name = ‘angle’;
//匿名函数也就闭包,就是创建一个没有固定函数名称的函数,把此函数按表达式一样赋值给变量
$level = function (float $score) use($name):void{//如果想在函数中引用父作用域中的变量,使用use关键字包含后就可使用$level = '';
$name = 'peter';
if($score >= 90):
$level = '优秀';
elseif($score >= 80):
$level = '良好';
elseif($score >= 70):
$level = '一般';
elseif($score >= 60):
$level = '合格';
else:
$level = '不合格';
endif;
echo $name,'的分数为:',$level;//函数中没有return属于隐式返回,遇到“}”后自动返回
};
echo $level(75.5);
echo ‘<hr>‘;
//2.函数返回值
//a.单值返回
function stuInfo():string{$name = 'angle';
return $name; //返回值为一个单值
}
echo ‘学员信息:’,stuInfo(),’<br>‘;
//b.字符串拼接返回
function stuInfo1():string{$name = 'angle';
$sex = 'male';
$age = '32';
$iswork = true;
return $name.$sex.$age.$iswork; //返回值为多个值拼接为一个字符串返回,不推荐,不好处理
}
echo ‘学员信息:’,stuInfo1(),’<br>‘;
//c.数组返回
function stuInfo2():array{$stu =[
'name' => 'angle',//键值对,name为字段名,angle为字段的值
'sex' => 'male',
'age' => 32,
'iswork' => true];
return $stu; //返回值为1个数组
}
$stuinfo = print_r(stuInfo2(),true);//print_r第二个参数为true时,返回一个string字符串
echo ‘学员信息:’,printf(‘<pre>%s</pre>‘,$stuinfo),’<br>‘;//printf为格式化输出%s为字符串占位符
//d.json字符串返回 同样的json返回比数组返回数据量少
function stuInfo3():string{$stu =[
'name' => 'angle',//键值对,name为字段名,angle为字段的值
'sex' => 'male',
'age' => 32,
'iswork' => true];
return json_encode($stu); //返回值为1个json字符串
}
// $stuinfo = print_r(json_decode(stuInfo3()),true);//json_decode()解析json字符串
$stuinfo = print_r(stuInfo3(),true);
echo ‘学员信息:’,printf(‘<pre>%s</pre>‘,$stuinfo),’<br>‘;//printf为格式化输出%s为字符串占位符//e.字符串序列化后返回
function stuInfo4():string{$stu =[
'name' => 'angle',//键值对,name为字段名,angle为字段的值
'sex' => 'male',
'age' => 32,
'iswork' => true];
return serialize($stu);; //返回值为1个序列化后的字符串
}
// $stuinfo = print_r(unserialize(stuInfo4()),true);//unserialize()反序列化字符串
$stuinfo = print_r(stuInfo4(),true);
echo ‘学员信息:’,printf(‘<pre>%s</pre>‘,$stuinfo),’<br>‘;//printf为格式化输出%s为字符串占位符
echo ‘<hr>‘;
//3.函数参数
//a.默认参数传递为值传递
function square(float $val):float{
$val = $val;
return $val;
}
$value = 4;
echo $value,’的平方是:’,square($value),’<br>‘;//函数参数默认是值传递
//b.引用传递
function square1(float &$val):float{//在形参前加‘&’符后变成引用传递
$val = $val;
return $val;
}
$value = 4;
echo $value,’的平方是:’,square1($value);//函数参数默认是值传递
echo ‘value=’,$value,’<br>‘;
//c.默认参数
//iswork为可选参数,可选参数必须写在必选参数的后面
function printStu(string $name,int $age,string $sex,int $iswork = 1)//iswork的默认值为1
{
echo ‘*学员信息**<br>‘;
echo ‘姓名:’,$name,’<br>‘;
echo ‘年龄:’,$age,’<br>‘;
echo ‘性别:’,$sex,’<br>‘;
echo ‘是否在职:’,$iswork ?’在职’:’在校’,’<br>‘;
}
printStu('anlge',32,'女');
printStu('peter',15,'男',0);
//d.剩余参数
//计算全班同学的分数总和
function totalScore(...$score):float//形参中加'...'参数整合,就是把离散的参数值整合到参数列表中
{
$sum = 0;
$num = func_num_args();//func_num_args()返回参数列表中参数的个数
for($i=0;$i<$num;$i++):
$sum+=func_get_arg($i);//func_get_arg($i)返回参数列表中参数的值
endfor;
return $sum;
}
$score = [78,76,86,99,96,97];
$totalSum = totalScore(...$score);//实参中加'...'参数离散,就是把数组中的值打散后传递给函数
echo '班级总分为:',$totalSum,'<br>';
//计算全班同学的平均分,用foreach遍历参数列表
function averScore(...$score):int//形参中加'...'参数整合,就是把离散的参数值整合到参数列表中
{
$sum = 0;
$num = func_num_args();//func_num_args()返回参数列表中参数的个数
foreach(func_get_args() as $value)://func_get_args()返回参数列表中所有参数的值
$sum += $value;
endforeach;
return $sum/$num;
}
$score = [78,76,86,99,96,97];
$averScore = averScore(...$score);//实参中加'...'参数离散,就是把数组中的值打散后传递给函数
echo '班级平均分为:',$averScore,'<br>';
//数组解包
$student[]=[‘001’,’angle’,520.5];
$student[]=[‘002’,’hugn’,556.5];
$student[]=[‘003’,’peter’,523];
$student[]=[‘004’,’Eric’,580];
echo ‘05级学员入学分数<br>‘;
foreach($student as list($id,$name,$score)):
printf(‘编号:%s 姓名:%s 分数:%s <br>‘,$id,$name,$score);
endforeach;
?>
```
- php代码执行效果图