Blogger Information
Blog 45
fans 3
comment 0
visits 45641
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP常用运算符与流程控制
残破的蛋蛋
Original
901 people have browsed it

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()引入的文件不存在会报错但程序不会终止执行。
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