Blogger Information
Blog 55
fans 3
comment 0
visits 54981
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
函数类型与返回值
王佳祥
Original
1980 people have browsed it

函数类型与返回值

一、函数的声明与调用

  • 函数语法:
  1. function 函数名称的标识符(参数列表){
  2. //函数体,由一条或多条语句组成,也可以为空
  3. }
  4. 标识符:必须满足php标识符的基本要求,只允许字母数字或下划线不允许用数字开头
  5. 函数:代码复用的重要手段
  6. 变量:数据复用的重要手段
  • 自定义函数的声明与调用
  1. //声明
  2. function sum(int $a,int $b):int
  3. {
  4. //return :将函数的执行结果返回到调用者
  5. return $a + $b;
  6. }
  7. //调用
  8. echo sum(100,100);


二、函数的类型

1.自定义函数

  1. //1.自定义函数
  2. function getPrice(float $money,float $discount):float
  3. {
  4. return $money * $discount;
  5. }
  6. echo '实付金额 = ' . getPrice(5000,0.6),'<hr>';


2.系统函数

  1. //2.系统函数
  2. $str = "函数调用机制,改进函数调用机制,通过优化参数传递环节,减少了一些指令";
  3. //字符串截取
  4. //echo '字符串截取mb_substr()系统函数:' . mb_substr($str,0,6),'<hr>';


3.可变函数

  1. //3.可变函数
  2. $funcName = 'getPrice';
  3. echo '(可变函数)实付金额 = ' . $funcName(5000,0.6),'<hr>';


4.匿名函数

  1. //4.匿名函数
  2. //拥有名称的函数叫:命名函数/具名函数
  3. $get = function(float $money,float $discount):float
  4. {
  5. return $money * $discount;
  6. };
  7. echo '(匿名函数)实付金额 = ' . $get(10000,0.6),'<hr>';


  1. <?php
  2. //匿名函数,也叫闭包函数,允许临时创建一个没有指定名称的函数。最经常用作回调函数参数的值
  3. //闭包函数也可以作为变量的值来使用
  4. //闭包可以从父作用域中继承变量,任何此类变量都应该用 use 语言结构传递进去
  5. //父作用域就是父函数
  6. $f = function($discount){
  7. $p = function (float $money,int $n) use ($discount):float
  8. {
  9. $total = $money * $n;
  10. return ($total > 20000) ? ($total * $discount) : $total;
  11. };
  12. //将子函数以返回值的方式返回给调用者
  13. return $p;
  14. };
  15. echo '实付金额 = ' . $f(0.8)(3000,10),'<hr>';


三、函数的返回值

  1. <?php
  2. //函数必须要有返回值
  3. //函数只能返回单一的值
  4. function f()
  5. {
  6. }
  7. var_dump(f());
  8. echo '<hr>';
  9. //返回多值
  10. //1.通过字符串拼装
  11. function demo1():string
  12. {
  13. $status = 1;
  14. $message = '成功';
  15. return $status.','.$message;
  16. }
  17. echo '字符串拼装:'.demo1(),'<hr>';
  18. //通过数组返回
  19. function demo2():array
  20. {
  21. $status = 1;
  22. $message = '成功';
  23. return ['status' => $status, 'msg' => $message];
  24. }
  25. echo '数组返回:'.demo2()['msg'],'<hr>';
  26. //3.json:是js对象字面量的字符串表示
  27. function demo3():string
  28. {
  29. $status = 0;
  30. $message = '成功';
  31. return json_encode(['status' => $status, 'msg' => $message]);
  32. }
  33. echo 'js对象字面量的字符串表示:'.demo3(),'<br>';
  34. $data = json_decode(demo3(),true);
  35. print_r($data);
  36. echo '<hr>';
  37. //4.序列化方式
  38. echo serialize([1,2,3]),'<br>';
  39. function demo4():string
  40. {
  41. $status = 1;
  42. $message = '成功';
  43. return serialize(['status' => $status, 'msg' => $message]);
  44. }
  45. echo '序列化:'.demo4(),'<br>反序列化:';
  46. print_r(unserialize(demo4()));


四、函数的参数

  1. <?php
  2. //函数中的参数
  3. //1.值参数,这是默认
  4. function demo1(float $arg): float
  5. {
  6. return $arg *= 2;
  7. }
  8. $val = 100;
  9. echo '原来的值:'.$val,'<br>';
  10. echo '值参数:'.demo1($val),'<br>';
  11. echo '现在的值:'.$val,'<hr>';
  12. //2.引用参数,要在参数前添加取地址符&
  13. function demo2(float &$arg):float
  14. {
  15. return $arg *= 2;
  16. }
  17. $val = 100;
  18. echo '原来的值:'.$val,'<br>';
  19. echo '引用参数:'.demo2($val),'<br>';
  20. echo '现在的值:'.$val,'<hr>';
  21. //3.默认参数
  22. //凡是有默认值的参数,必须写到没有默认值参数的后面
  23. function demo3(float $a=2,float $b=4,string $opt = '+')
  24. {
  25. $res = 0;
  26. switch ($opt){
  27. case '+':
  28. $res = "$a + $b = " . ($a + $b);
  29. break;
  30. case '-':
  31. $res = "$a - $b = " . ($a - $b);
  32. break;
  33. case '*':
  34. $res = "$a * $b = " . ($a * $b);
  35. break;
  36. case '/':
  37. $res = "$a / $b = " . ($a / $b);
  38. break;
  39. default:
  40. $res = "非法操作符";
  41. }
  42. return $res;
  43. }
  44. echo '不传任何参数:'.demo3(),'<br>';
  45. echo '不传操作符:'.demo3(100,100),'<br>';
  46. echo '传参数:'.demo3(100,5,'*'),'<br>';
  47. echo '传错参数:'.demo3(100,5,'#'),'<hr>';
  48. //4.剩余参数
  49. function add($a,$b,$c)
  50. {
  51. return $a + $b +$c;
  52. }
  53. echo add(1,2,3),'<br>';
  54. //剩余参数用在函数的参数列表中:收集
  55. function add1(...$s)
  56. {
  57. return array_sum($s);
  58. }
  59. //调用参数数量不固定
  60. //将剩余参数用在函数的调用表达式中,是:展开
  61. $arr = [1,2,3,4,5,6,7,8,9];
  62. $res = add1(...$arr);
  63. print_r($res);


五、回调函数

  1. <?php
  2. //回调函数,匿名函数,闭包
  3. //异步编程中的函数的参数
  4. $data = range(1,100);
  5. $arr = array_map(function($item){
  6. //array_map — 为数组的每个元素应用回调函数
  7. if($item % 2 === 0) return $item;
  8. },$data);
  9. print_r($arr);
  10. //过滤掉空值
  11. $res = array_filter($arr,function($item){
  12. //array_filter — 用回调函数过滤数组中的单元
  13. return $item;
  14. });
  15. print_r(array_values($res));
  16. //array_values() 返回 input 数组中所有的值并给其建立数字索引



六、带有命名空间的函数

  1. <?php
  2. //函数的命名空间
  3. //只要用到命名空间,全部代码都要用命名空间
  4. namespace ns1{
  5. function demo1(){return '命名空间1';}
  6. }
  7. namespace ns2{
  8. function demo1(){return '命名空间2';}
  9. }
  10. //全局空间:匿名空间,默认空间
  11. namespace{
  12. function demo1(){return '命名空间3';}
  13. echo \ns1\demo1();
  14. }


七、学习总结

1.函数的声明与调用

  • 声明:function 函数名(){}

  • 调用: echo 函数名();

  • 函数名:由字母数字下划线组成,不能以数字开头

2.函数类型

  • 自定义函数

  • 系统函数,系统预定义的函数,不需要自己定义

  • 可变函数,把函数名赋值给一个变量,通过变量来调用

  • 匿名函数,也叫闭包函数,临时创建一个没有指定名称的函数,经常用作回调函数参数的值

3.函数的返回值

  • 函数必须要有返回值,没有返回值会出错

  • 函数不能返回多个值,但可以通过返回一个数组、字符串拼接、js对象字面量的字符串、序列化方式来得到类似的效果

  • json_encode([]);通过js对象字面量的字符串来表示

  • serialize([]);通过序列化方式来表示 unserialize反序列化

4.函数的参数

  • 值传递参数(默认)

  • 引用传递参数 ,在函数定义中参数的前面加上符号 &

  • 凡是有默认值的参数,必须写到没有默认值参数的后面

  • 剩余参数用在函数的参数列表中是:收集,用在函数的调用表达式中是:展开

  • …表示多个参数 array_sum()求数组所有元素的和

5.回调函数

  • 回调函数,匿名函数,闭包

  • array_map — 为数组的每个元素应用回调函数

  • array_filter — 用回调函数过滤数组中的单元

  • array_values() 返回 input 数组中所有的值并给其建立数字索引

6.函数的命名空间

  • 只要用到命名空间,全部代码都要用命名空间

  • namespace 命名空间名称 {}

  • namespace {} 全局空间:匿名空间,默认空间

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
Author's latest blog post