博客列表 >PHP 基础知识:函数的类型、返回值和参数详解

PHP 基础知识:函数的类型、返回值和参数详解

文瑜
文瑜原创
2020年04月21日 23:57:50912浏览

PHP 基础知识:函数

1. 函数语法

  • 定义:函数是实现代码复用的重要方法,在所有编程语言中均如此

  • 代码实例:

  1. //函数定义
  2. function 函数名称(类型:参数列表):返回值类型
  3. //函数体
  4. return 返回值;
  5. };
序号 名称 描述
1 function 声明函数
2 函数名称 复合 PHP 标识符命名规范,不区分大小写
3 参数列表 另个或多个接收外部传入到函数的变量
4 {... 创建出一个封闭的函数作用域
5 函数体 由零个或多个合法的 PHP 语句组成
6 return 值 将执行结果返回函数调用者[可选]
7 ...} 函数执行结束,如果没有 return,则返回 null

2. 函数类型

序号 类型 语法 描述
1 自定义函数 function getMess(){...} 用户根据业务需求创建
2 系统函数 gettype(),date() 也叫预定义函数,不必声明直接调用
3 可变函数 $funcName() 函数名使用变量表示
4 匿名函数 $f = function(){...} 也叫“闭包”或“函数表达,常用做回调函数处理”
  • 代码实例:
  1. // 1. 自定义函数
  2. // 自定义一个函数addNmu() ,计算两数之和并返回
  3. function myName(string $name) : string
  4. {
  5. return "我的名字叫做".$name;
  6. };
  7. // 调用并输出
  8. echo myName('wen');
  9. echo '<hr>';
  10. // 2. 系统函数
  11. //date() 获取当前系统时间
  12. echo date('Y-m-d H:s:i');
  13. echo '<hr>';
  14. // 3. 可变函数
  15. //定义一个变量等于函数名
  16. $funcName = 'myName';
  17. echo $funcName('yu');
  18. echo '<hr>';
  19. // 4. 匿名函数:又叫闭包,可以访问父作用域的变量
  20. //形式1:父作用域是全局
  21. $age = 18;
  22. // 闭包访问父作用域变量格式:在参数后 加 use ($age),自定义函数访问父作用域变量使用 global $age;
  23. $myInter = function(string $name) use ($age) : string
  24. {
  25. return "我的名字叫做".$name.",我今年".$age;
  26. };
  27. echo $myInter('goodboy');
  28. echo '<br>';
  29. //形式2:父作用域又是函数
  30. $mess = function($age){
  31. //子函数
  32. $myInter = function(string $name) use ($age) :string
  33. {
  34. return "我的名字叫做".$name.",我今年".$age;
  35. };
  36. return $myInter;
  37. };
  38. //因为$mess() 返回的是一个闭包对象
  39. //调用方法:
  40. echo $mess(18)('goodgood');

3. 返回值

  • 函数必须要有返回值
  • 函数必须是准守单值返回原则
序号 场景 描述
1 return 可以返回任何类型的值,包括函数类型
2 return 遇到}也会返回,默认返回null
  • 代码实例:
  1. //return
  2. function addOne(int $a,int $b) : string
  3. {
  4. //显示返回
  5. return "$a + $b =".($a+$b);
  6. };
  7. //无 return
  8. function addTwo(int $a,int $b)
  9. {
  10. //隐式返回无 return
  11. echo "$a + $b =".($a+$b);
  12. };
  • 如果需要返回多个值,可以通过以下手段
序号 返回值类型 描述
1 string 字符串拼接
2 array 数组
3 json JSON 字符串
4 serialize 序列化字符串
  • 代码实例:
  1. //函数返回多个值
  2. function getData()
  3. {
  4. $name = 'wen';
  5. $age = 18;
  6. $sex = 'man';
  7. // 1. 字符串拼接: 使用字符串拼接符 '.'
  8. // return "姓名:".$name.",年龄:".$age.",性别:".$sex;
  9. // 2. 数组 : array
  10. // return ['姓名'=>$name,'年龄'=>$age,'性别'=>$sex];
  11. // 3. JSON 字符串
  12. // json_encode():将PHP数据编码为json格式的字符串返回
  13. // json_decode():对json格式的字符串进行解码
  14. // return json_encode(['姓名'=>$name,'年龄'=>$age,'性别'=>$sex]);
  15. // 4. serialize 序列化
  16. return serialize(['姓名'=>$name,'年龄'=>$age,'性别'=>$sex]);
  17. };
  18. // 返回的字符串使用 echo
  19. // echo getData();
  20. //返回的是数组 使用 print_r
  21. // print_r(getData());
  22. //使用json格式返回的数据,需要使用 json_decode() 函数进行解码,默认解析成的是对象,加参数 true 之后解析为数组
  23. // print_r(json_decode(getData(),true));
  24. // 使用serialize 序列化传输的数据,需要解序列化
  25. print_r(unserialize(getData()));

json:是用 js 对象字面量的方式来表示数据,是一种轻量级通用的数据交换或传输格式
json 本质上就是一个具有一定结构和格式的字符串,不过这种格式得到了公认,几乎所有编程语言都有支持它的接口
json 也是一种序列化

4. 参数

  • 调用者可以通过参数将数据传递到函数中
  • 参数是以逗号分隔的表达式列表
  • 参数按照从左到右的顺序求值

参数类型

序号 类型 描述
1 值参数 默认传参方式
2 引用参数 改变原始调用参数值
3 默认参数 调用时运行省略的参数
4 剩余参数 调用参数数量不确定
  • 代码实例:
  1. <?php
  2. //函数参数
  3. // 1. 值参数 : 默认
  4. function demo1(float $arg) : float
  5. {
  6. $arg = $arg * 2;
  7. return $arg;
  8. };
  9. $value = 100;
  10. echo demo1($value),'<br>';
  11. echo $value;
  12. // 在函数中改变了调用参数的值,但原始调用参数并没有发生变化
  13. echo '<hr>';
  14. // 2. 引用参数
  15. function demo2(float &$arg) : float
  16. {
  17. $arg *=2;
  18. return $arg;
  19. }
  20. $value = 200;
  21. echo demo2($value),'<br>';
  22. echo $value;
  23. // 如果在参数前面使用了取地址符 '&',则会改变原始调用参数的值
  24. echo '<hr>';
  25. // 3. 默认参数:默认参数必须写在必选参数后面
  26. function demo3(string $name,int $age,string $sex='保密') : string
  27. {
  28. return "我的名字叫做".$name.",我今年".$age.",我的性别".$sex;
  29. };
  30. echo demo3('o(∩_∩)o 哈哈',18);
  31. echo '<hr>';
  32. // 4. 剩余参数
  33. //...: 参数归纳
  34. //...:用在函数的形参列表中,表示“收集”,将多个离散的参数打包到一个数组中处理
  35. function demo4(...$args) : float
  36. {
  37. $total = 0;
  38. // 计算所有参数之和
  39. //方法1:
  40. // for($i = 0;$i < count($args);$i++){
  41. // $total +=$args[$i];
  42. // };
  43. // 方法2:
  44. $total = array_sum($args);
  45. return $total;
  46. }
  47. // echo demo4(1,2,3,4,5);
  48. $arr = [1,5,7,9,3,6];
  49. // ...:用在函数的调用参数列表中,表示“展开”,还原将一个数组展开成一个个离散的值
  50. echo demo4(...$arr);

5. 回调函数

  • 回调:在将来某一时刻,或某个事件发生时再执行
语法 类型 执行方式 应用场景
匿名函数 闭包Closure 异步 函数参数

-代码实例:

  1. //回调函数
  2. $date = ['html5','css3','javscript','jquery','php'];
  3. //方式1:普通函数写法
  4. function repeat($arr){
  5. //把所有字符都大写
  6. return strtoupper($arr);
  7. }
  8. //将用户自定义函数作用到给定数组的每个值上,返回新的值。
  9. print_r(array_map('repeat',$date));
  10. echo '<hr>';
  11. //方式2:定义一个匿名函数
  12. // ucfirst() 字符串首字母大写
  13. $mess = print_r(array_map(function($arg){return ucfirst($arg);},$date));

6. 命名空间

  • 命名空间是用来防止全局成员(函数,常量,类,接口)的命名冲突的

7. 总结

  • 函数的类型中,可变函数和匿名函数也是自定义函数中的一种,自定义函数为程序能更快速,更便捷的处理数据提供了极大的自由度
  • 函数返回值必须是准守单值返回的原则,多值返回也是建立在单值返回的基础之上,通过数组,数据序列化等吧数据组合在一起实现的
  • 函数剩余参数归纳,适用于所有自定义函数参数
  • 回调函数:用在函数的参数中
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议