Blogger Information
Blog 59
fans 6
comment 0
visits 52186
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
函数的声明、调用、类型、返回值、参数、命名空间-php15课7.7
希望
Original
578 people have browsed it

一、 函数的声明与调用

  • 声明用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. }
Correcting teacher:GuanhuiGuanhui

Correction status:qualified

Teacher's comments:整体写的还行!尽量配上效果图,每个段落的标题注意一下!不要排乱了。
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments