函数语法
1,自定义函数
// 函数语法
//function 创建一个函数chengfa float为小数
function chengfa(float $a, float $b, float $c) : float
{
return $a * $b + $c;
// 隐式: 结束大括号的时候会自动返回
}
// 函数调用: 按名称
echo chengfa(10.8, 10.1,10);
echo '<hr>';
//自定义函数
// 命名函数yue计算总账户总余额
function yue(float $xianjin, float $yinhangka , $zhifub) : float
{
//隐式 现金+银行卡+支付宝
return $xianjin + $yinhangka + $zhifub;
}
//现金50+银行卡500+支付宝500
echo '账户总余额: ' . yue(50, 500,500);
echo '<hr>';
2.系统函数,系统自带函数 可以直接调用
$str = '系统预制函数,如mb_substr 截取前*位';
// 仅获取前5个字符
echo mb_substr($str, 0, 8);
echo '<hr>';
3.可变函数,将变量的值为函数然后调用
// 将函数名称放到变量里面
$xiaofei = 'yue';
echo '小飞的账户总余额: ' . $xiaofei(8000, 80000,80000);
echo '<hr>';
4.4,匿名函数, 闭包, 可以访问父作用域的变量
// 4. 匿名函数: 闭包, 可以访问父作用域的变量
// 这是个全局函数 代金券
$daijinquan = 500;
//$daijinquan 的作用域是全局 价格 数量 use是访问全局变量
$zongjine = function (float $money, int $num) use ($daijinquan) : float
{
// 当前价格:加钱+数量
$amount = $money * $num;
// 大于=2000元 可以用500元代金券 否则原价
return $amount >= 2000 ? $amount - $daijinquan : $amount;
};
echo '优惠后金额: ' . $zongjine(200, 20) . ' 优惠: '.$daijinquan . '元';
echo '<hr>';
函数多值返回的四种形式
1.字符串拼装
function demo1() : string
{
$yinhangka = 10;
$zhifubao = 100;
$huanhang ='<br>';
return '银行卡余额: '.$yinhangka .$huanhang .'支付宝余额: ' . $zhifubao;
}
echo demo1();
echo '<hr>';
2.通过数组
function zhanghuyu() : array
{
return ['status'=>10, 'message'=>100];
}
$zhanghu = print_r(zhanghuyu(), true);
printf('<pre>%s</pre>', $zhanghu);
echo zhanghuyu()['status'] == 5 ? '<span style="color:green">'.zhanghuyu()['message']. '</span>' : '支付宝余额不足';
echo '<hr>';
3. 通过JSON返回
function yiyouzhang() : string
{
// json_encode(): 将php数据编码为json格式的字符串返回
return json_encode(['status'=>'银行卡', 'message'=>'支付宝']);
}
$data = yiyouzhang();
echo $data;
echo '<hr>';
// 将json格式的字符串还原/解析为php对象/数组
$var = json_decode($data, true);
print_r($var);
echo '<hr>';
4. 通过序列化返回多个值
function yiyouzhan($a,$b)
{
//将要返回的结果装入数组中
$c=['zhanghua'=>$a,'zhanghub'=>$b];
//将数组转换为序列化字符串返回
return serialize($c);
}
//运行函数
$zahnghu= yiyouzhan('银行卡','支付宝');
//显示结果
echo $zahnghu.'<br>';
//将序列化的结果转换为数组
echo '<pre>'. print_r (unserialize($zahnghu),true).'<pre><hr>';
函数的四种参数
1. 值参数, 默认
function qiuhe($a,$b)
{
return $a+$b;
}
echo qiuhe(10,10).'<hr>';
2. 引用传递,调用参数
$c=200;
//将第二个参数设置成引用参数
function qiuhe2($a,&$b)
{
return $b+=$a;
}
//将$c传入到第二个参数
qiuhe2(50,$c);
//显示$c的值,这时$c的值已经改变为250
echo $c.'<hr>';
3. 默认参数
//将$c设置为默认参数初始值为200
function qiuhe3($a,$b,$c=200)
{
return $a+$b+$c;
}
//当qiuhe3的第三个参数未设置时$c的值为200,所以结果为203
echo qiuhe3(1,2).'<br>';
//也可设置默认参数的值,此时$c的值为100,所以结果为103
echo qiuhe3(1,2,100).'<hr>';
4.,剩余参数
//第一种方法
function qiuhe4()
{ //获取传入参数所组成的数组
$arr=func_get_args();
//遍历数组求和
foreach ($arr as $key => $value) {
$result+=$value;
}
//返回参数的总和
return $result;
}
//qiuhe4可以传入任意数量的参数
echo qiuhe4(1,2,3,4,500).'<br>';
//第二种方法
$arr=[1,2,3,4,500];
//'...'将传入的参数打包成数组
function qiuhe5(...$arr)
{
return array_sum($arr);
}
//'...'可以将数组转换为普通格式
echo qiuhe5(...$arr).'<br>';