Blogger Information
Blog 28
fans 0
comment 0
visits 25674
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php 运算符 、流程控制
,多思曩惜,
Original
731 people have browsed it

运算符

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. }
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:你的作业是倒着写的吗? 请以当下为主
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!