函数
1.函数的表示方式
function 函数名称(类型: 参数列表): 返回值类型
{
// 函数体
return 返回值;
}
2. 函数的类型
序号 | 类型 | 语法 | 描述 |
---|---|---|---|
1 | 自定义函数 | function getName(){...} |
用户根据业务需求创建 |
2 | 系统函数 | substr(), count()... |
也叫预定义函数,不必声明直接调用 |
3 | 可变函数 | $funcName(); |
函数名使用变量表示 |
4 | 匿名函数 | $f = function (){...} |
也叫”闭包”或”函数表达式”,常用做回调处理 |
代码示例
<?php
//自定义函数
//BMI计算器
function bmi($weight,$height):float
{
return $weight/($height**2);
}
//单位为kg/m
echo '您的身体健康指数为'.bmi(60,1.75).'<br>';
//系统函数
$str='今天晚上讲的是php第四章';
echo mb_substr($str,0,6).'<br>';//取出str字符串前6个字符,第一位从0开始
$arr=['php','html','js','css'];
echo '<pre>'.var_export(array_slice($arr,1,3),true).'<br>';//从数组第2位开始取3位
//可变函数
$a='bmi';
echo $a(70,1.6).'<br>';//用可变函数调用BMI计算器
//匿名函数
//BMI计算器加上身高体重单位转换,假设转换单位为:斤=》公斤 cm=》m
$arr1=[2,100];
$result=function ($weight,$height)use($arr1){
return ($weight/$arr1[0])/(($height/$arr1[1])**2);
};
echo $result(120,175),'<br>';
//改写为父作用域为函数
$bmi_pro=function (array $arr){
return function ($weight,$height)use($arr){
return ($weight/$arr[0])/(($height/$arr[1])**2);
};
}
echo $bmi_Pro([2,100])(120,175);
3. 返回值
- 函数必须要有返回值
- 函数必须是遵守单值返回原则
序号 | 场景 | 描述 |
---|---|---|
1 | return |
可以返回任何类型的值,包括函数类型 |
2 | 无return |
遇到} 也会返回, 默认返回null |
- 如果需要返回多个值,可以通过以下手段
序号 | 返回值类型 | 描述 |
---|---|---|
1 | string |
字符串拼接 |
2 | array |
数组 |
3 | json |
JSON 字符串 |
4 | serialize |
序列化字符串 |
json 和序列化,使用时需要进行解码操作
代码示例
<?php
//拼接字符串
function body():string{
$height=175;
$weight=60;
return '身高为'.$height.'cm,体重为'.$weight.'g<br>';
};
echo body();
//转化为数组
function body_1() : array{
$arr=[
'height'=>175,
'weight'=>60];
return $arr;
};
echo '身高为'.body_1()['height'].'cm,体重为'.body_1()['weight'].'g<br>';
//json
function body_2():string{
return json_encode(['height'=>175,'weight'=>60]);
}
echo var_export(json_decode(body_2()),true).'<br>';
//序列化
function body_3():string{
return serialize(['height'=>175,'weight'=>60]);
}
echo var_export(unserialize(body_3()),true);
4. 参数
- 调用者可以通过参数将数据传递到函数中
- 参数是以逗号分隔的表达式列表
- 参数按照从左到右的顺序求值
参数类型
序号 | 类型 | 描述 |
---|---|---|
1 | 值参数 | 默认传参方式 |
2 | 引用参数 | 改变原始调用参数值 |
3 | 默认参数 | 调用时允许省略的参数 |
4 | 剩余参数 | 调用参数数量不确定 |
代码示例
<?php
//参数传递
function add($number){
return ++$number;
}
$number=1;
echo add($number).'<br>';
echo add($number).'<br>';
//引用传递
function add_1(&$number){
return ++$number;
}
$number=1;
echo add_1($number).'<br>';
echo add_1($number).'<br>';//引用传递直接调用变量的地址
//默认参数
function name($name='张三'){
return $name;
}
echo name().'<br>';
echo name('李四').'<br>';
//剩余参数
function add_2()
{
$quantity=func_num_args();
$total = 0;
foreach (func_get_args() as $value) {
$total +=$value;
}
return '输入参数'.$quantity.'个,和为'.$total;
}
echo (add_2(1,2,3,4,5)).'<br>';
// 使用剩余参数简化
function add_3(...$args){
$add=0;
$total=count($args);
foreach($args as $result){
$add+=$result;
}
return '输入参数'.$total.'个,和为'.$add;
}
echo add_3(1,2,3,4,5).'<br>';
function add_4(...$arr){
$add=array_sum($arr);
$total=count($arr);
return '输入参数'.$total.'个,和为'.$add;
}
echo add_4(...[1,2,3,4,5]);
- 总结:今天课程中大部分内容比较容易掌握,剩余参数简化方法和匿名函数的use方法接触的较少,还需要多加练习。