博客列表 >运算符、流程控制、循环与文件包含

运算符、流程控制、循环与文件包含

培(信仰)
培(信仰)原创
2021年03月11日 10:48:24621浏览

运算符、流程控制、循环与文件包含

[toc]

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
  • **: 幂运算需要 php5.6+版本
  1. printf('5 模 3 = %d <br>', (5 % 3));
  2. //判断是否闰年
  3. $year = date('Y');
  4. // echo $year;
  5. //闰年:能被4整除,但是不能被100整除
  6. if ($year % 4 === 0 && $year % 100 !== 0) {
  7. printf('%d 年是闰年<br>', $year);
  8. } else {
  9. printf('%d 年不是闰年<br>', $year);
  10. }
  11. //随机数 10位的随机数
  12. echo mt_rand(), '<br>';
  13. //随机数 10位的随机数
  14. // echo mt_rand() % 100, '<br>';
  15. // 产生一个1到99的随机数
  16. echo mt_rand(1, 99);

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 /= $b $a = $a / 10;
6 %= $a %= 10 $a = $a % 10;
7 .= $a .= 'a' $a = $a . 'a'
  1. // 赋值
  2. $a = 1;
  3. $b = 2;
  4. // $a = $a + $b;
  5. //等价
  6. $a += $b;
  7. echo '$a += $b => ', $a, '<br> ';
  8. // $a = $a - $b;
  9. //等价
  10. $a -= $b;
  11. echo '$a -= $b => ', $a, '<br> ';
  12. // $a = $a * $b;
  13. //等价
  14. $a *= $b;
  15. echo '$a *= $b => ', $a, '<br> ';
  16. // $a = $a / $b;
  17. //等价
  18. $a /= $b;
  19. echo '$a /= $b => ', $a, '<br> ';
  20. // .= :字符串拼装
  21. $str = 'php';
  22. $str .= '.cn';
  23. echo $str;
  24. $list = '<ul>';
  25. $list .= '<li>item1</li>';
  26. $list .= '<li>item2</li>';
  27. $list .= '<li>item3</li>';
  28. $list .= '</ul>';
  29. echo $list;

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+
  • 比较运算符:返回布尔值,常用于流程控制中(if/while/for...)
  • <=>:也叫组合比较符,例如$a <=> $b,有三种返回结构
序号 运算 结果
1 $a > $b 返回>0 的整数
2 $a < $b 返回<0 的整数
3 $a = $b 返回=0 的整数
  1. // 比较,返回值是boolean
  2. var_dump(100 > 80);
  3. echo '<hr>';
  4. // "==": 只要求值相等就是true,如果两边类型不同则自动转换
  5. var_export(100 == '100');
  6. echo '<br>';
  7. var_export(100 == (int)'100');
  8. echo '<br>';
  9. var_export((string)100 == '100');
  10. echo '<br>';
  11. // "===": 要求值,类型全相同才返回true
  12. var_export(100 === '100');
  13. echo '<br>';
  14. var_export(100 === (int)'100');
  15. echo '<br>';
  16. $a = 25;
  17. $b = 15;
  18. // if ($a < $b) {
  19. // echo '-1 <br>';
  20. // } elseif ($a > $b) {
  21. // echo '1 <br>';
  22. // } else {
  23. // echo '0 <br>';
  24. // }
  25. // 等价于
  26. echo $a <=> $b;
  27. //逻辑
  28. // 与 &&:符号两边必须都为true,否则false
  29. // || :符号两边只要有一个为true,返回true,两边都是false才是false
  30. // 要求两边的操作数都是bool,如果不是就手动干预
  31. echo '<br>';
  32. var_dump(false && true);
  33. //第一个false 第二个条件不会判断,短路求值,后面的&&true永不执行
  34. echo '<br>';
  35. var_dump(true && false);
  36. echo '<br>';
  37. var_dump(false || true);
  38. echo '<br>';
  39. var_dump(!false, !true);
  40. $userName = 'admin';
  41. if (isset($userName) && $userName === 'admin') {
  42. echo '欢迎管理员' . $userName . '<br>';
  43. } else {
  44. echo '请登录 <br>';
  45. }
  46. if (!isset($email)) {
  47. echo '没有输入邮箱';
  48. }
  49. // 三元运算与null合并运算符
  50. $score = 90;
  51. if ($score >= 60) {
  52. echo '合格';
  53. } else {
  54. echo '补考';
  55. }
  56. echo '<br>';
  57. // 三元运算符
  58. echo $score >= 60 ? '合格' : '补考';
  59. //检测页码
  60. echo '<br>';
  61. // echo 'p = ' . $_GET['p'];
  62. // $page = isset($_GET['p']) ? $_GET['p'] : 1;
  63. // echo 'p = ' . $page;
  64. //简化
  65. //null 合并运算符,给变量一个默认值,用在表单中
  66. $page = $_GET['p'] ?? 1;
  67. echo 'p = ' . $page, '<hr>';
  68. ?>
  69. <!-- 粘性表单 -->
  70. <input type="text" value="<?= $_GET['p'] ?? 1 ?>">

5. 字符串插值

  1. //字符串插值
  2. $name = '电脑';
  3. $price = 6699;
  4. //之前
  5. echo '品名:' . $name . '<br> 价格:' . $price . '元<br>';
  6. // 单引号与双引号定义的字符串是有区别的
  7. // 双引号中的字符串更像是一个模板
  8. // 这个模板中除了字面量之外,还可以有“变量”和“转义序列”
  9. // \n :换行;\r:回车;\t:tab,\\,\$:输出$符号
  10. // 变量需要一个边界符{} 一对大括号
  11. $template = "品名: {$name} \n 价格: {$price} 元 \n";
  12. echo $template, '<br>';
  13. //换行在html中就一个空格
  14. // nl2br()在\n前自动插入<br>
  15. $template = nl2br("品名: {$name} \n 价格: {$price} 元 \n");
  16. echo $template, '<br>';
  17. // 2. heredoc:双引号字符串的替代语法
  18. // 比较适合输出大量的多行的内部存在变量的html代码
  19. // $table = <<< "SHOW"
  20. // <table border="1" width="200">
  21. // <tr><th>品名</th><td>{$name}</td></tr>
  22. // <tr><th>价格</th><td>{$price}</td></tr>
  23. // </table>
  24. // SHOW;
  25. $table = <<< SHOW
  26. <table border="1" width="200">
  27. <tr><th>品名</th><td>{$name}</td></tr>
  28. <tr><th>价格</th><td>{$price}</td></tr>
  29. </table>
  30. SHOW;
  31. //SHOW: 必须要写到第一列,必须要与起始名称一致
  32. echo $table;
  33. echo '<hr>';
  34. // 3. nowdoc:单引号的替代语法
  35. $table = <<< 'SHOW'
  36. <table border="1" width="200">
  37. <tr><th>品名</th><td>手机</td></tr>
  38. <tr><th>价格</th><td>3699</td></tr>
  39. </table>
  40. SHOW;
  41. //SHOW: 必须要写到第一列,必须要与起始名称一致
  42. echo $table;
  43. // nowdoc:适合大段的多行的字符串字面量的输出
  44. echo '<hr>';

6. 流程控制

  1. // 流程控制:分支
  2. // 1. 单分支
  3. $score = 70;
  4. if ($score >= 60) {
  5. echo '恭喜,成功上岸<br>';
  6. }
  7. // 替代语法
  8. // 目标是干掉大括号
  9. if ($score >= 60) :
  10. echo '恭喜,成功上岸<br>';
  11. endif;
  12. echo '<hr>';
  13. // 双分支
  14. $score = 70;
  15. if ($score >= 60) {
  16. echo '恭喜,成功上岸<br>';
  17. } else {
  18. echo '差一点就过了,补考吧<br>';
  19. }
  20. //替代语法
  21. $score = 70;
  22. if ($score >= 60) :
  23. echo '恭喜,成功上岸<br>';
  24. else :
  25. echo '差一点就过了,补考吧<br>';
  26. endif;
  27. // 简化语法:三元
  28. echo $score >= 60 ? '恭喜,成功上岸<br>' : '差一点就过了,补考吧<br>';
  29. // 多分支
  30. $score = 75;
  31. if ($score >= 60 && $score < 70) {
  32. echo '恭喜,成功上岸<br>';
  33. } elseif ($score >= 70) {
  34. echo '优秀,加油 <br>';
  35. } else {
  36. echo '差一点就过了,补考吧<br>';
  37. }
  38. // 替代语法
  39. $score = 75;
  40. if ($score >= 60 && $score < 70) :
  41. echo '恭喜,成功上岸<br>';
  42. elseif ($score >= 70) :
  43. echo '优秀,加油<br>';
  44. else :
  45. echo '差一点就过了,补考吧<br>';
  46. endif;
  47. // 4. switch, 多分支的简化方案
  48. echo '<hr>';
  49. switch ($score) {
  50. case $score >= 60 && $score < 70:
  51. echo '恭喜,成功上岸<br>';
  52. break;
  53. case $score >= 70:
  54. echo '优秀,加油<br>';
  55. break;
  56. default:
  57. echo '差一点就过了,补考吧<br>';
  58. }
  59. //替代语法
  60. switch ($score):
  61. case $score >= 60 && $score < 70:
  62. echo '恭喜,成功上岸<br>';
  63. break;
  64. case $score >= 70:
  65. echo '优秀,加油<br>';
  66. break;
  67. default:
  68. echo '差一点就过了,补考吧<br>';
  69. endswitch;
  70. // switch 更多用在单值判断
  71. // switch ($_GET['action'] ?? 1):
  72. // case 'insert':
  73. // echo '<script>alert("新增成功")</script>';
  74. // break;
  75. // case 'update':
  76. // echo '<script>alert("更新成功")</script>';
  77. // break;
  78. // case 'delete':
  79. // echo '<script>alert("删除成功")</script>';
  80. // break;
  81. // default:
  82. // echo '<script>alert("非法操作")</script>';
  83. // endswitch;

模板写法

  1. <hr color="red">
  2. <?php $score = 75 ?>
  3. <?php if ($score >= 60 && $score < 70) : ?>
  4. <p>恭喜,成功上岸 </p>
  5. <?php elseif ($score >= 70) : ?>
  6. <p>优秀,加油</p>
  7. <?php else : ?>
  8. <p>差一点就过了,补考吧</p>
  9. <?php endif ?>

7. 循环结构

  1. // 三要素
  2. // 1. 循环条件的初始值
  3. // 2. 循环条件
  4. // 3. 更新循环条件 (步长)
  5. $courses = ['数学', '语文', '英语', '道法', '美术'];
  6. // 数组的长度
  7. // echo count($courses);
  8. // 1. 条件循环
  9. // 1.1 入口判断型 while(){}
  10. // 1. 循环条件的初始值
  11. // $i 是要遍历的数组的索引,默认从0开始
  12. $i = 0;
  13. // 2. 循环条件
  14. // while ($i < count($courses)) {
  15. // echo $courses[$i], '<br>';
  16. // // 3. 更新循环条件
  17. // $i++;
  18. // }
  19. //替代语法
  20. while ($i < count($courses)) :
  21. echo $courses[$i], '<br>';
  22. // 3. 更新循环条件
  23. $i++;
  24. endwhile;
  25. echo '<hr>';
  26. // 1.2 出口判断型 do {} while ()
  27. // 当条件为false至少执行一次
  28. $i = 0;
  29. do {
  30. echo $courses[$i], '<br>';
  31. $i++;
  32. } while ($i > count($courses));
  33. echo '<hr>';
  34. // 2. 计算式, for
  35. //for() 可以视为while的简化
  36. // for(初始条件;循环条件;更新条件)
  37. // for ($i = 0; $i < count($courses); $i++) {
  38. // echo $course[$i], '<br>';
  39. // }
  40. for ($i = 0; $i < count($courses); $i++) :
  41. echo $courses[$i], '<br>';
  42. endfor;
  43. echo '<hr color="red">';
  44. // 3. 提前终止循环
  45. // 3.1 提前终止本轮循环,进入到下一轮
  46. // 3.2 直接退出循环
  47. // for ($i = 0; $i < count($course); $i++) {
  48. // // 跳过英语
  49. // if ($i === 2) continue;
  50. // //只输出前2个
  51. // if ($i > 2) break;
  52. // echo $course[$i], '<br>';
  53. // }
  54. // echo '<hr>';
  55. // 遍历数组
  56. foreach ($courses as $i => $course) {
  57. if ($i === 2) {
  58. continue;
  59. }
  60. echo $course, '<br>';
  61. };
  62. echo '<hr color="green">';
  63. //替代语法
  64. foreach ($courses as $i => $course) :
  65. if ($i === 2) continue;
  66. echo $course, '<br>';
  67. endforeach;

8. 文件包含

本质上在当前脚本插入一个php结束标记,进入html模式

include

  1. // include:将一个外部的文件插入到当前的代码块中
  2. $name = 'TJ';
  3. function hello($name)
  4. {
  5. echo 'Hello ' . $name;
  6. }
  7. include 'hello.inc.php';
  8. // 当include时,当前会自动插入一个结束标记,进入到html模式
  9. // 被插入的脚本 可以访问当前作用域中的所有成员
  10. include 'test.inc.html';
  11. // include是在运行阶段包含,所以可以用在if中
  12. // 条件包含
  13. if (true) {
  14. // include 'hello.inc.php';
  15. require 'hello.inc.php';
  16. } else {
  17. echo '没有包进来';
  18. }

require

可以理解为 require === include + exit;

include_once ,只包含一次,失败会继续执行
require_once ,只包含一次,失败就退出

  1. include 'world.inc.php';
  2. exit;
  3. require 'world.inc.php';
  4. echo '<h3>继续</h3>';

测试发现 require 也可以用在if中

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