博主信息
博文 59
粉丝 6
评论 0
访问量 67474
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
函数的声明、调用、类型、返回值、参数、命名空间-php15课7.7
希望
原创
776人浏览过

一、 函数的声明与调用

  • 声明用function,标识符,要满足php的基本要求,字母,数字,或下划线,不能用数字开头
  • 函数体由一条或多条语句组成,也可以为空
  • 函数实现代码复用
  • return是将函数的执行结果返回到调用者
    1. function sum(int $a, int $b): int
    2. {
    3. return $a + $b;
    4. }
    5. echo sum(10, 20);

    二、函数类型

1. 自定义函数

  • 价格,金额,折扣,求实际金额,来举例
    1. function getPrice(float $money, float $discount): float
    2. {
    3. return $money * $discount;
    4. }
    5. echo '实付金额= ' . getPrice(1000, 0.9);

2. 系统函数

  • 字符串截取,UTF-8中一个汉字是三个字节,所以要用mb_substr
    1. echo mb_substr($str, 0, 6);

3. 可变函数

  1. $funcName = 'getPrice';
  2. echo '实付金额= ' . $funcName(2000, 0.8), '<hr>';

4. 匿名函数

  • 没有定义函数,把折扣放外面,$n为数量
  • 匿名函数在php中也叫“闭包”,可以访问父级作用域中的变量,通过闭包,使用use($discount).
    1. $discount = 0.6;
    2. $p = function (float $money, int $n) use ($discount): float {
    3. return $money * $n * $discount;
    4. };
    5. echo '实付金额= ' . $p(4000, 2);

    三、函数的返回值

1. 通过字符串string拼装

  1. function demo1(): string
  2. {
  3. $status = 1;
  4. $message = '成功';
  5. return $status . ',' . $message;
  6. }
  7. echo demo1();

2. 通过数组array方式返回

  1. function demo3(): array
  2. {
  3. $status = 1;
  4. $message = '成功';
  5. return ['status' => $status, 'msg' => $message];
  6. }
  7. echo demo3();

3. json返回,用json_encode,是JS对象字面量的字符串

  1. function demo5(): string
  2. {
  3. $status = 1;
  4. $message = '成功';
  5. return json_encode(['status' => $status, 'msg' => $message]);
  6. }
  7. echo demo5();

4. 序列化方式serialize

  1. function demo6(): string
  2. {
  3. $status = 1;
  4. $message = '成功';
  5. return serialize(['status' => $status, 'msg' => $message]);
  6. }
  7. echo demo6();
  • 返序列化,还原unserialize
    1. function demo8(): string
    2. {
    3. $status = 1;
    4. $message = '成功';
    5. return serialize(['status' => $status, 'msg' => $message]);
    6. }
    7. print_r(unserialize(demo8())['msg']);

    四、函数的参数

1. 值参数,为默认

  1. function demo1(float $arg): float
  2. {
  3. return $arg *= 2;
  4. }
  5. echo demo1(80);

2. 引用参数,要在参数前添加取地址符&

  1. function demo2(float &$arg): float
  2. {
  3. return $arg *= 2;
  4. }
  5. $val = 80;
  6. echo $val;

3. 默认参数

  • 有默认值的参数必须写到没有默认值参数的后面,可以给a,b赋值
    1. function demo3(float $a, float $b, string $opt = '+')
    2. {
    3. $res = 0;
    4. switch ($opt) {
    5. case '+':
    6. $res = "$a + $b = " . ($a + $b);
    7. break;
    8. case '-':
    9. $res = "$a - $b = " . ($a - $b);
    10. break;
    11. case '*':
    12. $res = "$a * $b = " . ($a * $b);
    13. break;
    14. case '/':
    15. $res = "$a / $b = " . ($a / $b);
    16. break;
    17. default:
    18. $res = '非法操作符';
    19. }
    20. return $res;
    21. }
    22. echo demo3(5, 10), '<br>';
    23. echo demo3(8, 9, '*'), '<br>';
    24. echo demo3(8, 9, '@'), '<br>';

4. 剩余参数

  1. function demo4($a, $b, $c)
  2. {
  3. return $a + $b + $c;
  4. }
  5. echo demo4(1, 2, 3);
  • 收集:调用参数的数量不固定,如何求和?array_sum
    1. function demo5(...$args)
    2. {
    3. return array_sum($args);
    4. }
    5. $res = demo5(1, 2, 3, 4, 5, 6);
    6. print_r($res);
  • 展开:将剩余参数用在函数的调用表达式中
    1. function demo6(...$args)
    2. {
    3. return array_sum($args);
    4. }
    5. $arr = [1, 2, 3, 4, 5, 6, 7, 8];
    6. $res = demo6(...$arr);
    7. print_r($res);
  • 异步编程中函数的参数【回调函数】
    1. $data = range(1, 100);
    2. $arr = array_map(function ($item) {
    3. if ($item % 2 === 0)
    4. return $item;
    5. }, $data);
    6. print_r($arr);
  • 过滤空值
    1. $data = range(1, 100);
    2. $arr = array_map(function ($item) {
    3. if ($item % 2 === 0)
    4. return $item;
    5. }, $data);
    6. $res = array_filter($arr, function ($item) {
    7. return $item;
    8. });
  • 件名重排array_values
    1. print_r(array_values($res));

    五、函数的命名空间

  • 不能重复命名,要取不同名
  • 全局空间,也叫默认空间,同名函数在不同目录下是可以的
    1. namespace ns1 {
    2. function demo1()
    3. {
    4. return __FUNCTION__;
    5. }
    6. }
    1. namespace {
    2. function demo1()
    3. {
    4. }
    5. echo ns1\demo1();
    6. }
批改老师:GuanhuiGuanhui

批改状态:合格

老师批语:整体写的还行!尽量配上效果图,每个段落的标题注意一下!不要排乱了。
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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

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