博客列表 >函数的语法、类型、返回值、参数

函数的语法、类型、返回值、参数

王小飞
王小飞原创
2020年04月21日 12:37:03705浏览
  1. <?php
  2. // 函数语法
  3. // 二数求和
  4. //function函数的声明 func1自定义的函数名称 int定义函数是整数 float输入函数为小数
  5. function func1(int $a, int $b) : float
  6. {
  7. // 显式 return隐式返回
  8. return $a + $b;
  9. // 隐式: 结束大括号的时候会自动返回
  10. }
  11. // 函数调用: 按名称
  12. echo func1(10.5, 20.3);
  13. echo '<hr>';
  14. // 自定义函数 getPrice名称为自定义 float为小数 float输出为小数
  15. function getPrice(float $money, float $discount) : float
  16. {
  17. // 隐式返回 乘
  18. return $money * $discount;
  19. }
  20. // 打印'实付金额: '打印的文字 getPrice自定义的变量名称 1000*0.5 打5折
  21. echo '实付金额: ' . getPrice(1000, 0.5);
  22. echo '<hr>';
  23. // 2. 系统函数
  24. // function mb_substr()为系统预制函数 直接打印调用
  25. $str = '哈尔滨防控漏洞为全国敲响新的警钟';
  26. // 仅获取前5个字符
  27. echo mb_substr($str, 0, 5);
  28. echo '<hr>';
  29. // 3. 可变函数
  30. // 变量的内容为函数名称
  31. $funcName = 'getPrice';
  32. echo '实付金额: ' . $funcName(2000, 0.5);
  33. echo '<hr>';
  34. // 4. 匿名函数: 闭包/循环, 可以访问父作用域的变量
  35. $discount = 0.5;
  36. // $discount 的作用域是全局
  37. // 把整段函数放到变量里面 float $money为价格可以是小数 int $num为数量 整数 float输出小数
  38. $getAmount = function (float $money, int $num) use ($discount) : float
  39. {
  40. // 执行乘 单价乘数量
  41. $amount = $money * $num;
  42. // 隐式输出 前如果amount钱 大于等于2000 就打折 0.6 :如果不大于就原价
  43. return $amount >= 1000 ? $amount * $discount : $amount;
  44. };
  45. echo '实付金额: ' . $getAmount(200, 20);
  46. echo '<hr>';
  47. // 如果父作用域又是一个函数 函数里面套函数
  48. $f = function ($discount) {
  49. // 子函数
  50. // 隐式输出 money钱数 num折扣 use ($discount) 访问全局变量
  51. return function (float $money, int $num) use ($discount) : float
  52. {
  53. // 金钱=钱数*折扣
  54. $amount = $money * $num;
  55. // 隐式输出 如果钱数大于等于2000 打折数discount 否则 amount原价
  56. return $amount >= 1000 ? $amount * $discount : $amount;
  57. };
  58. };
  59. // $a = var_dump($f(0.6));
  60. // echo gettype( $f);
  61. // $tmp = $f(0.6);
  62. // echo '实付金额: ' .$tmp(200, 20);
  63. echo '实付金额: ' .$f(0.1)(100, 20);
  64. // 200 * 20 = 4000 * 0.6 = 2400
  65. echo '<hr>';
  66. echo '<hr>';
  67. // 返回值
  68. // 原则: 单值返回
  69. // 如果需要返回多值
  70. // 1. 字符串拼装
  71. // 2. 数组
  72. // 3. JSON字符串
  73. // 4. 序列化: 字符串
  74. // 1. 字符串拼装
  75. // demo1() 自定义变量 string输出字符串类型
  76. function demo1() : string
  77. {
  78. $status = 1;
  79. $message = '成功';
  80. return $status .': ' . $message;
  81. }
  82. echo demo1();
  83. echo '<hr>';
  84. // 适合处理大量的php+html混写
  85. // 这种返回的格式是用户自定义的,前端处理非常麻烦
  86. // 2. 通过数组
  87. // demo1() 自定义变量 array输出字符串类型
  88. function demo2() : array
  89. {
  90. // 隐式输出 'status'=>10,定义验证类型 message正确则返回成功
  91. return ['status'=>10, 'message'=>'成功'];
  92. }
  93. // echo '<pre>'.print_r(demo2(), true).'</pre>';
  94. // print_r字符串打印 加上true格式化打印
  95. $res = print_r(demo2(), true);
  96. // 把内容放到res 在打印res
  97. printf('<pre>%s</pre>', $res);
  98. // 最后打印demo2() 给值为10 span定义成功的颜色 ?是10则成功 否则验证失败
  99. echo demo2()['status'] == 10 ? '<span style="color:green">'.demo2()['message']. '</span>' : '验证失败';
  100. echo '<hr>';
  101. // 3. 通过JSON返回
  102. // json: 是用js对象字面量的方式来表示数据,是一种轻量级通用的数据交换或传输格式
  103. // json本质上就是一个具有一定结构和格式的字符串, 不过这种格式得到了公认,几乎所有编程语言都有支持它的接口
  104. // demo1() 自定义变量 array输出字符串类型
  105. function demo3() : string
  106. {
  107. // json_encode(): 将php数据编码为json格式的字符串返回
  108. return json_encode(['status'=>1, 'message'=>'成功']);
  109. }
  110. $data = demo3();
  111. echo $data;
  112. // 将json格式的字符串还原/解析为php对象/数组 将要输出的放到变量var里面
  113. $var = json_decode($data, true);
  114. // 打印变量
  115. print_r($var);
  116. echo '<hr>';
  117. // 4. 通过序列化返回多个值
  118. // 其实json也是一种序列化
  119. // demo1() 自定义变量 array输出字符串类型
  120. function demo4() : string
  121. {
  122. // serialize序列化
  123. return serialize(['status'=>1, 'message'=>'成功']);
  124. }
  125. echo demo4();
  126. // 反序列化才可以使用 否则返回详细参数
  127. // 将内容放到变量里面
  128. $arr =unserialize(demo4());
  129. // 打印变量
  130. printf('<pre>%s</pre>', print_r($arr,true));
  131. echo '<hr>';
  132. echo '<hr>';
  133. // 函数参数
  134. // 1. 值参数
  135. // 2. 引用参数
  136. // 3. 默认参数
  137. // 4. 剩余参数
  138. // 1. 值参数, 默认
  139. // 定义一个函数为demo10 为小数类型arg 输出也是小数
  140. function demo10(float $arg) : float
  141. {
  142. // 隐式输出 *=2
  143. return $arg *= 2;
  144. }
  145. $value = 100;
  146. // 打印 100*2
  147. echo demo10($value) , '<br>';
  148. // 在函数中改变了调用参数的值,但原始调用参数并没有发生变化
  149. echo $value;
  150. echo '<hr>';
  151. // 2. 引用传递 arg前面加上& 值会累加
  152. function demo20(float &$arg) : float
  153. {
  154. return $arg *= 2;
  155. }
  156. $value = 100;
  157. echo demo20($value) , '<br>';
  158. // 如果在参数前面使用了取地址符,则会改变原始调用参数的值
  159. echo $value;
  160. echo '<hr>';
  161. // 3. 默认参数
  162. // 默认参数必须写在必选参数的后面
  163. // 定一个函数为demo30 小数小数 string默认执行+
  164. function demo30(float $a, float $b, string $opt = '+' )
  165. {
  166. $res = 0;
  167. switch ($opt) {
  168. // 定义为+
  169. case '+':
  170. $res = "$a + $b = " . ($a + $b);
  171. break;
  172. // 定义为-
  173. case '-':
  174. $res = "$a - $b = " . ($a - $b);
  175. break;
  176. // 定义为*
  177. case '*':
  178. $res = "$a * $b = " . ($a * $b);
  179. break;
  180. // 定义为+/
  181. case '/':
  182. $res = "$a / $b = " . ($a / $b);
  183. break;
  184. // 如果给的值不是+-*/ 就返回非法操作
  185. default:
  186. $res = '非法操作符';
  187. }
  188. return $res;
  189. }
  190. echo demo30(10, 20, '*'), '<br>';
  191. // echo demo3(10, 20, '*'), '<br>';
  192. // echo demo3(10, 20, '#'), '<br>';
  193. echo '<hr>';
  194. echo '<hr>';
  195. // 4. 剩余参数
  196. function demo40(float $a, float $b, float $c ) : float
  197. {
  198. return $a + $b + $c;
  199. }
  200. // 计算三个数之和
  201. echo demo40(1,2,3), '<br>';
  202. echo '<hr>';
  203. function demo50( )
  204. {
  205. // 参数数量
  206. // return func_num_args();
  207. // 根据索引返回指定的调用参数
  208. // return func_get_arg(2);
  209. // return func_get_args();
  210. $total = 0;
  211. // for ($i = 0;$i <func_num_args(); $i++ ) {
  212. // $total +=func_get_arg($i);
  213. // }
  214. // return $total;
  215. foreach (func_get_args() as $value) {
  216. $total +=$value;
  217. }
  218. return $total;
  219. }
  220. // echo demo5(3,4,7,8,24);
  221. print_r(demo50(3,4,7,8,24));
  222. echo '<hr>';
  223. // echo demo5(1,2,3,4,5,6,9,22,67), '<br>';
  224. // 使用剩余参数简化
  225. // ...: 参数归纳:
  226. function demo6(...$args ) : float
  227. {
  228. // return $args; array_sum 求和参数 求和args
  229. return array_sum($args);
  230. // rray_product求积
  231. // return array_product($args);
  232. }
  233. // print_r(demo6(3,4,7,8,24));
  234. // echo demo6(1,2,3,4,5,6,9,22,67), '<br>';
  235. // 调用参数
  236. // 将内容放到一个变量里面
  237. $arr = [1,2,3,4,5,6,9,22,67];
  238. // ...:
  239. // 1. 用在函数的形式参数列表中,表示"收集",将多个离散的参数打包到一个数组中处理
  240. // 2. 用在函数的调用参数列表中,表示"展开",还原将一个数组展开成一个个离散的值
  241. // 打印 demo6 ...展开 arr里面的内容
  242. print_r(demo6(...$arr));
  243. echo '<hr>';
  244. // $config = ['localhost', 'phpedu', 'uft8', '3306'];
  245. // $dsn = 'mysql:host=localhost;dbname=phpedu;charset=utf8;port=3306';
  246. // $db = [$dsn, $username, $password];
  247. // $pdo = new PDO(...$db);
  248. // 扩展知识
  249. $user[] = [100, 'admin', 90];
  250. $user[] = [110, 'peter', 60];
  251. $user[] = [120, 'jack', 98];
  252. // 数组解包
  253. // js中解构赋值, php中也有解构
  254. foreach ($user as list($id, $name)) {
  255. printf('id=%s, name=%s<br>', $id, $name);
  256. }

个人总结:

整体都能学明白,需要加深对英文词语的认识,继续努力!

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