博客列表 >PHP常用运算符与流程控制

PHP常用运算符与流程控制

残破的蛋蛋
残破的蛋蛋原创
2021年01月29日 12:28:05904浏览

PHP常用运算符与流程控制

一、PHP常用的运算符

1.1 算术运算符

算数运算符是最常用的符号,就是常见的数学上的操作符,用来处理简单的算数运算。

运算符 意义 示例 结果
+ 加法运算 1 + 2 3
- 减法运算/取负数 10 - 1 9
* 乘法运算 3 * 3 9
/ 除法运算 9 / 3 3
% 求模运算符(取余运算符) 10 % 3 10除以3,取它的余数,叔结果是1
++ 累加1 $a++ 或 ++$a a的值加1
递减1 $a— 或 —$a a的值减1
** 求幂运算 3 ** 3 3的3次方,27(PHP5.6以后引入的)

上面的算数运算符出了+-*/ 都比较简单以外,用的比较多的是%++--,下面我们一一用案例说明。

  • 求模运算符
  1. $a = 10 % 3; // 求10除以3的余数
  2. var_dump($a); // 输出整型余数1:int(1)
  3. // 利用求模运算符判断2021年是否为闰年
  4. // 首先,闰年是能被4整除,并且不能被100整除的年份
  5. $year = date('Y');
  6. if ($year % 4 === 0 && $year % 100 !== 0) {
  7. echo "$year 年为闰年 <br>";
  8. } else {
  9. echo "$year 年是平年 <br>";
  10. }
  • 递增和递减运算符
示 例 说 明 等 价 关 系
$a++ 先计算表达式的值,再执行递增的操作。 $a = $a + 1
++$a 先进行递增运算,再计算表达式的值。 $a = $a + 1
—$a 先计算表达式的值,再执行递减的操作。 $a = $a - 1
++$a 先进行递减运算,再计算表达式的值。 $a = $a - 1

通过以下案例,可以说明这一点:

  1. $a = 10;
  2. $b = $a++;
  3. var_dump($a, $b); // int(11) int(10)

以上语句被执行后,$a的值为11,$b的值为10。首先我们先将$a的值赋值给$b,然后再将$a的值加1。

而以下语句被执行后,$a$b的值都是11,因为,首先我们先将$a的值加1,再进行赋值操作把$a的值赋给$b

  1. // 因为,首先我们先将`$a`的值加1,再进行赋值操作把`$a`的值赋给`$b`。
  2. $a = 10;
  3. $b = ++$a;
  4. var_dump($a, $b); // int(11) int(11)

1.2 字符串运算符

在PHP中,字符串运算符只有一个,那就是点(.),也被叫做连接运算符,它是一个二元运算符,返回的是它左右两边参数连接后的字符串。

  1. $name = "残破的蛋蛋";
  2. $age = 30;
  3. $height = "173cm";
  4. echo "我的名字是{$name},年龄是{30}岁,身高{$height}<br>";

以上结果将输出:我的名字是残破的蛋蛋,年龄是{30}岁,身高173cm

1.3 赋值运算符

赋值运算符也是一个二元运算符,它的左边必须是一个变量,右边可以是一个表达式。

运 算 符 意 义 示 例
= 将一个值或表达式赋给变量 $a = 100;
+= 将变量与所赋的值相加后再赋值给变量 $a += 3 <=> $a = $a + 3;
-= 将变量与所赋的值相减后再赋值给变量 $a -= 3 <=> $a = $a - 3;
*= 将变量与所赋的值相乘后再赋值给变量 $a *= 3 <=> $a = $a * 3;
/= 将变量与所赋的值相除后再赋值给变量 $a /= 3 <=> $a = $a / 3;
%= 将变量与所赋的值求模后再赋值给变量 $a %= 3 <=> $a = $a % 3;
.= 将变量与所赋的值相连后再赋值给变量 $a .= “3” <=> $a = $a.”3”;
  1. $a = $b = $c = $d = $e = 100;
  2. $a += 10; // $a = $a + 10;
  3. $b -= 10; // $a = $a - 10;
  4. $c *= 10; // $a = $a * 10;
  5. $d /= 10; // $a = $a / 10;
  6. $e %= 10; // $a = $a % 10;
  7. $result = "结果是:";
  8. $result .= "\$a自加10后的值为:${a},";
  9. $result .= "\$b自减10后的值为:${b},";
  10. $result .= "\$c自加10后的值为:${c},";
  11. $result .= "\$d自加10后的值为:${d},";
  12. $result .= "\$e自加10后的值为:${e}。";
  13. echo $result; // 输出全部相连接的字符串

以上代码会输出:结果是:$a自加10后的值为:110,$b自减10后的值为:90,$c自加10后的值为:1000,$d自加10后的值为:10,$e自加10后的值为:0。

1.4 比较运算符

比较运算符被称为关系运算符,又叫条件运算符,也是一种二元运算符。

运 算 符 描 述 说 明 示 例
> 大于 当左边的操作数大于右边操作数时返回TRUE,否则返回FALSE $a > $b
< 小于 当左边的操作数小于右边操作数时返回TRUE,否则返回FALSE $a < $b
>= 大于等于 当左边的操作数大于等于右边操作数时返回TRUE,否则返回FALSE $a >= $b
<= 小于等于 当左边的操作数大于等于右边操作数时返回TRUE,否则返回FALSE $a <= $b
== 等于 当左边的操作数等于右边操作数时返回TRUE,否则返回FALSE $a == $b
=== 全等 当左边的操作数等于右边操作数,并且它们的类型也相同时返回TRUE,否则返回FALSE $a === $b
<>或!= 不等 当左边的操作数不等于右边操作数时返回TRUE,否则返回FALSE $a<>$b 或 $a != $b
!== 非全等 当左边的操作数不等于右边操作数,或者它们的类型也不相同时返回TRUE,否则返回FALSE $a !=== $b
<=> 太空船运算符 也称作组合比较符,当左边小于、等于、大于右边时,分别返回一个小于、等于、大于0的整数值。PHP7+提供 $a<=>$b
?? NULL合并操作符 从左边往右第一个存在切不为NULL的操作数。如果都没有定义切不为NULL,则返回NULL,PHP7+提供 $a ?? $b ?? $c

以上所有列举的比较运算符,我们需要格外注意NULL合并操作符(??)。因为在日常的开发中,我们会大量的使用到三元运算,以及iiset()函数检测变量是否已经存在,从PHP7.0+开始,提供的NULL合并操作符(??)很好的解决了这个问题,下面请看这个案例:

假设我们在请求一个url地址是,判断$_GET[‘user’]是否存在,以前需要这样写:

  1. $username = isset($_GET['user']) ? $_GET['user'] : '用户不存在!';

而从PHP7.0开始,我们可以使用NULL合并操作符(??)来这样写:

  1. $username = $_GET['user'] ?? '用户不存在!';

以上两条语句的作用完全等同,推荐使用??模式,这样代码更简洁。

NULL合并操作符(??)不仅仅可以连接两个表达式,还可以链接多级,如果第一个存在且不为空返回第一个值,如果第一个为NULL,再对第二个进行判断,以此类推。

  1. $username = $_GET['user'] ?? $_GET['id'] ?? '用户不存在!<br>';

上述代码中,如果$_GET['user']$_GET['id']这两个变量都不存在的话,就返回用户不存在这个结果。

1.5 逻辑运算符

逻辑运算符是用来判断表达式是否成立的,并且逻辑运算符只能操作布尔型数值,处理后的结果也是一个布尔型数值。

运 算 符 描 述 说 明 示 例
&& 或 and 逻辑与 当左右两边操作数都为TRUE时,返回TRUE,否则返回FALSE $a && $b,$a and $b
|| 或 or 逻辑或 当左右两边操作数都为FALSE时,返回FALSE,否则返回TRUE $a or $b,$a || $b
!或 not 逻辑非 当操作数为TRUE时返回FALSE,否则返回TRUE not $a,!$a
xor 逻辑异或 当左右两边操作数只有一个为TRUE时,返回TRUE,否则返回FALSE $a xor $b

以上需要注意的是逻辑异或(xor),这个只有运算时两边的表达式不同时才为TRUE,即:操作数一遍需要为TRUE,另外一个为FALSE,结果才是TRUE。两边表达式结果相同时,不管是TRUE还是FALSE,结果都是FALSE。

以下案例中定义了用户名,密码,邮箱,电话号码四个变量,分别存储在$username$password$email$phone中。

  1. $username = "admin"; // 用户名
  2. $password = "123456"; // 密码
  3. $email = "admin@abc.com"; // 邮箱
  4. $phone = ""; // 电话号码
  5. // 使用`逻辑与`运算符判断用户账号密码是否正确
  6. if ($username === "admin" && $password === "123456") {
  7. echo "用户名和密码输入正确!";
  8. }
  9. // 使用`逻辑或`判断变量为空的情况
  10. if ($username === "" || $password === "" || $email === "" || $phone === "") {
  11. echo "所有值都不能为空!";
  12. }
  13. // 使用多个不同的逻辑运算符
  14. if ( (isset($email) && !empty($email)) || (isset($phone) && !empty($phone))) {
  15. echo "至少留一种联系方式";
  16. }

二、流程控制

2.1 单分支

  1. $a = 100;
  2. if ($a > 10) {
  3. echo "${a}的值大于10";
  4. }

以上代码还有替代语法:

  1. $a = 100;
  2. if ($a > 10) :
  3. echo "${a}的值大于10";
  4. endif;

2.2 双分支

  1. $a = 8;
  2. if ($a > 10) {
  3. echo "${a}的值大于10";
  4. } else {
  5. echo "${a}的值小于10";
  6. }

以上代码的替代语法:

  1. $a = 8;
  2. if ($a > 10) :
  3. echo "${a}的值大于10";
  4. else :
  5. echo "${a}的值小于10";
  6. endif;

2.3 多分支

  1. $score = 59;
  2. if ($score >=80) {
  3. echo "优秀";
  4. } elseif($score >=60 && $score < 80) {
  5. echo "及格";
  6. } else {
  7. echo "不及格";
  8. }

以上代码的替代语法:

  1. $score = 59;
  2. if ($score >=80 && $score <= 100) :
  3. echo "优秀";
  4. elseif ($score >=60 && $score < 80) :
  5. echo "及格";
  6. else :
  7. echo "不及格";
  8. endif;

2.4 switch简化多分支

  1. $score = 95;
  2. switch ($score) {
  3. case $score >=80 && $score <= 100:
  4. echo "优秀";
  5. break;
  6. case $score >=60 && $score < 80:
  7. echo "及格";
  8. break;
  9. default:
  10. echo "不及格";
  11. }

以上代码的替代语法:

  1. $score = 95;
  2. switch ($score) :
  3. case $score >=80 && $score <= 100 :
  4. echo "优秀";
  5. break;
  6. case $score >=60 && $score < 80 :
  7. echo "及格";
  8. break;
  9. default:
  10. echo "不及格";
  11. endswitch;

2.4 循环结构

循环结构三要素:

  1. 循环条件的初始值
  2. 循环条件
  3. 更新循环条件

2.4.1 while语句

while语句属于入口型循环,首先需要检查条件是否为TRUE,只有条件成立的时候才执行while里面的语句块。

  • 案例:统计循环次数,到第10次时结束循环。
  1. // 初始化循环次数累加的变量
  2. $count = 1;
  3. while ($count <= 10) {
  4. echo "这是第<b>$count</b>次循环的结果!<br>";
  5. $count++;
  6. }
  • 结果图:

while循环

2.4.2 do…while循环

do…while与while循环非常想死,区别在于表达式的值是再每次循环结束时而不是在开始时检查。

  1. $count = 0;
  2. do {
  3. echo $count;
  4. } while ($count > 0);

由于do…while循环在结束时才检查循环条件是否满足,所以上述代码还是会输出一个结果:0。

2.4.3 for循环

for循环语句是由分号分隔的三部分组成的:初始化条件条件表达式更新条件

  1. for ($count = 1; $count <= 10; $count++) {
  2. echo "这是第<b>${count}</b>次循环的结果!<br>";
  3. }
  • 结果图:

for循环

2.4.4 foreach遍历数组

  1. $city = ["北京", "上海", "广州", "武汉", "郑州"];
  2. foreach ($city as $key => $value) {
  3. $key += 1;
  4. echo "当前第${key}次循环输出的城市是:${value}<br>";
  5. }
  • 效果图:

foreach

三、文件包含原理以及require()和include()的区别

3.1 文件包含原理

文件加载原理:
  1.在引入文件的时候(include或require),系统会自动将引入的文件内的代码加载到当前文件中。
  2.对应的文件中的代码嵌入的位置就是对应的includerequire位置,类似于在html中引入图片(img)的路径。
  3.当使用include时,当前会自动插入一个结束标记,进入到html模式。

3.2 require()和include()的区别

require()和include()的本质都是包含文件,唯一的区别在于如果包含的文件不存在时二者的报错形式不一样,可以通过以下案例说明。

  • 使用include引入hello1.inc.php文件
  1. if (true) {
  2. include "hello1,inc.php";
  3. }
  • 效果图:

include

从上述代码案例中可以看出,虽然我们引入的hello1,inc.ph文件并不存在,也报了错,但是并不影响程序继续往下执行。

  • 使用require引入hello1.inc.php文件
  1. require "hello1,inc.php";
  2. echo "使用require引入不存在的文件时程序会报错终止。";
  • 效果图:

require

从上述代码案例中可以看出,我们引入的hello1,inc.ph文件不存在,并且报错了:No such file or directory in...,程序也终止了没有输出下一行文字。

总结:

  • require()和include()的本质都是包含文件;
  • require()引入的文件不存在会报错,且程序会终止执行;
  • include()引入的文件不存在会报错但程序不会终止执行。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议