博客列表 >php 运算符 、流程控制

php 运算符 、流程控制

,多思曩惜,
,多思曩惜,原创
2020年04月30日 15:51:56746浏览

运算符

1. 算术运算符

运算符 示例 描述
+ $a+$b $a与$b 的和
- $a-$b $a与$b 的差
* $a*$b $a与$b 的积
/ $a/$b $a与$b 的商
% $a%$b $a与$b 的余(模)
++ $a++/++$a 先用再加/先加再用
-- $a--/--$a 先用再减/先减再用
** 2**4 幂运算:2 的 4 次方
  • $a++=>$a = $a + 1, $a--=>$a = $a - 1
  • **: 幂运算需要 php5.6+版本

2. 字符串运算符

运算符 示例 描述
. $str1 . $str2 连接运算,返回连接之后的字符串

3. 赋值运算符

运算符 示例 描述
= $a = 10 将表达式的值赋给变量
+= $a += 10 $a = $a + 10;
-= $a -= 10 $a = $a - 10;
*= $a *= 10 $a = $a * 10;
/= $a /= 10 $a = $a / 10;
%= $a %= 10 $a = $a % 10;
.= $a .= 'a' $a = $a . 'a';

4. 比较运算符

运算符 示例 描述
> $a > $b 大于
>= $a >= $b 大于或等于
< $a < $b 小于
<= $a <= $b 小于或等于
== $a == $b 等于 (值相等即可)
=== $a == $b 全等于(二边值与类型全等)
!= $a != $b 不相等
!== $a !== $b 不全等
<=> $a <=> $b 太空船php7+
  • 比较运算符: 返回布尔值,常用于流程控制中(if/while/for...)
  • <=>: 也叫组合比较符, 例如$a <=> $b, 有三种返回结果
运算 结果
$a > $b 返回>0的整数
$a < $b 返回<0的整数
$a = $b 返回=0的整数

5. 逻辑运算符

运算符 示例 描述
&& $a && $b 逻辑与
` ` `$a $b` 逻辑或
! !$a 逻辑非
xor $a xor $b 逻辑异或

6. 三元运算符

运算符 示例 描述 场景
?: $a ?: $b 仅判断表达式true/false 简化双分支
?? $a ?? $b 判断变量存在且不为null 设置默认值

7. 错误屏蔽符

运算符 示例 描述 场景
@ @(10/0) 屏蔽所有运行错误 线上生产环境
  1. <?php
  2. //打开错误提示,并输出
  3. error_reporting(E_ALL);
  4. //运算符
  5. //取模/取余数
  6. var_dump(10 % 3); //余数为1
  7. //++,--只能用在变量上
  8. $a = 10;
  9. // ++在变量后面,先引用变量的值,再将变量执行加的运算
  10. var_dump($a++); //输出为 int(10)
  11. var_dump($a); //输出为 int(11)
  12. $a = 10;
  13. var_dump(++$a); //输出为 int(11)
  14. var_dump($a); //输出为 int(11)
  15. echo '<hr>';
  16. // . 字符串连接
  17. echo 'a' . 'b' . '<br>'; // 输出为 ab
  18. echo 'abc' . 28 . '<br>'; // 输出为 abc28
  19. // 用字符串连接创建表格
  20. echo '<hr>';
  21. $user = ['1', '学生', 'php'];
  22. $table = '<table border=1>';
  23. $table .= '<tr>';
  24. $table .= '<td>' . $user[0] . '</td>';
  25. $table .= '<td>' . $user[1] . '</td>';
  26. $table .= '<td>' . $user[2] . '</td>';
  27. $table .= '</tr>';
  28. $table .= '</table>';
  29. echo $table;
  30. echo '<hr>';
  31. // 比较运算符返回布尔类型的值
  32. var_dump(15 > 22); // 输出为 bool(flase)
  33. // 是否相等==, 是否全等===
  34. // ==: 只判断值是否相等, 不判断类型
  35. // 当==二边的类型不同时,会发生类型的自动转换
  36. // var_dump(10 == (int)'10');
  37. // === 全等, 不仅值要相等, 类型也要相等
  38. var_dump(10 === '10'); // 输出为 bool(flase)
  39. echo '<hr>';
  40. // 太空船 <=>
  41. var_dump(10 <=> 20); // 输出为 -1
  42. // -1 < 0, 说明 10 小于 20
  43. var_dump(10 <=> 5); // 输出为 1
  44. // 1 > 0, 说明 10 大于 5
  45. var_dump(10 <=> 10); // 输出为 0
  46. // 0, 说明 相等
  47. echo '<hr>';
  48. // && 理解为乘法, true==>1, false==>0
  49. var_dump(1 < 2 && 5 > 2); // 输出为 bool(true)
  50. // var_dump(true && false);
  51. // || 理解为加法, true==>1, false==>0
  52. var_dump(1 < 2 || 5 > 2); // 输出为 bool(true)
  53. echo '<hr>';
  54. // @ 屏蔽错误提示
  55. // if ($name && $name === 'admin') { 提示错误未定义$name
  56. // echo '登录成功';
  57. // } else {
  58. // echo '登录失败';
  59. // }
  60. // echo '<hr>';
  61. // if (@$name && $name === 'admin') { 未提示错误未定义$name
  62. // echo '欢迎您';
  63. // } else {
  64. // echo '未登录';
  65. // }
  66. // echo '<hr>';
  67. if (isset($name) && $name === 'admin') { // 直接判断$name
  68. echo '欢迎您';
  69. } else {
  70. echo '未登录';
  71. }
  72. echo '<hr>';
  73. // ? : 简化双分支if
  74. $price = 888;
  75. if ($price > 1000) : echo '贵了';
  76. else : echo '便宜';
  77. endif;
  78. echo '<br>';
  79. // 条件 ? true : false;
  80. echo $price > 1000 ? '贵了' : '便宜';
  81. echo '<hr>';
  82. // ?? null合并运算符
  83. // 设置变量默认值
  84. $paw = '123456';
  85. // $paw = isset($paw) ? $paw : 'root';
  86. $paw = $paw ?? 'root';
  87. echo $paw;
  88. echo '<hr>';
  • 效果

流程控制

1. 分支结构

序号 类型 语法 模板语法
1 单分支 if(){...} if(): ... endif;
2 双分支 if(){...} else {...} if(): ... else: ... endif;
3 多分支 if(){...} elseif {...} else {...} if(): ... elseif: ... else: ... endif;
4 switch switch() {case: ... break...} switch(): ...endswitch;

2. 循环结构

序号 类型 语法 模板语法
1 入口判断型 while(){...} while(): ... endwhile;
2 出口判断型 do {...} while(); do : ... while();
3 计数型 for(){...} for () : ... endfor;

循环控制关键字:

序号 关键字 描述
1 continue 终止本次循环,提前进入下一轮
2 break 跳出本层循环
  1. <?php
  2. # 分支结构
  3. $a = 5500;
  4. $b = $a;
  5. // 1.单分支
  6. if ($a > 5000) {
  7. $b = $a * 0.6;
  8. }
  9. echo '实际支付: ' . $b . '<br>'; //输出 3300;
  10. // 如果代码体只有一行,可以省略大括号
  11. // if ($a >5000) $b = $a * 0.6;
  12. // 有一种替代语法 : 模板语法, 用在与html代码混编的时候
  13. // 模板语法的目标是: 干掉大括号
  14. if ($a > 5000) :
  15. $b = $a * 0.5;
  16. endif;
  17. echo '实际支付: ' . $b . '<br>'; //输出 2750;
  18. echo '<hr>';
  19. //双分支
  20. $a = 3000;
  21. if ($a > 5000) {
  22. $b = $a * 0.6;
  23. } else {
  24. $b = $a;
  25. }
  26. echo '实际支付: ' . $b . '<br>'; //输出为3000;
  27. // 双分支模板语法
  28. $a = 4000;
  29. if ($a > 5000) :
  30. $b = $a * 0.6;
  31. else :
  32. $b = $a;
  33. endif;
  34. echo '实际支付: ' . $b . '<br>'; //输出为4000;
  35. echo '<hr>';
  36. // 3. 多分支
  37. $a = 15000;
  38. if ($a > 5000 && $a <= 10000) {
  39. $b = $a * 0.6;
  40. } elseif ($a > 10000 && $a <= 20000) {
  41. $b = $a * 0.5;
  42. } elseif (($a >= 20000)) {
  43. $b = $a * 0.2;
  44. } else {
  45. $b = $a;
  46. }
  47. echo '实际支付: ' . $b . '<br>'; //输出为7500;
  48. // 模板语法
  49. $a = 12000;
  50. if ($a > 5000 && $a <= 10000) :
  51. $b = $a * 0.6;
  52. elseif ($a > 10000 && $a <= 20000) :
  53. $b = $a * 0.5;
  54. elseif (($a >= 20000)) :
  55. $b = $a * 0.2;
  56. else :
  57. $b = $a;
  58. endif;
  59. echo '实际支付: ' . $b . '<br>'; //输出为6000;
  60. echo '<hr>';
  61. // 4. switch: 简化多分支
  62. $a = 12000;
  63. switch (true) {
  64. case $a > 5000 && $a <= 10000;
  65. $b = $a * 0.8;
  66. break;
  67. case $a > 10000 && $a <= 20000;
  68. $b = $a * 0.5;
  69. break;
  70. case $a >= 20000;
  71. $b = $a * 0.2;
  72. break;
  73. default;
  74. $b = $a;
  75. }
  76. echo '实际支付: ' . $b . '<br>'; //输出为6000;
  77. // 模板语法
  78. switch (true):
  79. case $a > 5000 && $a <= 10000;
  80. $b = $a * 0.8;
  81. break;
  82. case $a > 10000 && $a <= 20000;
  83. $b = $a * 0.5;
  84. break;
  85. case $a >= 20000;
  86. $b = $a * 0.2;
  87. break;
  88. default;
  89. $b = $a;
  90. endswitch;
  91. echo '实际支付: ' . $b . '<br>'; //输出为6000;
  92. // switch 更常用的场景是单值判断
  93. $a = 0.5;
  94. $b = 5000;
  95. switch ($a):
  96. case 0.8;
  97. $b *= 0.8;
  98. break;
  99. case 0.5;
  100. $b *= 0.5;
  101. break;
  102. case 0.2;
  103. $b *= 0.2;
  104. break;
  105. default;
  106. die('不支持');
  107. endswitch;
  108. echo '实际支付: ' . $b . ', 折扣率: ' . $a;//输出为实际支付: 2500, 折扣率: 0.5
  1. <?php
  2. # 循环
  3. $a = ['1', '2', '3', '4', '5'];
  4. // 1. 入口判断型
  5. echo current($a); //输出为 1 ;
  6. next($a); //指针下移
  7. echo current($a); //输出为 2 ;
  8. next($a); //指针下移
  9. echo current($a); //输出为 3 ;
  10. echo '<hr>';
  11. reset($a); //重置指针
  12. // $b = current($a)循环条件
  13. while ($b = current($a)) {
  14. echo $b;
  15. //更新循环条件, 没有这个语句, 会一直输出1 进入死循环
  16. next($a);
  17. }
  18. reset($a); //重置指针
  19. while ($b = current($a)) :
  20. echo $b;
  21. //更新循环条件, 没有这个语句, 会进入死循环
  22. next($a);
  23. endwhile;
  24. echo '<hr>';
  25. // 2. 出口判断型
  26. reset($a); //重置指针
  27. do {
  28. $b = current($a); //没有这个语句,会自动执行一次,
  29. echo $b;
  30. //更新循环条件, 没有这个语句, 会一直输出1 进入死循环
  31. next($a);
  32. } while ($b = current($a));
  33. // 无论条件是否为真,至少会执行一次
  34. // 没有对应的模板语法
  35. // 3. 计数型
  36. echo '数组中有: ' . count($a); //输出为 5组数据
  37. echo '<hr>';
  38. // $i = 0;循环变量初始化
  39. // $i < count($cities): 循环条件
  40. // $i++: 更新循环条件
  41. for ($i = 0; $i < count($a); $i++) {
  42. echo $a[$i] . '<br>';
  43. }
  44. // 模板语法
  45. for ($i = 0; $i < count($a); $i++) :
  46. echo $a[$i] . '<br>';
  47. endfor;
  48. echo '<hr>';
  49. reset($a); //重置指针
  50. // continue: 终止当前循环,提前进入下一轮
  51. $a = ['1', '2', '3', false, '4', null, '5'];
  52. while ($b = current($a)) {
  53. echo $b . '<br>';
  54. next($a);
  55. } //输出为 123
  56. echo '<hr>';
  57. for ($i = 0; $i <= count($a); $i++) {
  58. // 跳过空数据
  59. if (!$a[$i]) continue;
  60. echo $a[$i] . '<br>';
  61. if ($a[$i] === '4')
  62. // break; 跳出本层
  63. break;
  64. }

总结

  • 尝试用for循环打印乘法表
  1. <?php
  2. for ($i = 1; $i <= 9; $i++) {
  3. for ($j = 1; $j <= $i; $j++) {
  4. echo "{$i}*{$j}=" . ($i * $j) . " ";
  5. }
  6. echo "<br/>";
  7. }
  8. $j = 1;
  9. while ($j <= 9) {
  10. $i = 1;
  11. while ($i <= $j) {
  12. echo "{$i}*{$j}=" . ($i * $j) . " ";
  13. $i++;
  14. }
  15. echo "<br/>";
  16. $j++;
  17. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议