博客列表 >函数的声明、调用、类型、返回值、参数、命名空间-php15课7.7

函数的声明、调用、类型、返回值、参数、命名空间-php15课7.7

希望
希望原创
2020年07月09日 09:55:34577浏览

一、 函数的声明与调用

  • 声明用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. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议