PHP:函数的返回值和参数,实例回调函数,匿名函数的理解

2021年05月03日 15:18:06阅读数:117博客 / JiaJieChen / php

PHP:函数的返回值和参数,实例回调函数,匿名函数的理解

一.PHP函数

  1. /**
  2. * 函数:完成特定功能的代码块~
  3. 函数:属于全局成员 全局可访问
  4. *
  5. * function 函数名称([ 参数类型限定 参数列表]) :返回值类型限定
  6. * {
  7. * #函数体
  8. * return 返回值;
  9. * 1. 函数只能返回单个值,返回值的数据类型可以是任意类型
  10. * 2. 函数碰到return语句,立即结束程序执行,return后面的代码不会被执行
  11. *}
  12. */

①自定义函数

  1. //自定义函数
  2. function setSum(float $a , int $b) :int
  3. {
  4. return $a + $b;
  5. }
  6. echo setSum(10,20);

②return返回值

大家可以看到函数体内有多个return 返回了多个数据,但是return返回值只能返回一个值,而且在函数体内只要输出了return函数脚本则不会继续执行下去,系统也是按照从上到下解析的,所以最后的出的结果是100/200=5

  1. //return返回值
  2. function setSum(float $a , int $b) :int
  3. {
  4. return $a / $b;
  5. return $a * $b;
  6. return $a + $b;
  7. }
  8. echo setSum(100,20).'<hr>';

③return数组多个值

在函数里面return 数组也是没有问题的,可以返回多个值,如果要获取数组里面的内容则要用数组key也就是键值去获取,如果不知道这是什么东西可以用print_r来打印数组

  1. //数组返回
  2. function setArr():array
  3. {
  4. return ['张帅',"echo666",'857857'];
  5. }
  6. $arr = setArr();
  7. print_r($arr);

④return对象多个值

在访问对象里面的nam值的时候可以用->来进行访问

  1. //对象返回
  2. function setOBJ() :object
  3. {
  4. return new class(){
  5. public $name = 'admin';
  6. public $email = '1234@qq.com';
  7. };
  8. }
  9. // $obj = setOBJ();
  10. // echo $obj->name;
  11. var_dump(setOBJ());
  12. echo '<hr>';

⑤return 返回json类型

中文不转为unicode-> json_encode JSON_UNESCAPED_UNICODE 256
图片不转为unicode->JSON_UNESCAPED_SLASHES 64 图片转义和文字转义相加等于320

json_decode 能将json格式还原成php能够处理的数据类型
传入第二个参数true 可以转为原始数组

  1. //转为json格式字符串返回
  2. function setJson() :string
  3. {
  4. //json_encode JSON_UNESCAPED_UNICODE 256 中文不转为unicode
  5. //JSON_UNESCAPED_SLASHES 64 图片转义和文字转义相加等于320
  6. return json_encode(['id'=>1 ,'mag'=> '验证成功'],320);
  7. }
  8. $json_arr = setJson();
  9. echo $json_arr .'<hr>';
  10. //json_decode 能将json格式还原成php能够处理的数据类型
  11. //传入第二个参数true 可以转为原始数组
  12. $res = json_decode($json_arr,true);
  13. var_dump($res);

⑤return 序列化字符返回

serialize 序列化字符返回 ,如果要解析里面的内容则要转换为php能解析的数字类型,用unserialize转换

unserialize 转换为数组类型

  1. //序列化字符返回
  2. function setLize(){
  3. //serialize 序列化字符
  4. return serialize(['id' => 1 ,'name' => 'admin@qq.com' ,'password' => '132456']);
  5. }
  6. var_dump(setLize());
  7. echo '<hr>';
  8. //unserialize转换成php能解析的类型
  9. print_r(unserialize(setLize()));

二.PHP函数参数的引用

函数参数的作用:

  • 1.没有参数时, 执行的任务是固定的
  • 2.有参数,可以根据用户传递过来的数据决定函数内的程序该如何执行,函数的参数列表是给用户调用函数的时候,提供的接口

    ①自定义函数生成表格,参数是固定的不方便用户传递属性

    1. //自定义表格属性
    2. function taBle(){
    3. $table = '<table border = "1" cellspacing = "0" >';
    4. //for循环 循环表格列和行
    5. for ($i=0; $i < 3; $i++) {
    6. //外层循环控制表格的行
    7. $table .="<tr>";
    8. for ($j=0; $j < 3 ; $j++) {
    9. //内层循环控制表格的列
    10. $table .="<td><input type='button' value='按钮' /></td>";
    11. }
    12. //外层循环控制表格的行
    13. $table .="</tr>";
    14. }
    15. echo $table;
    16. }

    ②让函数内部的参数不固定,让用户传递参数遍历表格

    在函数里面声明遍历行参,写好函数内部代码后,让用户填写函数的实参就能形成用户想要的表格样式

  1. //让函数内部的参数不固定,让用户传递参数遍历表格
  2. //函数行参有,$row 行 , $cols 列 ,$background 背景色,$content 文字内容
  3. function taBle2(int $row , int $cols ,string $background = 'blue' ,string $content = "心"){
  4. $table = "<table border = '1' cellspacing = '0' bgColor='$background' >";
  5. for ($i=0; $i < $row ; $i++) {
  6. //外层循环表格的行
  7. $table .="<tr>";
  8. //内层循环表格的列
  9. for ($j=0; $j < $cols ; $j++) {
  10. $table .="<td>$content</td>";
  11. }
  12. $table .="</tr>";
  13. }
  14. $table.="</table>";
  15. return $table;
  16. }
  17. echo taBle2(5,3,"lightblue","张帅");

三.PHP匿名函数

  • 函数:属于全局成员 全局可访问
  • 匿名函数 Anonymous functions 闭包 closures
  • 允许 临时创建一个没有指定名称的函数

此时变量名称就是这个匿名函数,我们就可以给它传递参数

在php中匿名函数,就是闭包,闭包会引发php作用域问题,php局部作用域访问全局作用域中的变量用:global 和 超全局数组$GLOBALS,闭包可以通过use访问函数外部的自由变量/父作用域中的变量

闭包可以改变上下文中的值,但是需要用的引用传递&

在工作中闭包常用作函数的返回值,返回一个闭包匿名函数,访问外部匿名函数行参$content,第一次传参是给父节点函数,第二次传参是给子节点匿名函数

当然也可以一起传参:echo demo3(“php中文网”)(“red”);

代码块

  1. <?php
  2. /**
  3. * 函数:属于全局成员 全局可访问
  4. * 匿名函数 Anonymous functions 闭包 closures
  5. * 允许 临时创建一个没有指定名称的函数
  6. */
  7. //匿名函数,没有函数名称的函数
  8. $setName = function ($name){
  9. echo $name;
  10. };
  11. //此时变量名称就是这个匿名函数,可以给他传递参数
  12. $setName("张帅");
  13. echo "<hr>";
  14. //在php中匿名函数,就是闭包,闭包会引发php作用域问题
  15. //php局部作用域访问全局作用域中的变量用:global 和 超全局数组$GLOBALS
  16. $name = "张起灵";
  17. $email = "13456@qq.com";
  18. //闭包可以通过use访问函数外部的自由变量/父作用域中的变量
  19. $demo = function() use ($name,$email){
  20. return sprintf('name = %s <br> email = %s <br>',$name , $email);
  21. };
  22. echo $demo() . "<hr>";
  23. //闭包可以改变上下文中的值,但是需要用的引用传递&
  24. $name1 = "我是自由/全局变量";
  25. echo $name1 ."<br>";
  26. $demo2 = function ($content) use (&$name1){
  27. return $name1 = $content;
  28. } ;
  29. $demo2("我可以改变自由/全局变量");
  30. echo $name1 ."<hr>";
  31. //在工作中闭包常用作函数的返回值
  32. function demo3 ($content){
  33. //返回一个闭包匿名函数,访问外部匿名函数行参$content
  34. return function ($color) use ($content){
  35. return sprintf("<h3 style='color:%s'>%s</h3>",$color,$content);
  36. };
  37. };
  38. //第一次传参是给,父亲节点函数
  39. $demo4 = demo3('php中文网');
  40. //第二次传参是给,子节点匿名函数
  41. echo $demo4('green');
  42. //一起传参
  43. echo demo3("php中文网")("red");
批改状态:合格

老师批语:

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
JiaJieChen
  • JiaJieChen· 2021-05-04 11:55:422楼
  • 感兴趣的朋友可以看下面博主的文章,内容比较丰富!

  • 回复
  •  一纸荒凉* Armani
  •  一纸荒凉* Armani· 2021-05-03 17:37:431楼
  • 这个太秀了,支持博主,大佬有兴趣也可以看下我的博客,说不定有收获哦~

  • 回复
  • 博主信息
    JiaJieChen
    博文
    41
    粉丝
    2
    评论
    5
    访问量
    26921
    积分:0
    P豆:84
    博文分类
    php20篇
    HTML+CSS+JavaScript+jQuery+Vue20篇