博客列表 >PHP运算符以及流程控制语句

PHP运算符以及流程控制语句

longlong
longlong原创
2020年07月07日 15:25:55696浏览

1. 运算符

PHP中的运算符大致分为几下几类:

  • 算术运算符

  • 赋值运算符

  • 比较运算符

  • 逻辑运算符

  • 递增/递减运算符

  • 数组运算符

  • 三元运算符

  • 组合比较符,又称太空船运算符

1.1 算术运算符

运算符 名称 描述 例子 结果
a + b 加法 求和 5 + 5 10
a - b 减法 求差 10 - 5 5
a * b 乘法 求积 5 * 5 25
a / b 除法 求商 15 / 5 3
a % b 求模 取余 15 % 6 3
- a 取反 取a的反数 <?php $a = 5;echo -$a; -5
a.b 并置 连接2个字符串 ‘hel’.’lo’ hello

1.2 赋值运算符

运算符 等同于 描述
a = b a = b 把b的值赋给a
a += b a = a + b
a -= b a = a - b
a *= b a = a * b
a /= b a = a / b
a %= b a = a % b 模(除法的余数)
a .= b a = a . b 连接两个字符串

1.3 比较运算符,返回布尔类型

运算符 名称 描述 实例
x == y 等于 如果 x 等于 y,则返回 true 5==8 返回 false
x === y 绝对等于 如果 x 等于 y,且它们类型相同,则返回 true 5===”5” 返回 false
x != y 不等于 如果 x 不等于 y,则返回 true 5!=8 返回 true
x <> y 不等于 如果 x 不等于 y,则返回 true 5<>8 返回 true
x !== y 绝对不等于 如果 x 不等于 y,或它们类型不相同,则返回 true 5!==”5” 返回 true
x > y 大于 如果 x 大于 y,则返回 true 5>8 返回 false
x < y 小于 如果 x 小于 y,则返回 true 5<8 返回 true
x >= y 大于等于 如果 x 大于或者等于 y,则返回 true 5>=8 返回 false
x <=y 小于等于 如果 x 小于或者等于 y,则返回 true 5<=8 返回 true

1.4 逻辑运算符

运算符 名称 描述 实例
x and y 如果 x 和 y 都为 true,则返回 true x=6;y=3; (x < 10 and y > 1); 返回 true
x or y 如果 x 和 y 至少有一个为 true,则返回 true x=6;y=3;(x==6 or y==5) ;返回 true
x xor y 异或 如果 x 和 y 有且仅有一个为 true,则返回 true x=6;y=3;(x==6 xor y==3); 返回 false
x && y 如果 x 和 y 都为 true,则返回 true x=6 ; y=3 ; (x < 10 && y > 1) ; 返回 true
x | | y 如果 x 和 y 至少有一个为 true,则返回 true x=6;y=3;(x==5 | | y==5) 返回 false
! x 如果 x 不为 true,则返回 true x=6;y=3;!(x==y) 返回 true

1.5 递增/递减运算符

运算符 名称 描述
++ x 预递增 x 加 1,然后返回 x
x ++ 后递增 返回 x,然后 x 加 1
- - x 预递减 x 减 1,然后返回 x
x - - 后递减 返回 x,然后 x 减 1

1.6 数组运算符

运算符 名称 描述
x + y 集合 x 和 y 的集合
x == y 相等 如果 x 和 y 具有相同的键/值对,则返回 true
x === y 恒等 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true
x != y 不相等 如果 x 不等于 y,则返回 true
x <> y 不相等 如果 x 不等于 y,则返回 true
x !== y 不恒等 如果 x 不等于 y,则返回 true

1.7 三元运算符

语法格式是:(expr1) ? (expr2) : (expr3),对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。

示例如下:

1.8 太空船运算符

PHP7+后出现了组合比较运算符,又称太空船运算符,<=>,组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。它的返回值为1,0,-1。

示例如下:

  1. <?php
  2. // 数值为0,表示相等
  3. // 数值为1,表示前者大于后者
  4. // 数值为-1,表示前者小于后者
  5. // 示例一:比较整形
  6. echo 5<=>5,'<br>';
  7. echo 8<=>5,'<br>';
  8. echo 5<=>8,'<br>';
  9. echo '<hr>';
  10. // 示例二:比较字符串
  11. $str1 = 'hello';
  12. $str2 = 'hello1';
  13. echo $str1 <=> $str2,'<br>';
  14. echo $str2 <=> $str1,'<br>';
  15. // 若把两个字符串的值改为一样
  16. $str2 = 'hello';
  17. echo $str1 <=> $str2;
  18. // 从这个例子可以看书,太空船运算符不仅可以比较数值,
  19. // 也可以比较字符串,取值为0时,表示字符串的内容是一样的
  20. // 取值为1时,表示前者字符串长度大于后者
  21. // 取值为-1时,表示前者字符串长度小于后者

1.9 扩展知识:null合并运算符

示例如下:

  1. <?php
  2. // 示例:检测用户是否有密码,若无,给一个默认密码root
  3. echo isset($password) ? $password : 'root';
  4. echo '<hr>';
  5. // 现在给一个密码
  6. $password = '666666';
  7. echo isset($password) ? $password : 'root';
  8. echo '<hr>';
  9. // 用NULL合并运算符(??)的方式写
  10. echo $password ?? 'root';

2. 流程控制语句

流程控制语句 描述 结构划分
if 条件成立时执行代码 单分支
if...else 条件成立时执行一块代码,不成立时执行另一块代码 双分支
if...elseif...else 在若干条件之一成立时执行一个代码块 多分支
switch 在若干条件之一成立时执行一个代码块 多分支
while 只要指定的条件成立,则循环执行代码块 循环
do...while 首先执行一次代码块,然后在指定的条件成立时重复这个循环 循环
for 循环执行代码块指定的次数 循环
foreach 根据数组中每个元素来循环代码块 循环

2.1 单分支和双分支结构

示例如下:

  1. <?php
  2. error_reporting(E_ALL);
  3. // 1. 单分支
  4. // 示例:考试平均成绩大于90分,就是优秀成绩
  5. $avg = 95;
  6. if($avg > 90){
  7. echo '成绩优秀','<hr>';
  8. }
  9. // 单分支简化:当这个流程控制语句中只有一段代码时,可省略大括号
  10. if($avg > 90) echo '成绩优秀','<hr>';
  11. // 2. 双分支
  12. // 示例:平均成绩大于85分的没有暑假作业,否则做100张复习试卷
  13. $avg = 80;
  14. if($avg > 85){
  15. echo '没有作业,好好玩把';
  16. }else{
  17. echo '做100张试卷';
  18. }
  19. echo '<hr>';
  20. // 双分支简化:
  21. // 简化方式一:使用三元运算符
  22. echo $avg > 85 ? '没有作业,好好玩吧' : '做100张试卷';
  23. echo '<hr>';
  24. // 简化方式二:使用模板语法
  25. if($avg > 85) :
  26. echo '没有作业,好好玩把';
  27. else :
  28. echo '做100张试卷';
  29. endif ;

2.2 多分支结构

示例如下:

  1. <?php
  2. error_reporting(E_ALL);
  3. /* 示例:
  4. 平均成绩在90-100,为优秀
  5. 平均成绩在80-90,为良好
  6. 平均成绩在70-80,为中等
  7. 平均成绩在60-70,为及格
  8. 平均成绩在60以下,站黑板把
  9. */
  10. // 方式一:使用if...elseif...elseif...else
  11. $avg = 68;
  12. // 代码中的 and 和 && 是一个意思,另外,or 和 || 也是一个意思
  13. if($avg >= 90 and $avg <= 100){
  14. echo '成绩优秀';
  15. }elseif($avg >= 80 and $avg < 90){
  16. echo '成绩良好';
  17. }elseif($avg >= 70 and $avg < 80){
  18. echo '成绩中等';
  19. }elseif($avg >=60 and $avg < 70){
  20. echo '及格';
  21. }else{
  22. echo '站黑板把';
  23. }
  24. echo '<hr>';
  25. // 改为模板语法
  26. if($avg >= 90 and $avg <= 100):
  27. echo '成绩优秀';
  28. elseif($avg >= 80 and $avg < 90):
  29. echo '成绩良好';
  30. elseif($avg >= 70 and $avg < 80):
  31. echo '成绩中等';
  32. elseif($avg >=60 and $avg < 70):
  33. echo '及格';
  34. else:
  35. echo '站黑板把';
  36. endif;
  37. echo '<hr>';
  38. // 方式二:使用switch简化分支
  39. switch(true){
  40. case $avg >= 90 and $avg <= 100 : echo '成绩优秀';
  41. break;
  42. case $avg >= 80 and $avg < 90 : echo '成绩良好';
  43. break;
  44. case $avg >= 70 and $avg < 80 : echo '成绩中等';
  45. break;
  46. case $avg >=60 and $avg < 70 : echo '及格';
  47. break;
  48. default : echo '站黑板把';
  49. }
  50. echo '<hr>';
  51. // 改为模板语法
  52. switch(true):
  53. case $avg >= 90 and $avg <= 100 : echo '成绩优秀';
  54. break;
  55. case $avg >= 80 and $avg < 90 : echo '成绩良好';
  56. break;
  57. case $avg >= 70 and $avg < 80 : echo '成绩中等';
  58. break;
  59. case $avg >=60 and $avg < 70 : echo '及格';
  60. break;
  61. default : echo '站黑板把';
  62. endswitch;

对于多分支结构switch,通常又是用在单值判断场景中,示例如下:

  1. <?php
  2. $person = 8;
  3. switch($person){
  4. case 0 : echo '还没人来';
  5. break;
  6. case 1 : echo '一个人玩求';
  7. break;
  8. case 2 : echo '两个人玩象棋把';
  9. break;
  10. case 3 : echo '三个人斗地主把';
  11. break;
  12. case 4 : echo '四个人玩麻将把';
  13. break;
  14. default : echo '人太多,去K歌把';
  15. }

2.3 循环结构

循环结构一般都是用于进行遍历操作的,下面以遍历一个数组为例:

  1. <?php
  2. // 使用不同的循环结构遍历数组
  3. // 示例:自己有一个购物清单,分别有:牙刷、杯子、台灯、电脑、风扇
  4. $list = ['牙刷','杯子','台灯','电脑','风扇'];
  5. // 方式一:使用while循环,while循环属于入口判断型,先判断再执行
  6. $i = 0;
  7. while( $i < count($list) ):
  8. echo $list[$i],'<br>';
  9. $i++;
  10. endwhile;
  11. echo '<hr>';
  12. // 方式二:使用do...while循环,它是属于出口判断型,无论如何代码都要先执行一次
  13. // 注意:此种方式,不能使用模板语法,实际开发,用得也比较少
  14. $j = 0;
  15. do{
  16. echo $list[$j],'<br>';
  17. $j++;
  18. }while($j < count($list));
  19. echo '<hr>';
  20. // 方式三:使用for循环,语法:for(变量的初始值;循环的条件;更新)
  21. for( $i=0; $i<count($list); $i++):
  22. echo $list[$i],'<br>';
  23. endfor;
  24. echo '<hr>';
  25. // 在for循环中插入break或continue,可以指定终止或者跳过循环
  26. // 1.台灯以后的清单不要了
  27. for( $i=0; $i<count($list); $i++):
  28. if($i > 2) break;
  29. echo $list[$i],'<br>';
  30. endfor;
  31. echo '<hr>';
  32. // 2.电脑不要
  33. for( $i=0; $i<count($list); $i++):
  34. if($i === 3) continue;
  35. echo $list[$i],'<br>';
  36. endfor;
  37. echo '<hr>';
  38. // 方式四:使用foreach
  39. foreach($list as $value):
  40. echo $value,'<br>';
  41. endforeach;

3. 总结

  • 运算符大都和小学的运算差不多,着重掌握好逻辑和三元运算,理解到太空运算符的值的意义,三元运算必须掌握好,因为它能大大的简化双分支结构。

  • 至于多分支结构,根据不同的场景自己选择,但是遇到单值判断,还是尽量使用switch。

  • 在进行循环遍历时,也了解到了几种方法,也是需要根据不同的场景择佳使用,在使用whiledo...while时,切记一定要更新循环条件,不然会进入死循环,另外在循环中,结合breakcontinue语句,可以根据不同的条件使循环得到更好的控制

  • 在写代码过程中,能够使用模板语法的,尽量使用,后期在混编中会有大量的展现

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