博客列表 >PHP 03 运算符与流程控制(0706)

PHP 03 运算符与流程控制(0706)

老黑
老黑原创
2020年07月14日 19:17:18571浏览

主要内容:

  1. 常用运算符
  2. 短路求知、三元表达式
  3. 分支结构与模板语法
  4. 循环与模板语法
  5. 表查询示例

1. 常用运算符

1-1. 比较运算符:返回布尔值

  • “==”, “===”
  • “==”: 值比较,当操作符二边的操作数类型不一致,会触发类型自动转换机制
  • “===”:除了值相等, 类型也必须一致
  1. var_dump(10 > 20);
  2. var_dump(100 == '100');
  3. //返回true
  4. var_dump(100 === '100');
  5. //返回false,因为要求类型必须一致。

1-2. 太空船运算符

  • 谁大显示谁,相当于在前后比较。例如第一个显示-1,第二个显示1,第三个显示0。
  1. var_dump(10 <=> 20);
  2. var_dump(10 <=> 5);
  3. var_dump(10 <=> 10);

1-3. 逻辑运算符

  • &&:二边表达式除非全部为true,否则返回false
  • ||: 二边表达式只要有一个为true,则返回true
  1. var_dump((10 > 20) && (5 > 8));
  2. var_dump((10 < 20) || (5 > 8));
  3. var_dump(true || false);

2. 短路求值、三元表达式

2-1. 短路求值

  • 如果第一个表达式(isset($username)) 为false, 则直接执行else分支,不会再去计算” $username === ‘admin’”
  1. $username = 'peter';
  2. if ($username && $username === 'admin')
  3. echo '欢迎您';
  4. else
  5. echo '您未登录,请先登录';
  6. echo '<hr>';

2-2. 三元表达式

  • 用三元运算符来简单双分支
  • 三元: 指有三个表达式, 意味要有二个操作符( ? : 以及更为简化的? ?)
  1. $price = 2000;
  2. if ($price > 1500) echo '太贵了';
  3. else echo '太便宜了';
  4. // 可写成:下面这种方式
  5. $price = 1000;
  6. echo $price > 1500 ? '太贵了' : '太便宜了';
  7. echo '<hr>';
  8. // root, 密码:默认就是 root
  9. $password = sha1('123456');
  10. echo isset($password) ? $password : 'root';
  11. echo '<hr>';
  12. // isset() + 三元运算 = 变量默认值
  13. // $password = '123456';
  14. // 进一步简化为??
  15. // ?? : null合并运算符
  16. unset($password);
  17. echo $password ?? 'root';

3. 分支结构与模板语法

  • if else; switch case break

    3-1. 单分支

  1. $amount = 4500;
  2. // 实际支付的金额,默认值是不打折的金额
  3. $payment = $amount;
  4. // if ($amount >= 5000) {
  5. // 当流程控制语句中只有一行代码的时候,可以省略大括号
  6. // $payment = $amount * 0.9;
  7. // }
  8. // if ($amount >= 5000) $payment = $amount * 0.9;
  • 模板语法:去掉流程控制中的大括号
  • 将起始大括号用冒号代替,将结束大括号用特殊关键字代替
  1. if ($amount >= 5000) :
  2. // 当流程控制语句中只有一行代码的时候,可以省略大括号
  3. $payment = $amount * 0.9;
  4. endif;
  5. if ($amount >= 5000) : $payment = $amount * 0.9; endif;
  6. echo '实际支付: ' , $payment , '<br>';
  7. echo '<hr>';

3-2. 双分支

  1. $amount = 4500;
  2. if ($amount >= 5000) {
  3. $payment = $amount * 0.9;
  4. } else {
  5. $payment = $amount;
  6. }
  • 模板语法
  1. $amount = 7500;
  2. if ($amount >= 5000) :
  3. $payment = $amount * 0.9;
  4. else :
  5. $payment = $amount;
  6. endif;
  7. echo '实际支付: ' , $payment , '<br>';
  8. echo '<hr>';

3-3. 多分支

  • 不断地用elseif,最后设置一个默认值。
  1. $amount = 22500;
  2. if ($amount > 5000 && $amount < 10000) {
  3. $payment = $amount * 0.9;
  4. }
  5. elseif ($amount >= 10000 && $amount < 20000) {
  6. $payment = $amount * 0.7;
  7. }
  8. elseif ($amount >= 20000) {
  9. $payment = $amount * 0.5;
  10. }
  11. else {
  12. // 默认值
  13. $payment = $amount;
  14. }
  • 模板语法
  1. if ($amount > 5000 && $amount < 10000):
  2. $payment = $amount * 0.9;
  3. elseif ($amount >= 10000 && $amount < 20000) :
  4. $payment = $amount * 0.7;
  5. elseif ($amount >= 20000) :
  6. $payment = $amount * 0.5;
  7. else :
  8. // 默认值
  9. $payment = $amount;
  10. endif;
  11. echo '实际支付: ' , $payment , '<br>';
  12. echo '<hr>';

3-4. switch:简化多分支

  1. // switch (表达式) {
  2. // case 条件1:
  3. // 分支语句...
  4. // break;
  5. // case ...
  6. // default:
  7. // ....
  8. // }
  9. // if ($amount > 5000 && $amount < 10000):
  10. // $payment = $amount * 0.9;
  11. // elseif ($amount >= 10000 && $amount < 20000) :
  12. // $payment = $amount * 0.7;
  13. // elseif ($amount >= 20000) :
  14. // $payment = $amount * 0.5;
  15. // else :
  16. // $payment = $amount;
  17. // endif;
  18. $amount = 3500;
  19. switch (true) {
  20. case $amount > 5000 && $amount < 10000:
  21. $payment = $amount * 0.9;
  22. break;
  23. case $amount >= 10000 && $amount < 20000 :
  24. $payment = $amount * 0.7;
  25. break;
  26. case $amount >= 20000 :
  27. $payment = $amount * 0.5;
  28. break;
  29. default:
  30. $payment = $amount;
  31. }
  32. echo '实际支付: ' , $payment , '<br>';
  33. echo '<hr>';
  34. // switch:通常用在单值判断中
  35. $discount = 0.9;
  36. $amount = 13500;
  37. // switch ($discount) {
  38. // case 0.7:
  39. // $payment = $amount * 0.7;
  40. // break;
  41. // case 0.8:
  42. // $payment = $amount * 0.8;
  43. // break;
  44. // case 0.9:
  45. // $payment = $amount * 0.9;
  46. // break;
  47. // default:
  48. // die('不支持的折扣率');
  49. // }
  50. // 模板语法
  51. switch ($discount) :
  52. case 0.7:
  53. $payment = $amount * 0.7;
  54. break;
  55. case 0.8:
  56. $payment = $amount * 0.8;
  57. break;
  58. case 0.9:
  59. $payment = $amount * 0.9;
  60. break;
  61. default:
  62. die('不支持的折扣率');
  63. endswitch;
  64. echo '实际支付: ' , $payment , '<br>';
  65. echo '<hr>';

4. 循环与模板语法

4-1. 判断型循环-入口判断型

  • while(条件) {…}
  1. error_reporting(E_ALL);
  2. $cities = ['合肥', '南京', '杭州', '苏州', '上海'];
  3. // 获取当前数组元素的值,先是很笨的办法
  4. echo current($cities);
  5. next($cities);
  6. echo current($cities);
  7. next($cities);
  8. echo current($cities);
  9. next($cities);
  10. echo current($cities);
  11. next($cities);
  12. echo current($cities);
  13. next($cities);
  14. echo current($cities);
  15. // while:进入循环代码之前进行判断,只有条件为真才执行循环体
  16. while ($city = current($cities)) {
  17. echo $city, '<br>';
  18. // 前移指针
  19. next($cities);
  20. }
  21. // 数组指针复位,重新指向第一个
  22. reset($cities);
  23. while ($city = current($cities)) {
  24. echo $city, '<br>';
  25. next($cities);
  26. }
  27. // 模板语法
  28. reset($cities);
  29. while ($city = current($cities)) :
  30. echo $city, '<br>';
  31. next($cities);
  32. endwhile;

4-2. 判断型循环-出口判断型

  • do {…} while(条件)
  1. reset($cities);
  2. do {
  3. echo $city, '<br>';
  4. // 循环体内必须要有更新循环条件的语句,否则进入死循环,
  5. next($cities);
  6. } while ($city = current($cities));
  7. // do - while 没有对应的模板语法

4-3. 计数型循环

  • for (循环变量的初始化; 循环条件; 更新循环条件){….}
  1. // 遍历数组
  2. echo count($cities);
  3. // $i:数组元素的索引,默认从0开始
  4. for ($i = 0; $i < count($cities); $i++) {
  5. echo $cities[$i], '<br>';
  6. }
  7. // 模板语法
  8. for ($i = 0; $i < count($cities); $i++) :
  9. // 输出拦截, break: 提前终止循环
  10. if ($i > 2) break;
  11. // 有选择性的输出, 跳过一部分元素
  12. if ($i === 3 || $i === 2) continue;
  13. echo $cities[$i], '<br>';
  14. endfor;

5. 表查询示例

  • 将php查询出来的二维数组,用小单元的php插入到一个表格中。
  1. <?php
  2. // 数据表查询结果通常是一个二维数组,用二维数组来模拟
  3. $users = [
  4. ['id'=>1, 'name'=>'zhu', 'grade'=> 60],
  5. ['id'=>2, 'name'=>'admin', 'grade'=> 50],
  6. ['id'=>3, 'name'=>'peter', 'grade'=> 20],
  7. ];
  8. ?>
  9. <!DOCTYPE html>
  10. <html lang="en">
  11. <head>
  12. <meta charset="UTF-8">
  13. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  14. <title><?php echo 'Hello' ?></title>
  15. </head>
  16. <body>
  17. <table border="1">
  18. <?php for ($i = 0; $i < count($users); $i++) : ?>
  19. <tr>
  20. <td><?php echo $users[$i]['id'] ?></td>
  21. <td><?php echo $users[$i]['name'] ?></td>
  22. <td><?php echo $users[$i]['grade'] ?></td>
  23. </tr>
  24. <?php endfor ?>
  25. </table>
  26. </body>
  27. </html>

6. 自己的实战

6-1. 分支结构(if、switch)

  1. $inputnum = 6;
  2. if ($inputnum > 4 and $inputnum < 7):
  3. echo 'You should go to kindergarden.';
  4. elseif ($inputnum > 5 and $inputnum < 11 ):
  5. echo 'You could go to primary school.';
  6. elseif ($inputnum > 10 and $inputnum < 19):
  7. echo 'you could go to high school.';
  8. elseif ($inputnum > 18):
  9. echo 'you could go to college.';
  10. else:
  11. echo 'You should go home now.';
  12. endif;
  13. echo '<hr>';
  14. switch ($inputnum) {
  15. case '1':
  16. echo 'You should go home now.';
  17. break;
  18. case ($inputnum > 4 and $inputnum < 7):
  19. echo 'You should go to kindergarden.';
  20. break;
  21. case ($inputnum > 18):
  22. echo 'you could go to college.';
  23. break;
  24. case '1':
  25. echo 'You should go home now.';
  26. break;
  27. default:
  28. echo 'Good boy!';
  29. break;

6-2. 循环结构(while、for)

  1. $schoolName = array('kindergarden', 'primary school', 'high school', 'university');
  2. echo $schoolName[0];
  3. echo '<hr>';
  4. reset($schoolName);
  5. while ($school = current($schoolName)) {
  6. echo $school, '<br>';
  7. next($schoolName);
  8. }
  9. echo '<hr>';
  10. for ($i=0; $i < count($schoolName); $i++) {
  11. echo $schoolName[$i], '<br>';
  12. }
  13. echo '<hr>';
  14. for ($i=0; $i < count($schoolName); $i++):
  15. echo $schoolName[$i], '<br>';
  16. endfor;
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议