欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

函数返回值和回调函数

程序员文章站 2022-04-05 12:59:06
...

函数返回值和回调函数

  1. // !设置时区,有个类同查询时区的函数
  2. date_default_timezone_set("PRC");
  3. // 查询时区函数
  4. echo date_default_timezone_get();
  5. // todo命名函数,$a与$b为形参,调用时需传入实际参数
  6. function sum($a,$b){
  7. return $a+$b;
  8. };
  9. // 调用命名函数
  10. echo sum(10,20);
  11. echo '<pre>';
  12. echo date("Y-m-d H:i:s");
  13. echo '<pre>';
  14. // * ()括号内的string表示参数只能传字符串类型,后面的string表示返回值只能是字符串类型
  15. function total(string $total):string{
  16. return "{$total}的优质商品";
  17. };
  18. // 因上面的函数指定了传参类型,调用时只能传指定类型参数
  19. echo total('物美价廉');
  20. echo total(10);//就算传入整型也会自动被转换成字符串型
  21. echo '<pre>';
  22. /**
  23. * 参数:可选的,对外提供一个接口,供函数调用者按照自已的意愿改变函数体内的执行行为
  24. *参数 有形参和实参
  25. * 默认参数就是有默认值的参数,如果不传或少传就会默认参数的值
  26. * 参数是从左往右求值,所以默认参数要放在右边
  27. */
  28. function getAmount(&$price,$num,$discount=0.9){
  29. // *=是$price = $price*$discount的简写
  30. $price *= $discount;
  31. $amount = $price*$num;
  32. return "总共需要支付{$amount}";
  33. };
  34. // *如果函数使用&引用符,将会改变全局变量的值
  35. $price = 800;
  36. $num = 5;
  37. $discount = 0.8;
  38. echo getAmount($price,$num,$discount);
  39. //因函数使用了&引用符,所以变量的值将会改变输出
  40. echo $price;
  41. // !函数返回值,可以任意类型
  42. function test(){
  43. // 返回json类型的数据,后面的320代表不转义中文和\
  44. return json_encode(['id'=>1,'name'=>'转json格式'],320);
  45. // 返回表达式布尔值
  46. return '1'==1;
  47. // 返回MD5加密字符串
  48. return md5('123456');
  49. // 返回对象
  50. return new stdClass();
  51. // 返回多维数组
  52. return array([
  53. ['id'=>1,'name'=>'张三','conten'=>'多维数组'],
  54. ['id'=>2,'name'=>'李四','conten'=>'多维数组'],
  55. [ 'id'=>3,'name'=>'王五','conten'=>'多维数组'],
  56. ]);
  57. return array('id'=>1,'name'=>'张三','conten'=>'关联数组');
  58. return array('123','索引数组');//返回关联数组
  59. return '返回字符串';
  60. // 返回浮点型
  61. return 25.55;
  62. return 1;//返回整型
  63. };
  64. $res = test();
  65. var_dump($res);
  66. // !命名函数全局变量的调用方法
  67. $name = '张老师';
  68. $tel = 13800138000;
  69. function test1(){
  70. /**
  71. * 函数内要调用全局中的变量方法
  72. * 1 使用全局变量引入global
  73. * 2 使用超全局变量$GLOBALS['name']
  74. * */
  75. // 全局引用
  76. global $name,$tel;
  77. return "{$name}的手机号码是{$tel}";
  78. // 超全局调用
  79. return "{$GLOBALS['name']}的手机号码是:{$GLOBALS['tel']}";
  80. };
  81. // 调用函数
  82. echo test1();
  83. /**
  84. * !匿名函数或叫回调函数的全局变量调用方法
  85. *匿名函数调用全局方法 use (全局变量名)
  86. */
  87. //
  88. $test2 = function () use ($name,$tel){
  89. return "{$name}的手机号码是:{$tel}";
  90. };
  91. // 调用匿名函数
  92. echo $test2();
  93. // 回调函数调用方法Closure 代表闭包
  94. echo "<pre>";
  95. function test3( Closure $func,$qq){
  96. $msg = $func();
  97. return "{$msg}<br>QQ号码是:{$qq}";
  98. };
  99. echo test3($test2,'123456');
  100. echo '<pre>';
  101. $arr2 = [1,10,30,45,28,30,22];
  102. $arr = range(0,500);
  103. $odd =function($arr){
  104. for($i = 0 ; $i < count($arr); $i++){
  105. if($arr[$i] % 2 ==0){
  106. $newArr[] = $arr[$i];
  107. }
  108. }
  109. return $newArr;
  110. };
  111. // 第一个参数为匿名函数,第二个为传任意数组
  112. function newSum($func,$arr){
  113. $newArr = $func($arr);
  114. return array_sum($newArr);
  115. };
  116. // todo 调用传参第一个是匿名函数的变量名,第二个参数为任意数组
  117. var_dump(newSum($odd,$arr));