Blogger Information
Blog 33
fans 0
comment 0
visits 27767
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
服务端 - PHP - 函数
Original
496 people have browsed it

服务端 - 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 的理解和运用更加深入和熟悉。最主要的知识点是明白和掌握了多值返回,闭包和回调、引用参数、默认参数和剩余参数以及命名空间的基本的用法。
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