批改状态:合格
老师批语:函数,对于任何一门语言来说, 都处于核心地位, 花再多的时候去研究都是值得的
<?php//函数的声明//形式参数可以在前面限定数据类型,返回值在圆括号后面":返回数据类型"//function 函数名(形式参数列表)//{// //函数体//}//函数的调用//函数名(实际参数列表);//获取两个字符串拼接后的字符串function show(string $str1, string $str2): string{return $str1 . ' ' . $str2;}echo show('hello', 'world');
| 序号 | 名称 | 描述 |
|---|---|---|
| 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();
| 序号 | 类型 | 描述 |
|---|---|---|
| 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>';
| 序号 | 类型 | 描述 |
|---|---|---|
| 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);
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号