博客列表 >php运算符和流程控制讲解

php运算符和流程控制讲解

移动用户-1144300
移动用户-1144300原创
2020年04月18日 16:52:54510浏览

运算符

  1. <?php
  2. // 注意写的时候符号不能在中文时输入符号会报错
  3. // 取模:取余数
  4. echo 10 % 3;
  5. echo '<hr>';
  6. // 自加
  7. $i = 1 ;
  8. echo $i,'<br>';
  9. // 在++放后面那一部还是原来的值
  10. // 在下一次调用才是自加过后的值
  11. echo $i++,'<br>';
  12. echo $i,'<br>';
  13. // ++放前面那一部结果直接就是加一后的值
  14. // --同理
  15. echo ++$i,'<br>';
  16. echo $i++,'<br>';
  17. echo $i,'<br>';
  18. echo '<hr>';
  19. // --
  20. $q=10;
  21. echo $q,'<br>';
  22. echo $q--,'<br>';
  23. echo $q,'<br>';
  24. echo --$q,'<br>';
  25. echo $q,'<br>';
  26. echo '<hr>';
  27. // 幂运算**: 幂运算需要 `php5.6+`版本
  28. $w=2; $e=5;
  29. echo $w * $e;
  30. echo '<hr>';
  31. // .是将左右两边的内容不管是不是字符串都会强制转换成字符串
  32. // ,不会这样做会让内容以原本的数据返回
  33. echo '大家好'.'我是xxx';
  34. echo '大家好','我是xxx';
  35. echo '<hr>';
  36. // 赋值运算符
  37. $i=2;
  38. $i=$i+1;
  39. echo $i ,'<br>';
  40. // 简写
  41. // $i +=1;
  42. echo $i ,'<br>';
  43. // 其他同理
  44. echo '<hr>';
  45. // 将内容添加到$i的后面
  46. $i .=20;
  47. echo $i ,'<br>';
  48. echo '<hr>';
  49. // ==表示值相等。也不要求类是否相等
  50. // ===表示全等。要求值和类型一样
  51. if(2=='5') echo '相等';else echo '不相等';
  52. echo '<br>';
  53. if(5=='5') echo '相等';else echo '不相等';
  54. echo '<br>';
  55. // ===表示全等。要求值和类型一样
  56. if(5==='5') echo '相等';else echo '不相等';
  57. echo '<br>';
  58. if('5'==='5') echo '相等';else echo '不相等';
  59. echo '<hr>';
  60. // 不相等!=
  61. $i=2;
  62. echo $i != 2 ?'不相等':'相等','<br>';
  63. // 不全等!==
  64. echo $i !== '2' ?'不全等':'全等';
  65. echo '<hr>';
  66. // 太空船比较符<=> :需要7.0及以上版本支持
  67. // `<=>`: 也叫组合比较符, 例如`c`, 有三种返回结果
  68. $i = 11;$p = 12;
  69. echo $i <=> $p ,'<br>';
  70. var_dump(10 <=> 20);
  71. $i = 11;$p = 12;
  72. // 运用循环在不同情况下输出a、b、c。
  73. if(($i<=>$p)>0):
  74. echo 'a';
  75. elseif(($i<=>$p)<0):
  76. echo 'b';
  77. else:
  78. echo 'c';
  79. endif;
  80. echo '<hr>';
  81. // 逻辑运算符
  82. // 1、&&:与的意思可以理解为乘法算式
  83. // true=1 false=0
  84. $i=2;$p=2;$w=4;
  85. // flase * flase = flase
  86. // 最终输出是假,及下面设定的不满足
  87. // $i>$p && $i>$w
  88. // ? '正确' :'错误'
  89. echo $i>$p && $i>$w ?'满足':'不满足','<br>';
  90. $i=5;$p=2;$w=4;
  91. // true * true = true
  92. echo $i>$p && $i>$w ?'满足':'不满足','<br>';
  93. var_dump($i>$p && $i>$w);
  94. echo '<br>';
  95. // 在var_dump($i>$p && $i>$w)后面加无用
  96. var_dump($i>$p && $i>$w) ?'满足':'不满足';
  97. echo '<hr>';
  98. // 2、|| :或的意思。可以理解为加法
  99. // true=1 false=0
  100. // 这里不可以用单独一个=
  101. // 单独一个等号表示给变量赋值
  102. // 是否相等用== 是否全等用===
  103. $i=1;$p=2;$w=4;
  104. echo $i<$p || $i>$w ?'最少有一个满足':'两个都不满足','<br>';
  105. echo $i>$p||$i==$w ?'最少有一个满足':'两个都不满足';
  106. echo '<hr>';
  107. // 3、!非的意思 :意思是取反 得到的是true取成false
  108. // 得到false取成true
  109. $q=false;
  110. if($q) echo '取反成功';else echo '取反失败','<br>';
  111. if(!$q) echo '取反成功';else echo '取反失败';
  112. echo '<hr>';
  113. // 三元运算符
  114. // 1、 ? :简化双分支if 仅判断表达式
  115. // 简单来说 ? 后面跟满足条件后要输出的内容
  116. // :后面跟不满足条件后要输出的内容
  117. echo 1>2 ? '正确':'错误','<br>';
  118. echo 1<2 ? '正确':'错误';
  119. echo '<hr>';
  120. // 2、 ?? 合并运算符,设置默认值。 判断变量存在且不为null
  121. // 首先判定变量是否存在然后判定是不是null。不存在或为null就输出 : 后面的内容
  122. // 存在且值不是null就输出
  123. $t='name';
  124. $t = isset($t) ? $t :'root';
  125. echo $t,'<br>';
  126. // 用 ?? 简化代码达到相同的效果
  127. // $t=null;
  128. $t=111;
  129. $t = $t ??'dwa';
  130. echo $t;
  131. echo '<hr>';
  132. // @ 错误屏蔽符:屏蔽所有运行错误
  133. echo $y ?'错误屏蔽成功':'错误屏蔽失败';
  134. echo '<hr>';
  135. // $y=1;
  136. // 这个好像判定不是按是否屏蔽成功 而是按照$y是true还是false
  137. // $y未定义所以是false
  138. echo @$y ?'错误屏蔽失败':'错误屏蔽成功';
  139. echo '<hr>';
  140. (10/0);
  141. @(10/0);

流程结构

1.分支结构

  1. <?php
  2. echo '<h1>'.'流程控制'.'</h1>';
  3. echo '<h2>'.'1、分支结构'.'</h2>';
  4. // 分支结构
  5. // 1、单分支 if(){...}
  6. // 进货 售价
  7. $i=100;$p=200;
  8. if($i<$p){
  9. $p=$p*0.9;
  10. echo $p,'<br>';
  11. }
  12. echo $p;
  13. echo '<hr>';
  14. // 单分支模板语法
  15. // 如果代码体只有一行,可以省略大括号
  16. // 进货 售价
  17. $i=100;$p=200;
  18. if($i<$p) $p=$p*0.9; echo $p,'<br>';
  19. // 有一种替代语法 : 模板语法, 用在与html代码混编的时候
  20. // 模板语法的目标是: 干掉大括号
  21. $i=100;$p=200;
  22. if($i<$p):
  23. $p=$p*0.9;
  24. echo $p,'<br>';
  25. endif;
  26. echo '<hr>';
  27. // 双分支 if(){...}
  28. // 进货 售价
  29. $i=100;$p=200;
  30. if($p-$i>=100){
  31. $p=$p*0.9;
  32. echo '打折购买'.$p,'<br>';
  33. }else{
  34. echo '售价购买'.$p;
  35. }
  36. $i=100;$p=150;
  37. if($p-$i>=100){
  38. $p=$p*0.9;
  39. echo $p,'<br>';
  40. }else{
  41. echo '售价购买'.$p;
  42. }
  43. echo '<hr>';
  44. // 双分支模板语法
  45. // 注意如果代码体只有一行,可以省略大括号。指的是没有else这样的转折
  46. // 但是如果代码是多行的或不能单纯省略大括号那样会报错。要按模板语法写
  47. $i=100;$p=200;
  48. if($p-$i>=100):
  49. $p=$p*0.9;
  50. echo '打折购买'.$p,'<br>';
  51. else:
  52. echo '售价购买'.$p;
  53. endif;
  54. $i=100;$p=150;
  55. if($p-$i>=100):
  56. $p=$p*0.9;
  57. echo $p,'<br>';
  58. else:
  59. echo '售价购买'.$p;
  60. endif;
  61. echo '<hr>';
  62. // 多行分支 if(){...}elseif(){...}elseif(){...}···else{...}
  63. // 当然最后一个else要不要都可以用elseif也是一样的效果但是最好是用else这样方便阅读和保持过完整
  64. // 同事假设要所有大于进价的折扣都设置完了,要是低于进价大话直接用else就包括了。用elseif还要写范围麻烦
  65. // 所以要以els结尾
  66. $i=1000;$p=11211;
  67. if($p>$i && $p-$i>100 && $p<2000){
  68. $p=$p*0.9;
  69. echo '九折购买'.$p,'<br>';
  70. }elseif( $p>=2000 && $p<20000){
  71. $p *=0.7;
  72. echo '七折购买'.$p,'<br>';
  73. }elseif($p >= 20000){
  74. $p *= 0.5;
  75. echo '五折购买'.$p,'<br>';
  76. }else{
  77. echo '原价购买'.$p,'<br>';
  78. }
  79. echo '<hr>';
  80. // 模板语法
  81. $i=1000;$p=11211;
  82. if($p>$i && $p-$i>100 && $p<2000):
  83. $p=$p*0.9;
  84. echo '九折购买'.$p,'<br>';
  85. elseif( $p>=2000 && $p<20000):
  86. $p *=0.7;
  87. echo '七折购买'.$p,'<br>';
  88. elseif($p >= 20000):
  89. $p *= 0.5;
  90. echo '五折购买'.$p,'<br>';
  91. else:
  92. echo '原价购买'.$p,'<br>';
  93. endif;
  94. echo '<hr>';
  95. // 4. switch: 简化多分支c swith(){case():...break;····}
  96. $i=100;$p=1;
  97. // switch(true){
  98. // case $p>=100 && $p<1000:
  99. // $p *= 0.9;echo $p,'<br>';
  100. // // 跳出本层循环进入下一层
  101. // break;
  102. // case $p>=1000 :
  103. // $p *= 0.8;echo $p,'<br>';
  104. // // 跳出本层循环进入下一层
  105. // break;
  106. // default:
  107. // echo '不支持的折扣率11','<br>';
  108. // // die()只有第一个可以输出
  109. // die('不支持的折扣率');
  110. // die('不支持的折扣率2');
  111. // }
  112. echo '<hr>';
  113. // 模板语法
  114. $i=100;$p=200;
  115. switch(true):
  116. case $p>=100 && $p<1000:
  117. $p *= 0.9;echo $p,'<br>';
  118. // 跳出本层循环进入下一层
  119. break;
  120. case $p>=1000 :
  121. $p *= 0.8;echo $p,'<br>';
  122. // 跳出本层循环进入下一层
  123. break;
  124. default:
  125. echo '不支持的折扣率11','<br>';
  126. // die()只有第一个可以输出
  127. die('不支持的折扣率');
  128. die('不支持的折扣率2');
  129. endswitch;
  130. echo '<hr>';
  131. // switch 更常用的场景是单值判断
  132. $i=1000;$p=10000;
  133. if($p>$i && $p-$i>100 && $p<2000):
  134. $w=0.9;
  135. echo '九折购买','<br>';
  136. elseif( $p>=2000 && $p<20000):
  137. $w=0.7;
  138. echo '七折购买','<br>';
  139. elseif($p >= 20000):
  140. $w= 0.5;
  141. echo '五折购买','<br>';
  142. else:
  143. echo '原价购买','<br>';
  144. endif;
  145. switch($w):
  146. case 0.8:
  147. $p*=0.8;
  148. break;
  149. case 0.9:
  150. $p*=0.9;
  151. break;
  152. case 0.6:
  153. $p*=0.6;
  154. break;
  155. case 0.7:
  156. $p*=0.7;
  157. break;
  158. default:
  159. die('不打折');
  160. endswitch;
  161. echo $p;

2.循环结构

  1. <?php
  2. echo '<h1>'.'流程控制'.'</h1>';
  3. echo '<h2>'.'2、循环结构'.'</h2>';
  4. // 循环结构
  5. // 1、入口判断型 while(循环条件){...}
  6. $a = ['a','b','c','d'];
  7. // 获取数组当前值 current()
  8. // 获取数组的下一个内容 next()
  9. // 重置数组reset()
  10. current($a);
  11. echo current($a),'<br>';
  12. echo next($a),'<br>';
  13. echo current($a),'<br>';
  14. reset($a);
  15. echo current($a),'<br>';
  16. // $i = current($a)这个是循环条件
  17. // while($i = current($a)){
  18. // echo $i,'<br>';
  19. // // 更新循环条件,没有这个语句会陷入死循环
  20. // next($a);
  21. // }
  22. echo '<hr>';
  23. // 模板语法
  24. while($i = current($a)):
  25. echo $i,'<br>';
  26. // 更新循环条件,没有这个语句会陷入死循环
  27. next($a);
  28. endwhile;
  29. echo '<hr>';
  30. // 出口判断型
  31. // 重置数组
  32. reset($a);
  33. do{
  34. $i=current($a);
  35. echo $i,'<br>';
  36. next($a);
  37. }while($i=current($a));
  38. echo '<hr>';
  39. // 无论条件是否为真,至少会执行一次
  40. // 没有对应的模板语法
  41. // 计数型 for(){...}
  42. echo count($a),'<br>';
  43. $i=$a;
  44. for($w=0;$w < count($a);$w++){
  45. // 可以直接用数组即将$i换成数组$a
  46. echo $i[$w],'<br>';
  47. }
  48. // continue终止本次循环提前进入下一轮循环
  49. $b=['你好','我好','大家好','全都好'];
  50. while($i=current($b)):
  51. echo $i,'<br>';
  52. next($b);
  53. endwhile;
  54. for($q=0;$q<count($b);$q++):
  55. echo $b[$q],'<br>';
  56. endfor;
  57. echo '<hr>';
  58. $c=['你好','我好','大家好',false,'全都好'];
  59. // 注意再次强调
  60. // 单分支简化写法就是直接去掉大括号就行了 if() ... ;
  61. // 单行分支的模板写法 if():....endif;
  62. for($q=0;$q<count($c);$q++):
  63. if(!$c[$q]): continue;
  64. endif;
  65. echo $c[$q],'<br>';
  66. endfor;
  67. echo '<hr>';
  68. reset($c);
  69. for($q=0;$q<count($c);$q++):
  70. if(!$c[$q]) continue;
  71. echo $c[$q],'<br>';
  72. endfor;
  73. reset($c);
  74. while($i=current($c)):
  75. echo $i,'<br>';
  76. next($c);
  77. endwhile;
  78. // while对数值依赖性太强了
  79. echo '<hr>';
  80. reset($c);
  81. for($q=0;$q<count($c);$q++):
  82. if(!$c[$q]) continue;
  83. echo $c[$q],'<br>';
  84. // 我能力有限只能做到你好我好
  85. // break当是双层循环是脱离当前层,当只有一次时直接结束
  86. if($c[$q]==='我好') break;
  87. endfor;
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议