博客列表 >服务端 - PHP - 函数

服务端 - PHP - 函数

郴
原创
2020年04月22日 17:27:56495浏览

服务端 - PHP - 函数

一、语法

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

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

二、类型

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

三、返回值

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

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

四、参数

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

参数类型

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

五、知识点

1. 闭包

  • 闭包也叫匿名函数。即在一个函数(没有指定名称)中定义一个子函数(没有指定名称),子函数使用use关键字操作父作用域的变量并返回。这样就能保存所在代码块上下文的值,匿名函数经常被用作为回调函数(callback)参数的值使用。
  1. <?php
  2. echo '<h3>'.'一、作为变量赋值'.'</h3>';
  3. $getName = function($name) {
  4. return $name;
  5. };
  6. echo $getName("小明");
  7. echo "<hr>";
  8. echo '<h3>'.'二、从父作用域继承变量'.'</h3>';
  9. $sum2 = function($n1) {
  10. return function($n2) use ($n1) {
  11. $n3 = $n2 + $n1;
  12. return $n3;
  13. };
  14. };
  15. $a1 = $sum2(1)(2);
  16. $a2 = $sum2(4)(8);
  17. echo $a1;
  18. echo "<br>";
  19. echo $a2;
  20. ?>

2. 回调函数

  1. <?php
  2. /**
  3. * Created by VS Code
  4. * User: John-PC
  5. * Date: 2020/4/22
  6. * Time: 11:25
  7. * content: 缺少OO应用
  8. */
  9. echo '<h3>'.'一、无参数回调'.'</h3>';
  10. //回调函数
  11. function callback1() {
  12. echo "这是回调函数执行的结果".'<br>';
  13. }
  14. //主函数
  15. function main($callback1) {
  16. echo "这是主函数执行的结果1".'<br>';
  17. $callback1();
  18. echo "这是主函数执行的结果2".'<br>';
  19. }
  20. //主函数中调用回调函数,可以发现主线程在执行过程中执行了回调函数,等到回调函数执行完毕之后,再回到主线程处理接下来的流程
  21. main('callback1');
  22. echo "<hr>";
  23. echo '<h3>'.'二、全局回调函数'.'</h3>';
  24. echo '<p>'."系统调用用户自定义的函数,必须要通过一个代理函数来调用,叫间接调用,也叫回调".'</p>';
  25. //定义一个回调函数并赋值给一个变量
  26. function callback2($n1, $n2) {
  27. $n3 = $n1 + $n2;
  28. echo $n3;
  29. }
  30. $f = 'callback2';
  31. //使用call_user_func()函数
  32. call_user_func($f, 1, 2);
  33. echo '<br>';
  34. //使用call_user_func_array()函数
  35. call_user_func_array($f, [3, 4]);
  36. echo "<hr>";
  37. echo '<h3>'.'三、使用匿名函数作为参数的回调函数'.'</h3>';
  38. //自定义函数
  39. function callback3($n1, $n2) {
  40. $n3 = $n1 + $n2;
  41. echo $n3;
  42. }
  43. function main1($callback) {
  44. $callback(5, 6);
  45. echo "是使用自定义函数调用回调函数后返回的结果";
  46. }
  47. $f1 = 'callback3';
  48. main1($f1);
  49. echo '<br>';
  50. //系统内置函数
  51. call_user_func($f1, 7, 8);
  52. echo "是使用系统内置函数调用回调函数后返回的结果";
  53. ?>

3. 操作引用变量

  1. <?php
  2. //在函数中改变了调用参数的值会改变原始调用参数的值
  3. $name = '小明';
  4. function changeName(&$a) {
  5. $a = '小红';
  6. }
  7. changeName($name);
  8. echo $name;
  9. ?>

4. 默认参数

  1. <?php
  2. //默认参数不能出现在必选参数的前面,必须写在必选参数的后面
  3. function div($n1, $n2, $n3=2) {
  4. $total = $n1 + $n2;
  5. return $total / $n3;
  6. }
  7. echo div(10, 10);
  8. ?>

5. 剩余参数

5.1 使用内置函数获取实参列表

  1. $name = '小明';
  2. $sex = "男";
  3. $age = 16;
  4. $phone = 13781235421;
  5. $email = "xiaoming@qq.com";
  6. function getData1() {
  7. foreach (func_get_args() as $value) {
  8. echo $value.'<br>';
  9. };
  10. }
  11. getData1($name, $sex, $age, $phone, $email);

5.2 打包

  1. $name = '小明';
  2. $sex = "男";
  3. $age = 16;
  4. $phone = 13781235421;
  5. $email = "xiaoming@qq.com";
  6. function getData2(...$args) {
  7. foreach ($args as $value) {
  8. echo $value.'<br>';
  9. };
  10. }
  11. getData2($name, $sex, $age, $phone, $email);

5.2 解包

  1. echo '<h4>'.'1. 使用占位符'.'</h4>';
  2. $data = ["小明", "男", 16, 13781235421, "xiaoming@qq.com"];
  3. $printData = function ($name, $sex, $age, $phone, $email) {
  4. echo $name.'<br>';
  5. echo $sex.'<br>';
  6. echo $age.'<br>';
  7. echo $phone.'<br>';
  8. echo $email.'<br>';
  9. };
  10. $printData(...$data);
  11. echo '<h4>'.'2. 使用list()函数'.'</h4>';
  12. $data = ["小明", "男", 16, 13781235421, "xiaoming@qq.com"];
  13. list($name1, $sex1, $age1) = $data;
  14. echo $name1.'<br>';
  15. echo $sex1.'<br>';
  16. echo $age1.'<br>';

六、命名空间

  1. <?php
  2. namespace obj1 {
  3. $name = '小明';
  4. $sex = "男";
  5. $age = 16;
  6. $phone = 13781235421;
  7. $email = "xiaoming@qq.com";
  8. function getData() {
  9. foreach (func_get_args() as $value) {
  10. echo $value.'<br>';
  11. };
  12. }
  13. getData($name, $sex, $age, $phone, $email);
  14. echo '<hr>';
  15. }
  16. namespace obj2 {
  17. $name = '小明';
  18. $sex = "男";
  19. $age = 16;
  20. $phone = 13781235421;
  21. $email = "xiaoming@qq.com";
  22. function getData(...$args) {
  23. foreach ($args as $value) {
  24. echo $value.'<br>';
  25. };
  26. }
  27. getData($name, $sex, $age, $phone, $email);
  28. }
  29. ?>

七、课程总结

  • 今天学习了 PHP 的函数,通过上课认真听讲和认真完成老师布置的作业,使得我对 PHP 的理解和运用更加深入和熟悉。最主要的知识点是明白和掌握了多值返回,闭包和回调、引用参数、默认参数和剩余参数以及命名空间的基本的用法。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议