Blogger Information
Blog 5
fans 0
comment 0
visits 4746
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP 基础知识:函数的类型、返回值和参数详解
文瑜
Original
911 people have browsed it

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. 总结

  • 函数的类型中,可变函数和匿名函数也是自定义函数中的一种,自定义函数为程序能更快速,更便捷的处理数据提供了极大的自由度
  • 函数返回值必须是准守单值返回的原则,多值返回也是建立在单值返回的基础之上,通过数组,数据序列化等吧数据组合在一起实现的
  • 函数剩余参数归纳,适用于所有自定义函数参数
  • 回调函数:用在函数的参数中
Correcting teacher:天蓬老师天蓬老师

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