1. 函数类型
序号 |
类型 |
语法 |
描述 |
1 |
自定义函数 |
function getName(){...} |
用户根据业务需求创建 |
2 |
系统函数 |
substr(), count()... |
也叫预定义函数,不必声明直接调用 |
3 |
可变函数 |
$funcName(); |
函数名使用变量表示 |
4 |
匿名函数 |
$f = function (){...} |
也叫”闭包”或”函数表达式”,常用做回调处理 |
案例
<?php
// 函数
// 1. 自定义函数
function totalCost($unitcost,$number)
{
return $unitcost*$number;
}
echo '合计金额:'.totalCost(12,10);
echo '<hr>';
// 2. 系统函数
echo implode (' ', ['我爱我的祖国','一刻也不能分割']);
echo '<hr>';
// 3. 可变函数
$money = 'totalCost';
echo '3斤菜心的合计金额:'.$money(4.5,3);
echo '<hr>';
// 4. 匿名函数
$money=function($discount)
{
return function ($unicost,$number)use($discount):float
{
$total = $unicost*$number;
return $total >= 100 ? $total * $discount:$total;
};
};
echo '10斤以上团购价:'.$money(0.9)(12,20).' 原价:'.$money(1)(12,20)
;
运行结果
3. 返回值
序号 |
场景 |
描述 |
1 |
return |
可以返回任何类型的值,包括函数类型 |
2 |
无return |
遇到} 也会返回, 默认返回null |
序号 |
返回值类型 |
描述 |
1 |
string |
字符串拼接 |
2 |
array |
数组 |
3 |
json |
JSON 字符串 |
4 |
serialize |
序列化字符串 |
json 和序列化,使用时需要进行解码操作
案例
<?php
// 返回值
// 原则: 单值返回
// 如果需要返回多值
// 1. 字符串拼装
// 2. 数组
// 3. JSON字符串
// 4. 序列化: 字符串
// 1. 字符串拼装
function example1():string{
$who = '我';
$how = '用政府发的消费券';
$what = '买电视机';
return $who.$how.$what.'。';
}
echo example1();
echo '<hr>';
// 2. 数组
function example2():array{
return ['who'=>'我','how'=>'用政府消费券','what'=>'买电视机。'];
}
// echo example2();
$res = print_r(example2(),true);
printf('<pre>%s</pre>',$res);
echo '<hr>';
// 3. JSON字符串
function example3():string{
return json_encode(['who'=>'我','how'=>'用政府消费券','what'=>'买电视机。']);
}
echo example3();
echo '<br>';
$data = example3();
// 将json格式的字符串还原/解析为php对象/数组
$var = json_decode($data, true);
print_r($var);
echo '<hr>';
// 4. 序列化: 字符串
function example4():string{
return serialize(['who'=>'我','how'=>'用政府消费券','what'=>'买电视机。']);
}
echo example4();
echo '<br>';
$unser = unserialize(example4());
print_r($unser);
echo '<br>';
printf('<pre>%s</pre>',print_r($unser,true));
echo '<hr>';
运行结果
4. 参数
- 调用者可以通过参数将数据传递到函数中
- 参数是以逗号分隔的表达式列表
- 参数按照从左到右的顺序求值
参数类型
序号 |
类型 |
描述 |
1 |
值参数 |
默认传参方式 |
2 |
引用参数 |
改变原始调用参数值 |
3 |
默认参数 |
调用时允许省略的参数 |
4 |
剩余参数 |
调用参数数量不确定 |
<?php
// 函数参数
// 1. 值参数
// 2. 引用参数
// 3. 默认参数
// 4. 剩余参数
// 1. 值参数, 默认
function example1(float $sum):float{
return $sum += 1;
}
$var = 9;
echo '$sum = '.example1($var);
echo '<br>';
// 在函数中改变了调用参数的值,但原始调用参数并没有发生变化
echo '$var = '.$var;
echo '<hr>';
// 2. 引用参数
// 如果在参数前面使用了取地址符:&
function example2(float &$sum):float{
return $sum += 1;
}
$var = 10;
echo '$sum = '.example2($var);
echo '<br>';
// 则会改变原始调用参数的值
echo '$var = '.$var;
echo '<hr>';
// 3. 默认参数
function cal(int $a,int $b,string $opt='+'){
$res = 0;
switch ($opt)
{
case '+':
$res = "$a + $b = ".($a+$b);
break;
case '-':
$res = "$a - $b = ".($a-$b);
break;
case '*' :
$res= "$a * $b = ".($a*$b);
break;
case '/':
$res = "$a / $b = ".($a/$b);
break;
default:
$res = '非法操作符!!!';
}
return $res;
}
echo cal(50,20);
echo '<br>';
echo cal(50,20,'-');
echo '<br>';
echo cal(50,20,'*');
echo '<br>';
echo cal(50,20,'/');
echo '<br>';
echo cal(50,20,'$');
echo '<hr>';
// 4. 剩余参数
// (1) 用在函数的形式参数列表中,表示"收集",将多个离散的参数打包到一个数组中处理
function sums(...$arrs):float
{
return array_sum($arrs);
// return array_product($arrs);
}
$arr=[1,2,3,4,5,6,7,8,9];
// (2) 用在函数的调用参数列表中,表示"展开",还原将一个数组展开成一个个离散的值
echo sums(...$arr);
运行结果
总结:
php的函数是一个重要的基础知识,和变量一样是个重要的概念,我通过再看一遍老师的课堂笔记和视频讲课,自己再输入代码一遍,才有点印象,不容易啊。继续加油!