博客列表 >PHP基本函数,基本运算方式,数组回调等

PHP基本函数,基本运算方式,数组回调等

阿心
阿心原创
2020年04月22日 14:08:07626浏览

了解函数的基本运用和语法

  1. <?php
  2. function foo($a,$b){
  3. echo $a+$b;
  4. }
  5. foo(20,30);
  6. echo '<hr>';
  7. //函数运用和写法有几种类型:
  8. //1,限制其值:float(浮点型)/string(整数型)
  9. //注意语法:如果函数内使用echo 就不可以使用string。否则会报错,使用return则不报错。尽量使用return来返回。
  10. //使用return也可以省略string/float。
  11. function foo1(int $a,int $b):string
  12. {
  13. return $a+$b;
  14. }
  15. echo foo1(10.1,20.2);

函数定义

  1. <?php
  2. //函数常规写法有:驼峰命名(humpName),蛇形命名(snake_name)函数名、方法名、类名不区分大小写
  3. //1,用户自定义(用户可以根据自己定义一个函数,函数必须由大小字母,下划线,数字组成,且不可以数字开头)
  4. //函数有型参和实参。型参的值可以随实参而改变
  5. //下面获取价格,可以加入float也可以不加入。默认应该就是float
  6. function getPrice($monay,$discount)
  7. {
  8. return '该商品为'."$discount".'折,价格为='.$monay*$discount;
  9. }
  10. echo getPrice(322,0.9);
  11. echo '<hr>';
  12. //2,系统函数
  13. //系统函数指:系统定义好的函数
  14. //mb_substr:获取字符串的部分数据;如下:
  15. //系统定义好的函数,无需使用function。就可以直接使用。
  16. $str="我要从这句话里面获取到前面的7个字";
  17. echo mb_substr($str,0,7);
  18. echo '<hr>';
  19. //3,可变函数:如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途
  20. //可变函数不能用于例如 echo,print,unset(),isset(),empty(),include,require以及类似的语言结
  21. //getPrice就成为了一个函数而不是值
  22. $func="getPrice";
  23. echo '价格我改为:'.$func(1000,0.3);
  24. echo '<hr>';
  25. //4,匿名函数也叫闭包(closures).
  26. //闭包函数也可以作为变量的值来使用
  27. //PHP 会自动把此种表达式转换成内置类 Closure 的对象实例。把一个 closure 对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号:
  28. $greet=function ($name)
  29. {
  30. printf("hello %s\r\n",$name);
  31. };//别忘了分号
  32. $greet('word');
  33. $greet('php');
  34. echo '<hr>';
  35. //闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。
  36. $message='hello';
  37. //没有继承 没有use 所以他不能继承或调用$message的数据。结果为NULL
  38. $example=function(){
  39. var_dump($message);
  40. };
  41. echo $example();
  42. echo '<hr>';
  43. //继承 $message 方法如下:
  44. $example=function() use ($message){
  45. var_dump($message);
  46. };
  47. echo $example();
  48. echo '<hr>';
  49. //计算商品价格
  50. $dicscount=0.9;
  51. $paymoney=function ($money,$num) use ($dicscount)
  52. {
  53. $total=$money*$num;
  54. //返回值为:合并(?)运算
  55. return $total>1000 ? $total*$dicscount:$total;
  56. //拆分运算
  57. /*if($total>1000){
  58. return $total=$total*$dicscount;
  59. }*/
  60. };
  61. echo $paymoney(100,31);
  62. echo'<hr>';
  63. //如果父作用域是一个函数?则一个套一个
  64. $paymoney2=function($dicscount){
  65. //把$dicscount传到下面的$discount
  66. return function($money,$num) use($dicscount){
  67. $total=$money*$num;
  68. return $total>3000 ? $total*$dicscount : $total;
  69. };
  70. };
  71. echo $paymoney2(0.8)(202,21);

数组返回,拼接

  1. <?php
  2. //返回值(return)
  3. //可以返回包括数组和对象的任意类型
  4. function test1($num1,$num2){
  5. return $num1+$num2;
  6. //如果省略了 return,则返回值为 NULL。
  7. //$num1+$num2;
  8. }
  9. echo test1(100,20);
  10. echo '<hr>';
  11. //字符串拼装
  12. function test2(){
  13. $num1=3;
  14. $num2='你很成功';
  15. return $num1. '个人过去看你,'.$num2;
  16. }
  17. echo test2();
  18. echo '<hr>';
  19. //数组返回
  20. function test3():array
  21. {
  22. return ['num1'=>1,'num2'=>'我很色'];
  23. }
  24. //print_r(test3());
  25. //打印格式化需要使用printf
  26. $res=print_r(test3(),true);
  27. printf('<per>%s</per>',$res);
  28. //if判断语句,三目运算符
  29. echo test3()['num1'] == 2 ? '<span style="color:red">'.test3()['num2'].'</span>' : '<span style="color:#CCC">色不到你</span>';
  30. echo '<hr>';
  31. function test4():array
  32. {
  33. return $arr=array(1,2,3,4,5,6,7,8,8);
  34. }
  35. print_r(test4());
  36. echo '<hr>';
  37. //将json格式的字符串还原/解析为php对象/数组
  38. //json_decode接受一个 JSON 格式的字符串并且把它转换为 PHP 变量
  39. //$json里面的数据可以理解为k=>v,,a=>1
  40. //assoc 当该参数为 TRUE 时,将返回 array 而非 object 。
  41. $json='{"a":1,"b":2}';
  42. echo $json;
  43. echo '<br>';
  44. var_dump(json_decode($json,true));
  45. echo '<br>';
  46. var_dump(json_decode($json));
  47. echo '<hr>';
  48. //系列化返回多个值
  49. //serialize — 产生一个可存储的值的表示
  50. function test5():string
  51. {
  52. return serialize(['status'=>1, 'message'=>'成功']);
  53. }
  54. echo test5();
  55. echo '<br>';
  56. //返回结果:a(数组):2(有两个元素):{s(第一个元素为sting类型):6(长度=>status):"status";i(整数int):1(值);s:7:"message";s:6:"成功";}//后面类推,3个字节=一个汉字
  57. //需要反序列化才可以使用。
  58. //unserialize — 从已存储的表示中创建 PHP 的值
  59. //%为占位符。%s占位给print_r($arr,trun)
  60. $arr=unserialize(test5());
  61. printf('<pre>%s</pre>',print_r($arr,2));

函数参数

  1. <?php
  2. //函数参数
  3. //1,值参数(值传递)
  4. function test1($num){
  5. return $num*=3;
  6. }
  7. echo test1(30.3);
  8. echo '<br>';
  9. $val=60;
  10. echo test1($val);
  11. echo '<br>';
  12. echo test1($num);//这里是直接印了初始化的$num(并没有赋值,所以结果为:0;
  13. echo '<br>';
  14. //这里没有调用函数就直接输出他的值
  15. echo $val;
  16. echo '<hr>';
  17. //2,引用参数“&”
  18. function test2( &$age){
  19. return $age+=2;
  20. }
  21. $val=10;
  22. test2($val);
  23. //调用函数后,通过 & 找到函数里面的的值
  24. echo $val;
  25. echo '<hr>';
  26. //默认参数
  27. //function test3(float $a,float $b,string $opt="+")先给他定义类型和默认进来是“+”运算
  28. function test3($a,$b,$opt){
  29. $res=0;
  30. switch($opt){
  31. case "+":
  32. $res="$a+$b=".($a+$b);
  33. break;
  34. case "-":
  35. $res="$a-$b=".($a-$b);
  36. break;
  37. case "*":
  38. $res="$a*$b=".($a*$b);
  39. break;
  40. case "/":
  41. $res="$a/$b=".($a/$b);
  42. break;
  43. default:
  44. $res="非法操作";
  45. }
  46. //switch计算结果后。rutern返回$res
  47. return $res;
  48. }
  49. $res=test3(100,100,'++');
  50. echo $res;
  51. echo '<hr>';
  52. //剩余参数
  53. //如果我们需要计算 一大串数字,使用(func_num_args,func_get_arg,func_get_args)
  54. function test5(){
  55. //func_num_args-返回传递给函数的参数数(就是我传了多少个数值,他就返回多少个数字
  56. //return func_num_args();//结果为5个数值(索引)
  57. //func_get_arg — 返回参数列表的某一项
  58. //return func_get_arg(3);//需要写入索引,写入第几个索引就显示第几个数值;结果为4
  59. //function_get_args-返回一个包含函数参数列表的数组(array)
  60. //return func_get_args();
  61. $total=0;
  62. //计算逻辑:判断$i++小于func_num_args总共的索引
  63. for($i=0;$i<func_num_args();$i++)
  64. {
  65. //开始计算每一个索引对应的数值就是func_get_arg数值
  66. $total+=func_get_arg($i);
  67. }
  68. return $total;
  69. }
  70. echo test5(1,2,3,4,5);
  71. echo '<hr>';
  72. //剩余参数简写;
  73. //array_sum — 计算数组中所有值的和
  74. //注意写法;
  75. function test6(...$arr){
  76. return array_sum($arr);
  77. }
  78. //下面两种都可以。
  79. echo test6(1,2,3,4,5,6,7,8,9,10).'<br>';
  80. $arr=[1,5,6,78,98,2,2];
  81. echo test6(...$arr);
  82. //错误写法:这种情况也不能使用地址符&
  83. // echo $arr;
  84. echo '<hr>';
  85. //数组解包
  86. //list — 把数组中的值赋给一些变量
  87. //像 array() 一样,这不是真正的函数,而是语言结构。list()用一步操作给一组变量进行赋值。
  88. //简单理解:
  89. $arr=[1,2,3];
  90. list($a,$b,$c)=$arr;
  91. echo $a,'--',$b,'--',$c,'<br>';
  92. $user[]=['xz',20,'man'];
  93. $user[]=['xh',18,'wo'];
  94. $user[]=['xw',50,'si'];
  95. foreach($user as list($name,$age,$gender))
  96. {
  97. printf('<pre>'."name=%s \n"."age=%s \n".'gender=%s'.'</pre>',$name,$age,$gender);
  98. }

回调函数

  1. <?php
  2. //回调函数;
  3. //range — 建立一个包含指定范围单元的数组
  4. //初步理解:
  5. foreach(range(0,10) as $num)
  6. {
  7. echo $num;
  8. }
  9. echo '<br>';
  10. //可以是顺序,也可以是反序
  11. foreach(range(20,10) as $num)
  12. {
  13. echo $num;
  14. }
  15. echo '<br>';
  16. //range就是创建了一个数组array从1~10的数值
  17. foreach(range('a','z') as $en)
  18. {
  19. echo $en;
  20. }
  21. echo '<br>';
  22. //反顺序执行
  23. foreach(range('z','a') as $en)
  24. {
  25. echo $en;
  26. }
  27. echo '<hr>';
  28. $arr=range(0,50);
  29. // echo $arr;
  30. print_r($arr);
  31. echo '<br>';
  32. echo ((4%2)===0) ? "偶数":"奇数";
  33. echo '<br>';
  34. //如果我只需要返回偶数;
  35. //array_map — 将回调函数作用到给定数组的单元上
  36. $res=array_map(function (int $item){
  37. if($item % 2 === 0){
  38. return $item;
  39. }
  40. },$arr);
  41. //过滤奇数,只打印偶数
  42. //printf('<pre>%s<pre>',print_r($res,true));
  43. //array_filter — 用回调函数过滤数组中的单元
  44. $res= array_filter($res,function($item){
  45. return $item;
  46. });
  47. //简单理解:
  48. //print_r(array_values($arr)).'<br>';//执行结果显示和range一样。
  49. //array_values — 返回数组中所有的值
  50. $res=array_values($res);
  51. printf('<pre>%s</pre>',print_r($res,true));

函数命名空间

  1. <?php
  2. //函数命名空间:namespace "名称" 来表示;
  3. namespace ns1{
  4. function test($a,$b):string
  5. {
  6. return $a+$b;
  7. }
  8. }
  9. //中命名空间{}之外可能不存在任何代码,所以下面想输出,必然报错
  10. //echo '<br>';
  11. namespace ns2{
  12. function test():string
  13. {
  14. return __FUNCTION__.'<br>';
  15. }
  16. }
  17. //全局空间
  18. namespace
  19. {
  20. echo \ns1\test(10,10);
  21. ECHO '<BR>';
  22. echo \ns2\test();
  23. }

总结:经过几天时间,对与符号基本上不怎么会打错了。简单的运用还是看的出来的,就是稍微复杂一点的就很难理解。看上去似懂非懂的,复杂一点的就不知道怎么运用了。

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