Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:图文结合,完成的不错
函数样式:function 函数名称标识符(参数){函数体,由一条或多条语句组成也可以为空}
函数标识符:必须满足 php 标识符的基本要求,只允许字母,数字或下划线且不允许数字开头
<?php
function sum(int $a, int $b){
return "$a+$b=". ($a+$b);
}
echo sum(10,20);
$str = '零基础开始,能解决常规业务逻辑,PHP操作MySQL增删改查';
// substr用字节获取一个中文有3个字节
echo substr($str, 0, 6),'<hr>';//返回'零基'
// mb_substr:处理多字节
echo mb_substr($str, 0, 6),'<hr>';//返回'零基础开始,'
$s = 'sum';
function sum(int $a, int $b){
return "$a+$b=". ($a+$b);
}
echo $s(10,20),'<hr>';//返回结果10+20=30
$s = function (int $a, int $b){
return "$a+$b=". ($a+$b);
};
echo $s(10,20),'<hr>';//返回结果10+20=30
匿名函数:在 php 中也称为’闭包’可以访问父作用域中的变量
$c = 5;
$s = function (int $a, int $b) use ($c){
return "($a+$b)*$c=". ($a+$b)*$c;
};
echo $s(10,20),'<hr>';
$a = function($c){
$s = function (int $a, int $b) use ($c){
return "($a+$b)*$c=". ($a+$b)*$c;
};
//把$c的值返回给调用者
return $s;
};
echo $a(5)(10,20);
多值返回
function payment()
{
$money = '商品总计为5000';
$rebate = '可以享受9折优惠';
return $money . $rebate;
}
echo payment();
function payment1()
{
$money = '商品总计为5000';
$rebate = '可以享受9折优惠';
return [$money,$rebate];
}
$arr= print_r (payment1(),true);
echo '<pre>'.$arr.'</pre>';
echo '<hr>';
function payment2()
{
$money = '商品总计为5000';
$rebate = '可以享受9折优惠';
return json_encode(['mon'=>$money,'reb'=>$rebate]);
}
echo payment2(),'<br>';
// 还原成对象
$data = json_decode(payment2());
print_r($data);
echo '<hr>';
function payment3()
{
$money = '商品总计为5000';
$rebate = '可以享受9折优惠';
return serialize(['mon'=>$money,'reb'=>$rebate]);
}
echo payment3(),'<br>';
// 用反序列化还原
print_r (unserialize(payment3()));
echo '<hr>';
1.值参数:默认
function sum($a)
{
return $a *= 2;
}
$b = 20;
echo sum($b),'<br>';
echo $b,'<hr>';
function sum1(&$a)
{
return $a *= 2;
}
$b = 20;
echo sum1($b),'<br>';
echo $b,'<hr>';
function sum2($a=10,$b=5,$c = '+')
{
$d=0;
switch($c){
case '+':
$d = "$a+$b=".($a+$b);
break;
case '-':
$d = "$a-$b=".($a-$b);
break;
case '*':
$d = "$a*$b=".($a*$b);
break;
case '/':
$d = "$a/$b=".($a/$b);
break;
default:
$d = '非法字符';
}
return $d;
}
echo sum2(),'<hr>';//没有实参,使用默认参数
echo sum2(5,20,'*'),'<hr>';
echo sum2(30),'<hr>';//实参数量少于形参时从左往右覆盖,没有实参的就使用默认参数
// ...用在函数内部是收集
function sum1(...$arr)
{
// 数组求和
return array_sum($arr);
}
echo sum1(1,2,3,4,5),'<hr>';
// 用在表达式中是展开
$a = [1,2,3,4,5,6,7,8,9];
echo sum1(...$a),'<br>';
$data = range(1,20);
// 使用回调函数
$a = [1,false,3,'',2,0,4,];
$arr = array_map(function($a){
if($a % 2 === 0)return $a;
},$data);
// 过滤空值
function tru($v){
if($v){
return true;
}else{
return false;
}
}
$arrs = array_filter($arr,'tru');
$as = array_filter($a,'tru');
print_r(array_values($arrs));
echo '<hr>';
print_r(array_values($as));
需要使用同名函数时必须创建命名空间
脚本中只要创建了命名空间那么所有php代码必须写在命名空间中
访问必须在全局空间(namespace)中进行访问
function arr(){
}
function arr(){
}
namespace name1{
function arr(){
return 'php中文网';
}
}
namespace name2{
function arr(){
}
}
// namespace是全局(匿名)空间,访问必须这里面访问
namespace{
echo name1\arr();
}
总结
1.了解函数的创建规则
2.函数需要返回多值时应该如何操作
3.对于回调函数还需了解和其使用的场景
4.对于函数的参数了解和熟悉