登录  /  注册
博主信息
博文 100
粉丝 8
评论 2
访问量 146720
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP函数详解
lilove的博客
原创
888人浏览过

函数声明

  • 格式:function 函数名称的标识符(参数列表){一条或多条语句组成函数体,可为空}
  • 代码复用的重要手段

函数声明示例:

  1. <?php
  2. // 函数声明:function 函数名称的标识符(参数列表){一条或多条语句组成函数体,可为空}
  3. // 标识符:只允许字母、数字、下划线,不允许用数字开头
  4. // 意义:代码复用的重要手段
  5. // :后面表示结果是字符串
  6. function getName($name, int $age):string
  7. {
  8. return $name . '今年' . $age . '岁了。';
  9. }
  10. echo getName('小刚', 18);

函数类型

  • 自定义函数
  • 系统函数
  • 可变函数
  • 匿名函数

示例:

  1. <?php
  2. // 1.自定义函数:
  3. function getAge(int $born, int $now): int
  4. {
  5. return $now - $born;
  6. }
  7. echo getAge(1985, 2020);
  8. echo '<br>';
  9. // 2.系统函数:
  10. // 返回当前时间戳
  11. echo '当前时间戳:' . time();
  12. // 转换时间戳
  13. echo '当前时间为' . date('yy-m-d', time());
  14. echo '<br>';
  15. // 3.可变函数
  16. $age = 'getAge';
  17. echo '小刚的年纪:' . $age(1985, 2020) . '岁';
  18. echo '<br>';
  19. // 4.匿名函数,在php中也叫做闭包,可以访问父作用域中的变量
  20. $age = function (int $born, int $now): int {
  21. return $now - $born;
  22. };
  23. echo '小刚的年纪:' . $age(1985, 2020) . '岁';
  24. echo '<hr>';
  25. // 访问全局变量示例:
  26. $name = '小刚';
  27. $call = function (int $phone, int $height) use ($name): string {
  28. return $name . '的电话是:' . $phone . '身高是:' . $height;
  29. };
  30. echo $call(13888888888, 190);
  31. echo '<br>';
  32. // 访问父函数示例:
  33. $str = function ($name) {
  34. $call = function (int $phone, int $height) use ($name): string {
  35. return $name . '的电话是:' . $phone . '身高是:' . $height;
  36. };
  37. return $call;
  38. };
  39. echo $str('小明')(13666666666, 170);

函数的返回值

  • 一定存在
  • 只能返回单一值
  • 返回多值的方法

示例;

  1. <?php
  2. // 函数的返回值一定存在
  3. function func()
  4. {
  5. }
  6. // 结果为null
  7. var_dump(func());
  8. echo '<br>';
  9. // 1.字符串拼装
  10. function str(): string
  11. {
  12. $name = '小刚';
  13. $age = 18;
  14. // return $name . $age . '岁了';
  15. // 还可以加入html代码
  16. return '<h3>' . $name . $age . '岁了' . '</h3>';
  17. }
  18. echo str() . '<hr>';
  19. // 2.数组返回
  20. function arr(): array
  21. {
  22. $name = '小刚';
  23. $age = 18;
  24. return ['名字' => $name, '年龄' => $age];
  25. }
  26. // 数组必须指定元素
  27. echo arr()['名字'] . arr()['年龄'];
  28. echo '<hr>';
  29. // 3.json方式
  30. function js(): string
  31. {
  32. $name = '小刚';
  33. $age = 18;
  34. // json_encode()将数组转换成json格式(javascript对象)
  35. return json_encode(['名字' => $name, '年龄' => $age]);
  36. }
  37. // json_decode()将json格式的数据解析
  38. print_r(json_decode(js(), true));
  39. echo '<hr>';
  40. // 4.序列化方式
  41. echo serialize(['a', 'b', 'c']) . '<br>';
  42. // 用于函数中
  43. function ser(): string
  44. {
  45. $name = '小刚';
  46. $age = 18;
  47. return serialize(['名字' => $name, '年龄' => $age]);
  48. }
  49. echo ser() . '<br>';
  50. // 反序列化
  51. print_r(unserialize(ser()));

函数的参数

  • 值参数(默认)
  • 引用传参:将值与私有变量绑定
  • 默认参数(不给参数报错)
  • 剩余参数(将参数打包到数组中,可以不指定参数名也可以叫”收集”)

示例

  1. <?php
  2. // 1.值参数(默认)
  3. function func1(int $a, int $b): int
  4. {
  5. $c = $a + $b;
  6. return $c;
  7. }
  8. echo func1(1, 2) . '<br>';
  9. // 2.引用传参:将值参数与私有变量绑定
  10. function func2(int &$b): int
  11. {
  12. $b -= 2;
  13. return $b;
  14. }
  15. $d = 5;
  16. // $d与$b绑定
  17. echo func2($d) . '<br>';
  18. // 3.默认参数
  19. function func3(int $id, string $opt = '没有用户')
  20. {
  21. $res = '默认用户';
  22. switch ($opt) {
  23. case '小刚':
  24. $res = $id . '是' . '管理员' . '类型的用户';
  25. break;
  26. case '小明':
  27. $res = $id . '是' . '运营' . '类型的用户';
  28. break;
  29. case '小红':
  30. $res = $id . '是' . '制造' . '类型的用户';
  31. break;
  32. case '小小':
  33. $res = $id . '是' . '开发' . '类型的用户';
  34. break;
  35. default:
  36. $res = '非法用户';
  37. }
  38. return $res;
  39. }
  40. echo func3(1, '小刚'), '<br>';
  41. echo func3(3), '<br>';
  42. echo func3(5, '阿青'), '<br>';
  43. // 不给参数会报错
  44. // echo func3();
  45. // 4.剩余参数,将参数打包到数组中,可以不指定参数名也可以叫"收集"
  46. function func4(...$arr)
  47. {
  48. // return $arr;
  49. // 返回数组中所有值的和
  50. return array_sum($arr);
  51. }
  52. // 实参列表
  53. // $res = func4('小明', '小刚', '小红');
  54. // $res = func4(1, 2, 3);
  55. // print_r($res);
  56. // 形参列表
  57. $ar = [2, 4, 6, 8, 10, 12, 14];
  58. $res = func4(...$ar);
  59. print_r($res);

回调函数

异步处理动态数据,不会阻塞。

示例

  1. <?php
  2. // 回调函数,异步处理动态数据,不会阻塞
  3. // range()创建整数列表
  4. $arr = range(2, 50, 2);
  5. // print_r($arr);
  6. $newArr = array_map(function ($item) {
  7. if ($item % 3 === 0) return $item;
  8. }, $arr);
  9. // 得出数组中被3整除的值
  10. print_r($newArr);
  11. echo '<hr>';
  12. // 过滤空值array_filter(数组, 回调)
  13. $data = array_filter($newArr, function ($item) {
  14. return $item;
  15. });
  16. print_r($data);
  17. // 重排键名array_values(数组)
  18. print_r(array_values($data));

函数命名空间

示例

  1. <?php
  2. // 函数命名空间
  3. // 同一空间内不能重复命名,只要代码中使用了命名空间,其他成员必须都使用
  4. namespace space1 {
  5. function func1()
  6. {
  7. return 'space1';
  8. }
  9. echo func1() . '<br>';
  10. }
  11. // 报错
  12. // function func1()
  13. // {
  14. // }
  15. namespace space2 {
  16. function func1()
  17. {
  18. return 'space2';
  19. }
  20. echo func1() . '<br>';
  21. }
  22. // 全局空间
  23. namespace {
  24. function func1()
  25. {
  26. return 'namespace';
  27. }
  28. echo func1() . '<br>';
  29. }

总结

  • 标识符:只允许字母、数字、下划线,不允许用数字开头
  • 代码复用的重要手段
  • 系统预设函数关键字不能重复
  • json数据用于前后端和接口之间数据交互
  • 活用预设函数解决变量取值等操作
批改老师:GuanhuiGuanhui

批改状态:合格

老师批语:作业有点简洁,可以多加点文字描述!
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学