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

运算符与流程控制

default
default原创
2020年04月19日 17:27:19682浏览

运算符

1. 算术运算符

  • ++,—,只能用在变量上
    | 序号 | 运算符 | 示例 | 描述 |
    | —— | ——— | —————- | ————————— |
    | 1 | + | $a+$b | $a与$b 的和 |
    | 2 | - | $a-$b | $a与$b 的差 |
    | 3 | * | $a*$b | $a与$b 的积 |
    | 4 | / | $a/$b | $a与$b 的商 |
    | 5 | % | $a%$b | $a与$b 的余(模) |
    | 6 | ++ | $a++/++$a | 先用再加/先加再用 |
    | 7 | -- | $a--/--$a | 先用再减/先减再用 |
    | 8 | ** | 2**4 | 幂运算:2 的 4 次方 |

  • $a++=>$a = $a + 1, $a--=>$a = $a - 1

  1. var_dump(15+6);
  2. var_dump(15-6);
  3. var_dump(15*6);
  4. var_dump(15/6);
  5. var_dump(15%6);
  6. var_dump($n++);
  7. var_dump($n);
  8. $n = $n + 1;
  9. var_dump($n--);
  10. var_dump(--$n);
  11. var_dump($n);
  12. //. 字符串连接
  13. echo 'a' . 'b' . '<br>';
  14. echo 'abc' . 28 . '<br>';
  15. $n = $n + 10;
  16. $n *= 10;
  17. $n =$n *10;
  18. var_dump($n);// $n = $n + 10;
  19. $n *= 10;
  20. // $n =$n *10;
  21. var_dump($n);

2. 字符串运算符

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

3. 赋值运算符

序号 运算符 示例 描述
1 = $a = 10 将表达式的值赋给变量
2 += $a += 10 $a = $a + 10;
3 -= $a -= 10 $a = $a - 10;
4 *= $a *= 10 $a = $a * 10;
5 /= $a /= 10 $a = $a / 10;
6 %= $a %= 10 $a = $a % 10;
7 .= $a .= 'a' $a = $a . 'a';

4. 比较运算符

序号 运算符 示例 描述
1 > $a > $b 大于
2 >= $a >= $b 大于或等于
3 < $a < $b 小于
4 <= $a <= $b 小于或等于
5 == $a == $b 等于 (值相等即可)
6 === $a == $b 全等于(二边值与类型全等)
7 != $a != $b 不相等
8 !== $a !== $b 不全等
9 <=> $a <=> $b 太空船php7+
  1. var_dump(10 > 20);
  2. // 是否相等==, 是否全等===
  3. // ==: 只判断值是否相等, 不判断类型
  4. // 当==二边的类型不同时,会发生类型的自动转换
  5. // var_dump(10 == (int)'10');
  6. // === 全等, 不仅值要相等, 类型也要相等
  7. var_dump(10 === '10');
  8. echo '<hr>';
  9. // 太空船 <=> 太空船返回的是布尔值类型
  10. var_dump(10 <=> 20);
  11. // -1 < 0, 说明 10 小于 20
  12. var_dump(10 <=> 5);
  13. // 1 > 0, 说明 10 大于 5
  14. var_dump(10 <=> 10);
  15. // 0, 说明 相等
  • 比较运算符: 返回布尔值,常用于流程控制中(if/while/for...)
  • <=>: 也叫组合比较符, 例如$a <=> $b, 有三种返回结果
序号 运算 结果
1 $a > $b 返回>0的整数
2 $a < $b 返回<0的整数
3 $a = $b 返回=0的整数

5. 逻辑运算符

序号 运算符 示例 描述
1 && $a && $b 逻辑与
2 ` ` `$a $b` 逻辑或
3 ! !$a 逻辑非
4 xor $a xor $b 逻辑异或
  1. // && 理解为乘法, true==>1, false==>0
  2. var_dump((3<4) && 5>8);
  3. // var_dump(true && false);
  4. // && 理解为加法, true==>1, false==>0
  5. var_dump((3<4) || 5>8);
  6. // var_dump(true || false);
  7. // $name = 'peter';
  8. // $name = 'admin';
  9. if (@$name && $name==='admin') {
  10. echo '欢迎您';
  11. } else {
  12. echo '未登录';
  13. }
  14. echo '<hr>';

6. 三元运算符

  • ?? null合并运算符 省去了 isset()函数
序号 运算符 示例 描述 场景
1 ?: $a ?: $b 仅判断表达式true/false 简化双分支
2 ?? $a ?? $b 判断变量存在且不为 null 设置默认值
  1. $price = 900;
  2. if ($price > 1000) echo '太贵了'; else echo '真便宜';
  3. // 条件 ? true : false
  4. echo $price > 1000 ? '太贵了' : '真便宜';
  5. echo '<hr>';
  6. // ?? null合并运算符
  7. // 设置变量默认值
  8. $password = '123abc';
  9. // $password = isset($password) ? $password : 'root';
  10. $password = $password ?? 'root';
  11. echo $password;

7. 错误屏蔽符

运算符 示例 描述 场景
@ @(10/0) 屏蔽所有运行错误 线上生产环境

流程控制

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;

1.单分支

  • 单分支就是把if判断的另一半去掉只值执行第一个
  1. // 购买金额
  2. $amount = 5500;
  3. // 实际支付
  4. $payment = $amount;
  5. if ($amount > 5000) {
  6. $payment = $amount * 0.9;
  7. }
  8. 如果代码体只有一行,可以省略大括号
  9. if ($amount > 5000) $payment = $amount * 0.9;
  10. 有一种替代语法 : 模板语法, 用在与html代码混编的时候
  11. 模板语法的目标是: 干掉大括号
  12. if ($amount > 5000) :
  13. $payment = $amount * 0.8;
  14. endif;
  15. echo '实际支付: ' . $payment . '<br>';

2. 双分支

  1. $amount = 3500;
  2. if ($amount > 5000) {
  3. $payment = $amount * 0.9;
  4. } else {
  5. $payment = $amount;
  6. }
  7. // 双分支模板语法
  8. if ($amount > 5000) :
  9. $payment = $amount * 0.9;
  10. else :
  11. $payment = $amount;
  12. endif;
  13. echo '实际支付: ' . $payment . '<br>';

3.多分支

  1. $amount = 8500;
  2. // if ($amount > 5000 && $amount < 10000) {
  3. // $payment = $amount * 0.9;
  4. // } elseif ($amount >= 10000 && $amount < 20000) {
  5. // $payment = $amount * 0.7;
  6. // } elseif ($amount >= 20000) {
  7. // $payment = $amount * 0.5;
  8. // } else {
  9. // $payment = $amount;
  10. // }
  11. // 模板语法
  12. if ($amount > 5000 && $amount < 10000) :
  13. $payment = $amount * 0.9;
  14. elseif ($amount >= 10000 && $amount < 20000) :
  15. $payment = $amount * 0.7;
  16. elseif ($amount >= 20000) :
  17. $payment = $amount * 0.5;
  18. else :
  19. $payment = $amount;
  20. endif;
  21. echo '实际支付: ' . $payment . '<br>';

4. switch: 简化多分支

  • case是判断条件 break是跳出当前分支 default是 最后选择
  1. $amount = 2300;
  2. switch (true) {
  3. case $amount > 5000 && $amount < 10000:
  4. $payment = $amount * 0.9;
  5. // break: 跳出当前分支
  6. break;
  7. case $amount >= 10000 && $amount < 20000:
  8. $payment = $amount * 0.7;
  9. break;
  10. case $amount >= 20000:
  11. $payment = $amount * 0.5;
  12. break;
  13. default:
  14. $payment = $amount;
  15. }
  16. // 模板语法
  17. switch (true) :
  18. case $amount > 5000 && $amount < 10000:
  19. $payment = $amount * 0.9;
  20. // break: 跳出当前分支
  21. break;
  22. case $amount >= 10000 && $amount < 20000:
  23. $payment = $amount * 0.7;
  24. break;
  25. case $amount >= 20000:
  26. $payment = $amount * 0.5;
  27. break;
  28. default:
  29. $payment = $amount;
  30. endswitch;
  31. echo '实际支付: ' . $payment . '<br>';
  32. echo '<hr>';
  33. // switch 更常用的场景是单值判断
  34. $discount = 0.6;
  35. $amount = 10000;
  36. switch ($discount):
  37. case 0.9:
  38. $payment = $amount * 0.9;
  39. break;
  40. case 0.8:
  41. $payment = $amount * 0.8;
  42. break;
  43. default:
  44. die('不支持的折扣率');
  45. endswitch;
  46. echo '实际支付: ' . $payment . ', 折扣率: '. $discount;

2. 循环结构

序号 类型 语法 模板语法
1 入口判断型 while(){...} while(): ... endwhile;
2 出口判断型 do {...} while(); do : ... while();
3 计数型 for(){...} for () : ... endfor;
  • 循环控制关键字:
序号 关键字 描述
1 continue 终止本次循环,提前进入下一轮
2 break 跳出本层循环

入口判断型/while循环

  • current()//每个数组中都有一个内部的指针指向它的”当前”元素,初始指向插入到数组中的第一个元素。简单理解为开启指针
  • next()//指针指向下一个
  • prev()//指针指向上一个
  1. $cities = ['武汉', '合肥', '南京', '杭州', '上海'];
  2. // 1. 入口判断型
  3. echo current($cities);
  4. next($cities);
  5. echo current($cities);
  6. next($cities);
  7. echo current($cities);
  8. echo '<hr>';
  9. reset($cities);
  10. // $city = current($cities): 循环条件
  11. // while ($city = current($cities)) {
  12. // echo $city . '<br>';
  13. // // 更新循环条件, 没有这个语句, 会进入死循环
  14. // next($cities);
  15. // }
  16. // reset($cities);
  17. // 模板语法
  18. while ($city = current($cities)) :
  19. echo $city . '<br>';
  20. // 更新循环条件, 没有这个语句, 会进入死循环
  21. next($cities);
  22. endwhile;
  23. echo '<hr>';

2. 出口判断型 /do..while

  • 特点就是判断条件在后面
  • 无论条件是否为真,至少会执行一次
  • 没有对应的模板语法
    1. reset($cities);
    2. do {
    3. $city = current($cities);
    4. echo $city . '<br>';
    5. // 更新循环条件, 没有这个语句, 会进入死循环
    6. next($cities);
    7. } while ($city = current($cities));

    3.计数型 for循环

  • count() 函数返回数组中元素的数目。
  • continue: 终止当前循环,提前进入下一轮
  1. echo '数组中有 : ' . count($cities);
  2. echo '<hr>';
  3. // $i = 0;循环变量初始化
  4. // $i < count($cities): 循环条件
  5. // $i++: 更新循环条件
  6. for ($i = 0; $i < count($cities); $i++) {
  7. // echo $cities[$i] . '<br>';
  8. }
  9. // 模板语法
  10. for ($i = 0; $i < count($cities); $i++) :
  11. // echo $cities[$i] . '<br>';
  12. endfor;
  13. echo '<hr>';
  14. reset($cities);
  15. // continue: 终止当前循环,提前进入下一轮
  16. $cities = ['武汉', '合肥', false, '南京', null, '杭州', '上海'];
  17. // while ($city = current($cities)) :
  18. // echo $city . '<br>';
  19. // next($cities);
  20. // endwhile;
  21. for ($i = 0; $i < count($cities); $i++) :
  22. // 跳过空数据
  23. if (!$cities[$i]) continue;
  24. echo $cities[$i] . '<br>';
  25. // break; 跳出本层
  26. if ($cities[$i] === '杭州') break;
  27. endfor;
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议