Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:案例不错
使用函数的优越性如下:
提高程序的重用性
提高软件的可维护性
提高软件的开发效率
提高软件的可靠性
控制程序设计的复杂性
在PHP中一个自定义函数基本格式如下:
function 函数名([参数1,参数2,参数3,n]) //函数头
{ //函数开始的花括号
函数体; //任何有效的PHP代码都可以作为函数体使用
return 返回值; //可以从函数中返回一个值
} //函数体结束的花括号
动态生成表格的自定义函数
function table(): string //自定义一个表格函数名 指定返回类型为字符串型
{
$table = '<table border="1" width="600" align="center" style="color:#fff">';
$table .= '<tbody>';
for ($i = 0; $i < 5; $i++) : //行
$table .= "<tr>";
for ($j = 0; $j < 5; $j++) : //列
$bgc = ($j + $i * 5) % 2 === 0 ? 'pink' : 'purple';
$table .= "<td bgcolor='{$bgc}'>" . ($j + $i * 5) . "</td>";
endfor;
$table .= '</tr>';
endfor;
$table .= '</tbody>';
$table .= '</table>';
return $table; //返回结果
}
echo table(); //调用函数
自定义函数的编写时,首先明白自己希望函数做什么,知道这点开始编写 最好从结构开始写
定义函数->是否调用->返回类型->return $**;->内容主体->主体在大包小 的写成一个完整的自定义函数
$parm = ['id' => 1, 'user' => 'root', 'possword' => '', 'role' => 1, 'status' => 1, 'icon' => '', 'level' => '1'];
function checkPwd(array $agrs): array
{
if ($agrs['possword'] === '') : //判断密码是否为空
unset($agrs['possword']); //系统函数销毁possword
endif;
return $agrs;
}
echo '<pre>';
print_r(checkPwd($parm)); //系统函数打印
echo '</pre>';
小结:
系统函数就是php自己库里已有的函数库中的一些函数;
function product(int $a, int $b): int
{
$res = $a * $b;
return $res;
}
function sum(int $a, int $b): int
{
$res = $a + $b;
return $res;
}
$fun='product';
echo $fun(3,3).'<hr>';//9
$fun='sum';
echo $fun(3,3).'<hr>';//6
小结:
如果一个变量名后面有括号,PHP将寻找与该变量值同名的函数,并且尝试执行它。
$sum = function (int $a): int {
$res=0;
for ($i = 1; $i < $a; $i++) :
$res += $i;
endfor;
return $res;
};
echo $sum(100);//4950
小结:
匿名函数:允许零时创建一个没有指定名称的函数。
function strPj(int $i ,int $e):string
{
$income=$i;
$expend=$e;
$sum=$income-$expend;
$info1='今日支出';
$info2='今日收入';
$sum>=0? $info3='今日赚取':$info3='今日亏损';
return $info1.$expend.$info2.$income.$info3.abs($sum).' 还要继续努力哟!'.'<br>';
}
echo strPj(1000,500);
echo strPj(2000,5000);
echo strPj(3000,500);
function arr():array
{
$arr=['user'=>'张三','job'=>'前端开发人员','money'=>10000,'add_time'=>48,'jiangjin'=>5000,'salary'=>15000];
return $arr;
}
$res = print_r(arr(), true);
printf('<pre>%s</pre>', $res);
echo '<hr>';
echo arr()['salary']>12000?'您的工资太高了需要上税':null;
效果图:
function json():string
{
$name = $_POST['username'] ?? null;
if ($name===null) :
$arr = ['code' => 1, 'msg' => '用户名为空', 'data' => ''];
$json=json_encode($arr, JSON_UNESCAPED_UNICODE);
endif;
return $json;
}
echo json();//{"code":1, "msg":"用户名为空","date":""}
function json():string
{
$name = $_POST['username'] ?? null;
if ($name===null) :
$arr = ['code' => 1, 'msg' => '用户名为空', 'data' => ''];
$json=serialize($arr);
endif;
return $json;
}
echo json();//a:3:{s:4:"code";i:1;s:3:"msg";s:15:"用户名为空";s:4:"data";s:0:"";}
$val='今天在家住';
function qinrenjie(string $agr): string
{
return $agr='今天情人节当然去宾馆住呀';
}
echo qinrenjie($val);//今天情人节当然去宾馆住呀
echo '<hr>';
echo $val;//今天在家住
小结:
值传参 因为作用域的关系 $val就变成2个地址 所以值不一样
$val = '今天在家住';
function qinrenjie(string &$agr): string
{
return $agr = '只要身体好天天在家过情人节!';
}
echo qinrenjie($val);//只要身体好天天在家过情人节!
echo '<hr>';
echo $val;//只要身体好天天在家过情人节!
小结:
引用传参用& 的符把他们的地址指向了同一个地址 所以会跟着变化;
$name = '小猪';
$level = 8;
function checkLevel(string $name, int $level = 0): string
{
if ($level === 0) :
$res = '很抱歉,您还不是会员,本店只对会员开放<br>';
elseif ($level > 0 && $level < 8) :
$res = "欢迎您{$name},v{$level}会员,这里是小皮机器人,人工服务请转0<br>";
elseif ($level >= 8) :
$res = "欢迎您{$name},您是亮瞎氪金狗眼的钻石v{$level}会员,客服将第一时间为您服务<br>";
endif;
return $res;
}
echo checkLevel($name); //很抱歉,您还不是会员,本店只对会员开放
echo checkLevel($name, $level);//欢迎您小猪,您是亮瞎氪金狗眼的钻石v8会员,客服将第一时间为您服务
echo checkLevel($name, 4);//欢迎您小猪,v4会员,这里是小皮机器人,人工服务请转0
function fun($name,$age,...$more) {
echo '姓名:'.$name,'<br>';
echo '年龄:'.$age,'<br>';
print_r($more);
echo '<hr>';
}
fun('许先生',24,'php','6000-8000','764210593');