博客列表 >PHP - 运算符和流程控制

PHP - 运算符和流程控制

晴天
晴天原创
2020年04月19日 12:50:15754浏览

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循环 记得跳出、结束循环
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议