Blogger Information
Blog 47
fans 1
comment 0
visits 53035
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP - 运算符和流程控制
晴天
Original
751 people have browsed it

PHP 运算符和流程控制

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. <?php
  2. // 赋值
  3. $a = 10;
  4. $b = 15;
  5. // % 取模 就是取余数
  6. echo $b%$a .'<br>'; //输出 5 15/10=1 余5
  7. // $a++ ++$a 自增
  8. // $a++ 先用后加
  9. echo $a++.'<br>' ; //输出 10
  10. /*
  11. 等同于
  12. echo $a; //先输出
  13. $a = $a+1 ; //再加一
  14. */
  15. echo $a.'<br>'; //输出 11
  16. // ++$a 先加后用
  17. $c = 20;
  18. echo ++$c.'<br>'; //输出 21
  19. /*等同于
  20. $c = $c + 1 ; //先加1
  21. echo $c ; //再输出
  22. */

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';

代码

  1. <?php
  2. // 赋值
  3. $a = 10;
  4. $b = 15;
  5. // +=
  6. $a += 10;
  7. /**等同于
  8. * $a = $a + 10 ;
  9. */
  10. echo $a ; //输出 20
  11. // .=
  12. $b .= 'abc';
  13. /**等同于
  14. * $b = $b . 'abc';
  15. */
  16. echo $b ; //输出 15abc

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. <?php
  2. // 太空船运算符
  3. // 赋值
  4. $a = 20;
  5. $b = 15;
  6. $ab = $a<=>$b;
  7. // 判断
  8. if ($ab == 1) :
  9. echo 'a>b';
  10. elseif ($ab == 0) :
  11. echo 'a=b';
  12. else :
  13. echo 'a<b';
  14. endif;

5. 逻辑运算符

序号 运算符 示例 描述
1 && $a && $b 逻辑与
2 ` ` `$a $b` 逻辑或
3 ! !$a 逻辑非
4 xor $a xor $b 逻辑异或
  • 逻辑运算符优先级小于比较运算符

演示代码

  1. <?php
  2. error_reporting(E_ALL); //打开所有报错
  3. // $name = 'a';
  4. if( isset($name) && $name == "admin"):
  5. echo '管理员'; //name有值且值=admin 显示管理员
  6. elseif ( isset($name) && $name != 'admin'): // 不等于 与上面结果相同
  7. echo '普通用户'; //name有值但值不等于admin 显示普通用户
  8. else:echo '未登录'; //name变量为空或没有name变量 显示未登录
  9. endif;
  10. #当前满足第三条 运行结果 未登录
  11. echo '<hr>';
  12. // 逻辑运算符 ||
  13. $wechat = '1'; //微信
  14. $tel = '1'; //手机号
  15. $email = '1'; //邮箱
  16. if ( $wechat === '' || $tel === '' || $email === '' ): //如果三个变量其中有一个为空,那么输出当前账户未绑定手机/微信/邮箱
  17. echo '当前账户未绑定手机/微信/邮箱';
  18. else: echo '账户很安全'; //如果三个变量均不为空,那么输出账户很安全
  19. endif;
  20. //当前三个值都有变量 输出 账户很安全
  21. echo '<hr>';

6. 三元运算符

序号 运算符 示例 描述 场景
1 ?: $a ?: $b 仅判断表达式true/false 简化双分支
2 ?? $a ?? $b 判断变量存在且不为 null 设置默认值

演示代码

  1. // 三元运算符 ?:
  2. $realname = '1';
  3. $password = '';
  4. $problem = '';
  5. $r = 1;
  6. // 用if写
  7. // if( $realname === '' || $password === '' || $problem === ''){
  8. // echo '当前账户存在隐患,具体原因如下:'.'<br>';
  9. // if ($realname === '') {
  10. // echo $r++.'.未实名'.'<br>';
  11. // }
  12. // if ($password === '') {
  13. // echo $r++.'.未设置密码'.'<br>';
  14. // }
  15. // if ($problem === '') {
  16. // echo $r++.'.未添加安全问题'.'<br>';
  17. // }
  18. // }
  19. // 使用三元运算符简写
  20. echo $realname === '' || $password === '' || $problem === ''?
  21. '当前账户存在隐患,具体原因如下:'.'<br>':'';
  22. echo $realname ==='' ? $r++.'.未实名'.'<br>' : '' ;
  23. echo $password ==='' ? $r++.'.未设置密码'.'<br>':'';
  24. echo $problem ===''?$r++.'.未添加安全问题'.'<br>':'';
  25. echo '<hr>';
  26. // 三元运算符 ??
  27. # $username = '我爱php';
  28. // 输出、判断有没有设置用户名,如果有显示用户名,如果没有显示默认名
  29. // 使用 ?: 写
  30. // echo $username = isset($username) ? $username : '木有昵称';
  31. //输出 检测变量名是否存在且值不为null 存在直接输出 不存在输出木有昵称
  32. // 当前该变量已被注释不存在,则输出 木有昵称
  33. # 用三元运算符??简化上面代码
  34. echo $username = $username ?? '木有昵称';
  35. // 值相同,完美

7. 上面逻辑运算符、三元运算符中(?:)示例不够简洁,全部推翻重做

  1. <?php
  2. error_reporting(E_ALL); //打开所有报错
  3. // 第一个例子name值为admin显示管理员,值为其他显示其他用户,没有值则显示未登录
  4. $name = '';
  5. if(isset($name) && $name === 'admin') :
  6. echo '管理员'.$name; //name值等于admin 输出
  7. elseif (isset($name) && !empty($name)):
  8. echo '普通用户'.$name; //有name值 且不为空 输出
  9. else : echo '未登录'; //没有name变量 或 name值为空、null false
  10. endif;
  11. echo '<hr>';
  12. // 第二个例子 三个变量都存在且有值则输出账户很安全否则输出账号危险
  13. // 还要判断值的格式是否正确
  14. $wechat = '1'; //微信
  15. $tel = '1'; //手机号
  16. $email = '1@qq.com'; //邮箱
  17. $i = 1;
  18. // 检测WeChat是否存在值、手机号是否存在值且值的格式是否为整数、邮箱是否存在值且值的格式是否为邮箱
  19. //都通过则显示账户安全,否则存在隐患
  20. if (isset($wechat)&&$wechat != '' && isset($tel) && filter_var($tel,FILTER_VALIDATE_INT)&&isset($email)&& filter_var($email,FILTER_VALIDATE_EMAIL)) {
  21. echo '账户安全';
  22. }else {
  23. echo '当前账户存在安全隐患,具体原因如下:'.'<br>';
  24. }
  25. // 检测$WeChat是否存在值,存在则不提示,不存在提示未设置
  26. echo isset($wechat) && !empty($wechat) ? null : $i++ .'.微信账号未设置'.'<br>';
  27. // 检测$tel是否存在值,存在则不提示,不存在提示未设置
  28. if (!isset($tel) && empty($tel)) :
  29. echo $i++ . '.手机号未设置'.'<br>';
  30. // 检测$tel值类型是否正确,正确则不提示,不正确提示格式错误
  31. elseif (isset($tel) && !filter_var($tel,FILTER_VALIDATE_INT)) :
  32. echo $i++ . '.手机号格式错误'.'<br>';
  33. endif;
  34. // 检测$email是否存在值,存在则不提示,不存在提示未设置
  35. if (!isset($email) && empty($email)) :
  36. echo $i++ . '.邮箱未设置'.'<br>';
  37. // 检测$email值类型是否正确,正确则不提示,不正确提示格式错误
  38. elseif(isset($email)&& !filter_var($email,FILTER_VALIDATE_EMAIL)):
  39. echo $i++ . '.邮箱格式错误'.'<br>';
  40. endif;
  41. echo '<hr>';
  42. # 3. 若用户有昵称则原样输出,没有则显示默认昵称
  43. $name = '我爱PHP';
  44. echo $name = isset($name) && empty($name) ?'木有昵称':$name;

8. 错误屏蔽符

运算符 示例 描述 场景
@ @(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;
  • switch改写上面的多分支并进行再次优化
  1. $problem; //创建一个‘安全’变量
  2. $wechat = '1'; //微信
  3. $tel = '1'; //手机号
  4. $email = '1@qq.com'; //邮箱
  5. $i = 1;
  6. // 检测WeChat是否存在值、手机号是否存在值且值的格式是否为整数、邮箱是否存在值且值的格式是否为邮箱
  7. //都通过则显示账户安全,否则存在隐患
  8. $problem = isset($wechat)&& !empty($wechat) && isset($tel) && filter_var($tel,FILTER_VALIDATE_INT)&&isset($email)&& filter_var($email,FILTER_VALIDATE_EMAIL) ? $problem = '账户安全'.'<br>' : $problem = '当前账户存在安全隐患,具体原因如下:'.'<br>';
  9. // 判断微信
  10. $wechat = isset($wechat) && !empty($wechat) ? null : $i++ .'.微信账号未设置'.'<br>';
  11. // 判断手机号
  12. switch (true) {
  13. case isset($tel) && empty($tel) :
  14. $tel = $i++ . '.手机号未设置'.'<br>';
  15. break;
  16. case isset($tel) && !filter_var($tel,FILTER_VALIDATE_INT) :
  17. $tel = $i++ . '.手机号格式错误'.'<br>';
  18. break;
  19. default:
  20. $tel = null;
  21. }
  22. // 判断邮箱
  23. switch (true) {
  24. case isset($email) && empty($email) :
  25. $email = $i++ . '.邮箱未设置'.'<br>';
  26. break;
  27. case isset($email)&& !filter_var($email,FILTER_VALIDATE_EMAIL) :
  28. $email = $i++ . '.邮箱格式错误'.'<br>';
  29. break;
  30. default:
  31. $email = null;
  32. }
  33. // 输出
  34. echo $problem , $wechat ,$tel , $email ;

2. 循环结构

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

循环控制关键字:

序号 关键字 描述
1 continue 终止本次循环,提前进入下一轮
2 break 跳出本层循环
  • current() 获取数组当前值

  • next() 指针下移

  • reset() 重置指针

  • 出口判断型 无论条件是否为真,至少会执行一次

  • count()可以打印出数组的数量

演示代码

  1. $sities = ['武汉','南京','济南','合肥','上海','杭州'] ;
  2. while ($sity = current($sities)) {
  3. echo $sity .'<br>';
  4. next($sities);
  5. }
  6. reset($sities);
  7. echo '<hr>';
  8. echo '<hr>';
  9. // 利用循环写九九乘法表
  10. for ($i=1; $i <= 9; $i++) {
  11. for ($j=1; $j <=9 ; $j++) {
  12. echo $j .'*'.$i .'='.$i*$j .' ; ';
  13. if ($i === $j) break;
  14. }
  15. echo '<br>';
  16. }

效果图

总结

  • 太空船运算符返回三个值负数、0、正数,注意区分
  • 逻辑运算符的 与、或 容易搞混,着重记一下
    • 与:两边为乘法 有一个为假,则是假
    • 或:两边为加法 均为假,才是假
  • 错误屏蔽符,在开发环境不要用,上线必须用,把错误归到系统日志里
  • 流程控制 switch可以简化elseif ,主要是用来判断单值
  • for循环 记得跳出、结束循环
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