博客列表 >PHP基础知识之运算符和流程控制

PHP基础知识之运算符和流程控制

῀℡῀ᵒᵐᵍᵎᵎᵎ
῀℡῀ᵒᵐᵍᵎᵎᵎ原创
2020年04月18日 14:51:25648浏览

1.PHP运算符

  • 算术运算符 + - * / % 加,减,乘,除,取余
    1. <?php
    2. // 运算符
    3. // 取模/取余数
    4. var_dump(15%6);
    5. // ++,--,只能用在变量上
    6. $n = 10;
    7. // ++在变量后面, 先引用变量的值, 再将变量执行加1的运算
    8. // var_dump($n++);
    9. // var_dump($n);
    10. // $n = $n + 1;
    11. // var_dump($n--);
    12. // var_dump(--$n);
    13. // var_dump($n);
    14. //. 字符串连接
    15. // echo 'a' . 'b' . '<br>';
    16. // echo 'abc' . 28 . '<br>';
    17. // $n = $n + 10;
    18. $n *= 10;
    19. // $n =$n *10;
    20. var_dump($n);
  • 赋值运算符 “ = “, “&”
  • “ = “ :把右边的值赋值给左边,他将右边表达式的值赋值一份交给左边变量,左边的运算数申请了一块内存,然后把赋值的值放到这个内存里
  • “&”:引用赋值,意味着两个变量都指向同一个数据,两个变量共享一块内存,如果这个内存存储的数据发生变化,那么两个变量的值都会发生变化。
    1. <?php
    2. $a = "我在学习PHP!";
    3. $b = &$a;
    4. $a = "我学习PHP!"; // 改变变量a的值
    5. $c = &$a;
    6. echo $b."<br />";
    7. echo $c."<br />";
    8. //变量 $b 和 $c都是一样指向$a的内存

    PHP中的比较运算符

  • == 返回布尔值
  • === 全等,值相等并且类型也相等,返回True
  • != 不等 如果两边不等,返回True
  • <> 不等 如果两边不等,返回True
  • !== 非全等 只要是值或者类型不等就返回True
  • >
  • <
  • <=
  • >=
  1. <?php
  2. // 比较运算符返回布尔类型的值
  3. var_dump(10 > 20);
  4. // 是否相等==, 是否全等===
  5. // ==: 只判断值是否相等, 不判断类型
  6. // 当==二边的类型不同时,会发生类型的自动转换
  7. // var_dump(10 == (int)'10');
  8. // === 全等, 不仅值要相等, 类型也要相等
  9. var_dump(10 === '10');
  10. echo '<hr>';
  11. // 太空船 <=>
  12. var_dump(10 <=> 20);
  13. // -1 < 0, 说明 10 小于 20
  14. var_dump(10 <=> 5);
  15. // 1 > 0, 说明 10 大于 5
  16. var_dump(10 <=> 10);
  17. // 0, 说明 相等
  18. echo '<hr>';
  19. // && 理解为乘法, true==>1, false==>0
  20. var_dump((3<4) && 5>8);
  21. // var_dump(true && false);
  22. // && 理解为加法, true==>1, false==>0
  23. var_dump((3<4) || 5>8);
  24. // var_dump(true || false);
  25. // $name = 'peter';
  26. // $name = 'admin';
  27. if (@$name && $name==='admin') {
  28. echo '欢迎您';
  29. } else {
  30. echo '未登录';
  31. }
  32. echo '<hr>';
  33. // ? : 简化双分支if
  34. $price = 900;
  35. if ($price > 1000) echo '太贵了'; else echo '真便宜';
  36. // 条件 ? true : false
  37. echo $price > 1000 ? '太贵了' : '真便宜';
  38. echo '<hr>';
  39. // ?? null合并运算符

2.php流程控制

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. // 单分支语法
  2. $age=17;
  3. if ($age<18) {
  4. echo '未满十八岁未成年你是一个小屁孩';
  5. }
  6. //模板写法
  7. $age=17;
  8. if ($age<18) :
  9. echo '未满十八岁未成年你是一个小屁孩';
  10. endif;
  11. // 双分支语法
  12. $age=24;
  13. if ($age<18) {
  14. echo '未满十八岁未成年你是一个小屁孩';
  15. } else {
  16. echo '您已满十八岁符合标准';
  17. }
  18. //模板写法
  19. $age=24;
  20. if ($age<18) :
  21. echo '未满十八岁未成年你是一个小屁孩';
  22. else :
  23. echo '您已满十八岁符合标准';
  24. endif;
  25. //多分支语法
  26. if ($age<18) {
  27. echo '未满十八岁你是一个小屁孩';
  28. } elseif ($age>60) {
  29. echo '超过六十岁你是老头';
  30. } elseif ($age>100) {
  31. echo '可能已经挂了';
  32. }else {
  33. echo '花样年华';
  34. }
  35. //模板语法
  36. if ($age<18) :
  37. echo '未满十八岁你是一个小屁孩';
  38. elseif ($age>60) :
  39. echo '超过六十岁你是老头';
  40. elseif ($age>100) :
  41. echo '可能已经挂了';
  42. else :
  43. echo '花样年华';
  44. endif;
  45. / 4. switch: 简化多分支
  46. $amount = 2300;
  47. // switch (true) {
  48. // case $amount > 5000 && $amount < 10000:
  49. // $payment = $amount * 0.9;
  50. // // break: 跳出当前分支
  51. // break;
  52. // case $amount >= 10000 && $amount < 20000:
  53. // $payment = $amount * 0.7;
  54. // break;
  55. // case $amount >= 20000:
  56. // $payment = $amount * 0.5;
  57. // break;
  58. // default:
  59. // $payment = $amount;
  60. // }
  61. // 模板语法
  62. switch (true) :
  63. case $amount > 5000 && $amount < 10000:
  64. $payment = $amount * 0.9;
  65. // break: 跳出当前分支
  66. break;
  67. case $amount >= 10000 && $amount < 20000:
  68. $payment = $amount * 0.7;
  69. break;
  70. case $amount >= 20000:
  71. $payment = $amount * 0.5;
  72. break;
  73. default:
  74. $payment = $amount;
  75. endswitch;
  76. echo '实际支付: ' . $payment . '<br>';
  77. echo '<hr>';
  78. // switch 更常用的场景是单值判断
  79. $discount = 0.6;
  80. $amount = 10000;
  81. switch ($discount):
  82. case 0.9:
  83. $payment = $amount * 0.9;
  84. break;
  85. case 0.8:
  86. $payment = $amount * 0.8;
  87. break;
  88. default:
  89. die('不支持的折扣率');
  90. endswitch;
  91. echo '实际支付: ' . $payment . ', 折扣率: '. $discount;

2. 循环结构

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

循环控制关键字:

序号 关键字 描述
1 continue 终止本次循环,提前进入下一轮
2 break 跳出本层循环

2.1代码演示

  1. <?php
  2. # 循环
  3. $curriculum = ['语文', '数学', '英语', '地理', '历史'];
  4. // 1. 入口判断型
  5. echo current($curriculum);
  6. next($curriculum);
  7. echo current($curriculum);
  8. next($curriculum);
  9. echo current($curriculum);
  10. echo '<hr>';
  11. reset($curriculum);
  12. // $subject = current($curriculum): 循环条件
  13. // while ($subject = current($curriculum)) {
  14. // echo $subject . '<br>';
  15. // // 更新循环条件, 没有这个语句, 会进入死循环
  16. // next($curriculum);
  17. // }
  18. // reset($curriculum);
  19. // 模板语法
  20. while ($subject = current($curriculum)) :
  21. echo $subject . '<br>';
  22. // 更新循环条件, 没有这个语句, 会进入死循环
  23. next($curriculum);
  24. endwhile;
  25. echo '<hr>';
  26. // 2. 出口判断型
  27. reset($curriculum);
  28. do {
  29. $subject = current($curriculum);
  30. echo $subject . '<br>';
  31. // 更新循环条件, 没有这个语句, 会进入死循环
  32. next($curriculum);
  33. } while ($subject = current($curriculum));
  34. // 无论条件是否为真,至少会执行一次
  35. // 没有对应的模板语法
  36. // 3. 计数型
  37. echo '数组中有 : ' . count($curriculum);
  38. echo '<hr>';
  39. // $i = 0;循环变量初始化
  40. // $i < count($curriculum): 循环条件
  41. // $i++: 更新循环条件
  42. for ($i = 0; $i < count($curriculum); $i++) {
  43. // echo $curriculum[$i] . '<br>';
  44. }
  45. // 模板语法
  46. for ($i = 0; $i < count($curriculum); $i++) :
  47. // echo $curriculum[$i] . '<br>';
  48. endfor;
  49. echo '<hr>';
  50. reset($curriculum);
  51. // continue: 终止当前循环,提前进入下一轮
  52. $curriculum = ['语文', '数学', false, '英语', null, '地理', '历史'];
  53. // while ($subject = current($curriculum)) :
  54. // echo $subject . '<br>';
  55. // next($curriculum);
  56. // endwhile;
  57. for ($i = 0; $i < count($curriculum); $i++) :
  58. // 跳过空数据
  59. if (!$curriculum[$i]) continue;
  60. echo $curriculum[$i] . '<br>';
  61. // break; 跳出本层
  62. if ($curriculum[$i] === '地理') break;
  63. endfor;

课后总结:

运算符和流程控制看似不起眼,但是在实际操作中,如果在逻辑层次不清晰的情况下,操作起来就知道锅儿是铁打的

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