函数知识点归纳
1.函数的声明和调用
<?php
//函数的声明
//形式参数可以在前面限定数据类型,返回值在圆括号后面":返回数据类型"
//function 函数名(形式参数列表)
//{
// //函数体
//}
//函数的调用
//函数名(实际参数列表);
//获取两个字符串拼接后的字符串
function show(string $str1, string $str2): string
{
return $str1 . ' ' . $str2;
}
echo show('hello', 'world');
2.函数的分类
序号 |
名称 |
描述 |
1 |
自定义函数 |
程序员自己定义的函数 |
2 |
系统函数 |
PHP内置的函数 |
3 |
可变函数 |
变量名当做函数名 |
4 |
匿名函数 |
函数名保存到变量中 |
<?php
//函数的分类
//1.自定义函数
//之前的两个字符串拼接的例子就是一个自定义函数
//2.系统函数
//获取当前的日期时间
echo date('Y年m月d日 H:i:s');
echo '<hr>';
//3.可变函数:和可变变量类似
$name = 'display';
function display()
{
return 'hello world';
}
//变量名等价于函数名
echo $name();
echo '<hr>';
//4.匿名函数,也叫闭包,指没有函数名的函数
//匿名函数可以使用"use()"访问父作用域的变量
$str = 'world';
$name = function () use ($str): string {
return 'hello ' . $str;
};
echo $name();
3.函数的返回值
序号 |
类型 |
描述 |
1 |
单值返回 |
只返回一个值 |
2 |
字符串返回 |
采用字符串拼接的方式返回多个值,是最简单的一种 |
3 |
返回数组 |
将需要返回的多个值放到数组中,返回数组 |
4 |
json返回 |
通用的序列化方式,适用多门语言 |
5 |
PHP序列化 |
只适用于PHP |
<?php
//函数的返回值
//原则单值返回
//如果返回多值:
//1.字符串拼接
function test1()
{
return 'hello ' . 'world';
}
echo test1();
echo '<hr>';
//2.数组方式返回
function test2()
{
return [
'status' => 1,
'message' => '成功'
];
}
echo '<pre>' . print_r(test2(), true) . '</pre>';
echo '<hr>';
//3.json方式返回
//json:js对象简谱,是一种数据交换格式,早期为XML
//json就是js对象的字符串表示,只不过键必须加上双引号
//序列化:是指将对象的状态信息转化为可以存储和传输的格式的过程
//json就是序列化的一种,是通用的序列化格式
function test3()
{
//json编码
return json_encode([
'status' => 1,
'message' => '成功'
]);
}
$str = test3();
//json解码
print_r(json_decode($str, true));
echo '<hr>';
//4.PHP序列化
//在PHP中有专门的序列化函数,只在PHP有效
$str = serialize([
'status' => 1,
'message' => '成功'
]);
echo $str;
//PHP反序列化
echo '<pre>' . print_r(unserialize($str), true) . '</pre>';
4.函数的参数类型
序号 |
类型 |
描述 |
1 |
按值传递 |
函数中改变值与原值无关 |
2 |
引用传递 |
函数中改变值与原值有关,相当于齐了一个别名 |
3 |
默认值 |
在不传递实参的情况下,使用默认值;默认值从右向左指定 |
4 |
剩余参数 |
在形参和实参不确定个数的情况下非常有用 |
<?php
//函数的参数类型
//1.按值传递
function test1(float $value): string
{
return $value *= 2;
}
$value = 100;
echo '改变后的值:', test1($value);
echo '<br>';
echo '原值:', $value;
echo '<hr>';
//2.引用传递,相当于起了一个别名
function test2(float &$value): string
{
return $value *= 2;
}
$value = 100;
echo '改变后的值:', test2($value);
echo '<br>';
echo '原值:', $value;
echo '<hr>';
//3.默认值,默认值从右向左指定
function test3(float $num1, float $num2, $op = '+'): string
{
//判断运算符
switch ($op) {
case '+':
$result = $num1 . '+' . $num2 . '=' . ($num1 + $num2);
break;
case '-':
$result = $num1 . '-' . $num2 . '=' . ($num1 - $num2);
break;
case '*':
$result = $num1 . '*' . $num2 . '=' . ($num1 * $num2);
break;
case '/':
$result = $num1 . '/' . $num2 . '=' . ($num1 / $num2);
break;
default:
$result = '非法的运算符';
}
return $result;
}
echo test3(10, 40), '<br>';
echo test3(10, 40, '*');
echo '<hr>';
//4.剩余参数:如果参数很多个,就写很多个形式参数,不太利于开发,这时就可以用剩余参数
//func_get_arg():获取实参列表中的某一个索引值
//func_get_args():获取实参列表值的数组
//func_num_args():获取实参列表值的个数
//实现输入的数值的累加和
function test4() : float
{
//初始化计数器
$total = 0;
//for循环实现累加功能
for ($i = 0; $i < func_num_args(); $i++) {
$total += func_get_arg($i);
}
return $total;
}
echo test4(10, 20, 30, 40);
echo '<br>';
function test5() : float
{
//初始化计数器
$total = 0;
//foreach遍历数组实现累加功能
foreach (func_get_args() as $item) {
$total += $item;
}
return $total;
}
echo test5(10, 20, 30, 40);
echo '<br>';
function test6() : string
{
//数组求和
return array_sum(func_get_args());
//数组求积
// return array_product(func_get_args());
}
echo test6(10, 20, 30, 40);
echo '<br>';
//剩余参数如果放在形参列表中:将每一个形参打包到一个数组中
//剩余参数如果放在实参列表中:将实参数组打散为每一个实参值
function test7(...$args) : float
{
return array_sum($args);
}
$arr = [10, 20, 30, 40];
echo test7(...$arr);
5.总结
- 函数是PHP非常重要的一块知识
- 有些新特性以前没见过,或者不是很熟练
- 博客可以记录知识点和总结,没事可以回来看看