博客列表 >PHP函数的 类型 参数 与 返回值 -- PHP中文网线上班0420

PHP函数的 类型 参数 与 返回值 -- PHP中文网线上班0420

高的PHP十期培训学习笔记
高的PHP十期培训学习笔记原创
2020年05月22日 18:41:481322浏览

函数

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

  1. function 函数名称(类型: 参数列表): 返回值类型
  2. {
  3. // 函数体
  4. return 返回值;
  5. }
  6. // 函数调用: 按名称
  7. 函数名称(参数列表);

1. 函数的四种类型

序号 类型 语法 描述
1 自定义函数 function getName(){...} 用户根据业务需求创建
2 系统函数 substr(), count()... 也叫预定义函数,不必声明直接调用
3 可变函数 $funcName(); 函数名使用变量表示
4 匿名函数 $f = function (){...} 也叫”闭包”或”函数表达式”,常用做回调处理

1.1 自定义函数

  1. // 1. 自定义函数
  2. // 根据需要自己创建的函数
  3. // 根据折扣率获得实际需要支付的金额
  4. function getJine (float $yuanjia , float $zhekou) : float
  5. {
  6. return $yuanjia * $zhekou;
  7. }
  8. echo '打折后的金额为:'. getJine(6000,0.95) . '<br>';

1.2. 系统函数

  1. // 2. 系统函数
  2. // 系统自带的函数,拿来即用
  3. $title = '海军和海军陆战队携手 亚太美军跨军种联合行动';
  4. // mb_substr(数据,起始位置,长度);
  5. echo mb_substr($title,3,5);
  6. echo '<hr>';

1.3. 可变函数

  1. // 3. 可变函数
  2. // 将函数名称保存在变量内,通过变量调用函数
  3. $jiage = 'getJine';
  4. echo '打折后的金额为:'. $jiage(9000,0.9) . '<br>';
  5. echo '<hr>';

1.4. 匿名函数

  1. // 4. 匿名函数:也叫闭包
  2. // 将函数当成值赋给一个变量
  3. $getjine = function (float $yuanjia, int $shuliang )
  4. {
  5. $jine = $yuanjia * $shuliang;
  6. return $jine;
  7. };
  8. echo '金额为:'. $jiage(3000,6) . '<br>';
  9. // 可以访问父作用域中的变量
  10. $zhekou = 0.9;
  11. $getjine = function (float $yuanjia, int $shuliang ) use ($zhekou) :float
  12. {
  13. $jine = $yuanjia * $shuliang;
  14. return $jine > 3000 ? $jine * $zhekou : $jine;
  15. };
  16. echo '金额为:'. $getjine(4000,6) . '<br>';

函数多值返回四种形式

  • 函数必须要有返回值
  • 函数必须是遵守单值返回原则
序号 场景 描述
1 return 可以返回任何类型的值,包括函数类型
2 return 遇到}也会返回, 默认返回null
  • 如果需要返回多个值,可以通过以下手段
序号 返回值类型 描述
1 string 字符串拼接
2 array 数组
3 json JSON 字符串
4 serialize 序列化字符串

json 和序列化,使用时需要进行解码操作

1.1 字符串拼装

  1. // 1. 字符串拼装
  2. // 适合处理大量的php+html混写
  3. // 这种返回的格式是用户自定义的,前端处理非常麻烦
  4. function demo1() : string
  5. {
  6. $name = 'admin';
  7. $dengji = '管理员';
  8. return $name .',' . $dengji;
  9. }
  10. echo demo1();
  11. echo '<hr>';

1.2 通过数组

  1. // 2. 通过数组
  2. function demo2() : array
  3. {
  4. return ['name' => 'admin','dengji' => '管理员'];
  5. }
  6. $res = print_r(demo2(),true);
  7. printf('<pre>%s</pre>',$res);
  8. echo '<hr>';

1.3 通过JSON返回

  1. // 3. 通过JSON返回
  2. // json: 是用js对象字面量的方式来表示数据,是一种轻量级通用的数据交换或传输格式
  3. // json本质上就是一个具有一定结构和格式的字符串, 不过这种格式得到了公认,几乎所有编程语言都有支持它的接口
  4. function demo3() : string
  5. {
  6. // json_encode(): 将php数据编码为json格式的字符串返回
  7. return json_encode(['name' => 'admin','dengji' => '管理员']);
  8. }
  9. $data = demo3();
  10. echo $data;
  11. echo '<hr>';
  12. // 将json格式的字符串还原/解析为php对象
  13. $var = json_decode($data);
  14. print_r($var);
  15. echo '<hr>';
  16. // 将json格式的字符串还原/解析为数组
  17. $var = json_decode($data, true);
  18. print_r($var);
  19. echo '<hr>';

1.4 通过序列化返回多个值

  1. // 4. 通过序列化返回多个值
  2. // 其实json也是一种序列化
  3. function demo4() : string
  4. {
  5. return serialize(['name' => 'admin','dengji' => '管理员']);
  6. }
  7. echo demo4();
  8. // 反序列化才可以使用
  9. $arr =unserialize(demo4());
  10. printf('<pre>%s</pre>', print_r($arr,true));

函数的四种参数

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

参数类型

序号 类型 描述
1 值参数 默认传参方式
2 引用参数 改变原始调用参数值
3 默认参数 调用时允许省略的参数
4 剩余参数 调用参数数量不确定

1.1 值参数

  1. // 1. 值参数
  2. // 创建一个函数返回参数的两倍
  3. function demo1(float $arg) : float
  4. {
  5. return $arg *= 2;
  6. }
  7. $value = 100;
  8. echo demo1($value) , '<br>';
  9. // 在函数中改变了调用参数的值,但原始调用参数并没有发生变化
  10. echo $value;
  11. echo '<hr>';

1.2. 引用参数

  1. // 2. 引用参数
  2. function demo2(float &$arg) : float
  3. {
  4. return $arg *= 2;
  5. }
  6. $value = 100;
  7. echo demo2($value) , '<br>';
  8. // 如果在参数前面使用了取地址符 '&' , 则会改变原始调用参数的值
  9. echo $value;
  10. echo '<hr>';

1.3. 默认参数

  1. // 3. 默认参数
  2. // 默认参数必须写在必选参数的后面
  3. function demo3(float $a, float $b, string $opt = '+' )
  4. {
  5. $res = 0;
  6. switch ($opt) {
  7. case '+':
  8. $res = "$a + $b = " . ($a + $b);
  9. break;
  10. case '-':
  11. $res = "$a - $b = " . ($a - $b);
  12. break;
  13. case '*':
  14. $res = "$a * $b = " . ($a * $b);
  15. break;
  16. case '/':
  17. $res = "$a / $b = " . ($a / $b);
  18. break;
  19. default:
  20. $res = '非法操作符';
  21. }
  22. return $res;
  23. }
  24. echo demo3(10, 20), '<br>';
  25. echo demo3(10, 20, '*'), '<br>';
  26. echo demo3(10, 20, '#'), '<br>';
  27. echo '<hr>';

1.4. 剩余参数

  1. // 4. 剩余参数
  2. function demo4(float $a, float $b, float $c ) : float
  3. {
  4. return $a + $b + $c;
  5. }
  6. // 计算三个数之和
  7. echo demo4(1,2,3), '<br>';
  8. echo '<hr>';
  9. function demo5( )
  10. {
  11. // 参数数量
  12. // return func_num_args();
  13. // 根据索引返回指定的调用参数
  14. // return func_get_arg(2);
  15. // return func_get_args();
  16. $total = 0;
  17. // 笨方法一:
  18. // for ($i = 0;$i <func_num_args(); $i++ ) {
  19. // $total +=func_get_arg($i);
  20. // }
  21. // return $total;
  22. // 笨方法二:
  23. foreach (func_get_args() as $value) {
  24. $total +=$value;
  25. }
  26. return $total;
  27. }
  28. // echo demo5(3,4,7,8,24);
  29. print_r(demo5(3,4,7,8,24));
  30. echo '<hr>';
  31. // echo demo5(1,2,3,4,5,6,9,22,67), '<br>';
  32. // 使用剩余参数简化
  33. // ...: 参数归纳:
  34. function demo6(...$args ) : float
  35. {
  36. // return $args;
  37. return array_sum($args);
  38. // return array_product($args);
  39. }
  40. // print_r(demo6(3,4,7,8,24));
  41. // echo demo6(1,2,3,4,5,6,9,22,67), '<br>';
  42. // 调用参数
  43. $arr = [1,2,3,4,5,6,9,22,67];
  44. // ...:
  45. // 1. 用在函数的形式参数列表中,表示"收集",将多个离散的参数打包到一个数组中处理
  46. // 2. 用在函数的调用参数列表中,表示"展开",还原将一个数组展开成一个个离散的值
  47. print_r(demo6(...$arr));
  48. echo '<hr>';
  49. // $config = ['localhost', 'phpedu', 'uft8', '3306'];
  50. // $dsn = 'mysql:host=localhost;dbname=phpedu;charset=utf8;port=3306';
  51. // $db = [$dsn, $username, $password];
  52. // $pdo = new PDO(...$db);
  53. // 扩展知识
  54. $user[] = [100, 'admin', 90];
  55. $user[] = [110, 'peter', 60];
  56. $user[] = [120, 'jack', 98];
  57. // 数组解包
  58. // js中解构赋值, php中也有解构
  59. foreach ($user as list($id, $name)) {
  60. printf('id=%s, name=%s<br>', $id, $name);
  61. }

总结

匿名函数:闭包,可以通过use访问父作用域的变量

函数返回值:原则是单值返回分为:字符串拼装\数组\JSON字符串:json_encode();\序列化: 字符串serialize();

函数参数:

值参数:在函数中改变了调用参数的值,但原始调用参数并没有发生变化
引用参数:如果在参数前面使用了取地址符,则会改变原始调用参数的值
默认参数:默认参数必须写在必选参数的后面
剩余参数:(使用 ... 运算符定义剩余参数函数)
1.用在函数的形式参数列表中,表示”收集”,将多个离散的参数打包到一个数组中处理
2.用在函数的调用参数列表中,表示”展开”,还原将一个数组展开成一个个离散的值

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