算数运算符是最常用的符号,就是常见的数学上的操作符,用来处理简单的算数运算。
运算符 | 意义 | 示例 | 结果 |
---|---|---|---|
+ | 加法运算 | 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以后引入的) |
上面的算数运算符出了+
、-
、*
、/
都比较简单以外,用的比较多的是%
、++
、--
,下面我们一一用案例说明。
$a = 10 % 3; // 求10除以3的余数
var_dump($a); // 输出整型余数1:int(1)
// 利用求模运算符判断2021年是否为闰年
// 首先,闰年是能被4整除,并且不能被100整除的年份
$year = date('Y');
if ($year % 4 === 0 && $year % 100 !== 0) {
echo "$year 年为闰年 <br>";
} else {
echo "$year 年是平年 <br>";
}
示 例 | 说 明 | 等 价 关 系 |
---|---|---|
$a++ | 先计算表达式的值,再执行递增的操作。 | $a = $a + 1 |
++$a | 先进行递增运算,再计算表达式的值。 | $a = $a + 1 |
—$a | 先计算表达式的值,再执行递减的操作。 | $a = $a - 1 |
++$a | 先进行递减运算,再计算表达式的值。 | $a = $a - 1 |
通过以下案例,可以说明这一点:
$a = 10;
$b = $a++;
var_dump($a, $b); // int(11) int(10)
以上语句被执行后,$a
的值为11,$b
的值为10。首先我们先将$a
的值赋值给$b
,然后再将$a
的值加1。
而以下语句被执行后,$a
和$b
的值都是11,因为,首先我们先将$a
的值加1,再进行赋值操作把$a
的值赋给$b
。
// 因为,首先我们先将`$a`的值加1,再进行赋值操作把`$a`的值赋给`$b`。
$a = 10;
$b = ++$a;
var_dump($a, $b); // int(11) int(11)
在PHP中,字符串运算符只有一个,那就是点(.),也被叫做连接运算符,它是一个二元运算符,返回的是它左右两边参数连接后的字符串。
$name = "残破的蛋蛋";
$age = 30;
$height = "173cm";
echo "我的名字是{$name},年龄是{30}岁,身高{$height}<br>";
以上结果将输出:我的名字是残破的蛋蛋,年龄是{30}岁,身高173cm
。
赋值运算符也是一个二元运算符,它的左边必须是一个变量,右边可以是一个表达式。
运 算 符 | 意 义 | 示 例 |
---|---|---|
= | 将一个值或表达式赋给变量 | $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”; |
$a = $b = $c = $d = $e = 100;
$a += 10; // $a = $a + 10;
$b -= 10; // $a = $a - 10;
$c *= 10; // $a = $a * 10;
$d /= 10; // $a = $a / 10;
$e %= 10; // $a = $a % 10;
$result = "结果是:";
$result .= "\$a自加10后的值为:${a},";
$result .= "\$b自减10后的值为:${b},";
$result .= "\$c自加10后的值为:${c},";
$result .= "\$d自加10后的值为:${d},";
$result .= "\$e自加10后的值为:${e}。";
echo $result; // 输出全部相连接的字符串
以上代码会输出:结果是:$a自加10后的值为:110,$b自减10后的值为:90,$c自加10后的值为:1000,$d自加10后的值为:10,$e自加10后的值为:0。
比较运算符被称为关系运算符,又叫条件运算符,也是一种二元运算符。
运 算 符 | 描 述 | 说 明 | 示 例 |
---|---|---|---|
> | 大于 | 当左边的操作数大于右边操作数时返回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’]是否存在,以前需要这样写:
$username = isset($_GET['user']) ? $_GET['user'] : '用户不存在!';
而从PHP7.0开始,我们可以使用NULL合并操作符(??)
来这样写:
$username = $_GET['user'] ?? '用户不存在!';
以上两条语句的作用完全等同,推荐使用??
模式,这样代码更简洁。
NULL合并操作符(??)
不仅仅可以连接两个表达式,还可以链接多级,如果第一个存在且不为空返回第一个值,如果第一个为NULL,再对第二个进行判断,以此类推。
$username = $_GET['user'] ?? $_GET['id'] ?? '用户不存在!<br>';
上述代码中,如果$_GET['user']
,$_GET['id']
这两个变量都不存在的话,就返回用户不存在
这个结果。
逻辑运算符是用来判断表达式是否成立的,并且逻辑运算符只能操作布尔型数值,处理后的结果也是一个布尔型数值。
运 算 符 | 描 述 | 说 明 | 示 例 |
---|---|---|---|
&& 或 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
中。
$username = "admin"; // 用户名
$password = "123456"; // 密码
$email = "admin@abc.com"; // 邮箱
$phone = ""; // 电话号码
// 使用`逻辑与`运算符判断用户账号密码是否正确
if ($username === "admin" && $password === "123456") {
echo "用户名和密码输入正确!";
}
// 使用`逻辑或`判断变量为空的情况
if ($username === "" || $password === "" || $email === "" || $phone === "") {
echo "所有值都不能为空!";
}
// 使用多个不同的逻辑运算符
if ( (isset($email) && !empty($email)) || (isset($phone) && !empty($phone))) {
echo "至少留一种联系方式";
}
$a = 100;
if ($a > 10) {
echo "${a}的值大于10";
}
以上代码还有替代语法:
$a = 100;
if ($a > 10) :
echo "${a}的值大于10";
endif;
$a = 8;
if ($a > 10) {
echo "${a}的值大于10";
} else {
echo "${a}的值小于10";
}
以上代码的替代语法:
$a = 8;
if ($a > 10) :
echo "${a}的值大于10";
else :
echo "${a}的值小于10";
endif;
$score = 59;
if ($score >=80) {
echo "优秀";
} elseif($score >=60 && $score < 80) {
echo "及格";
} else {
echo "不及格";
}
以上代码的替代语法:
$score = 59;
if ($score >=80 && $score <= 100) :
echo "优秀";
elseif ($score >=60 && $score < 80) :
echo "及格";
else :
echo "不及格";
endif;
$score = 95;
switch ($score) {
case $score >=80 && $score <= 100:
echo "优秀";
break;
case $score >=60 && $score < 80:
echo "及格";
break;
default:
echo "不及格";
}
以上代码的替代语法:
$score = 95;
switch ($score) :
case $score >=80 && $score <= 100 :
echo "优秀";
break;
case $score >=60 && $score < 80 :
echo "及格";
break;
default:
echo "不及格";
endswitch;
循环结构三要素:
while语句属于入口型循环,首先需要检查条件是否为TRUE,只有条件成立的时候才执行while里面的语句块。
// 初始化循环次数累加的变量
$count = 1;
while ($count <= 10) {
echo "这是第<b>$count</b>次循环的结果!<br>";
$count++;
}
do…while与while循环非常想死,区别在于表达式的值是再每次循环结束时而不是在开始时检查。
$count = 0;
do {
echo $count;
} while ($count > 0);
由于do…while循环在结束时才检查循环条件是否满足,所以上述代码还是会输出一个结果:0。
for循环语句是由分号分隔的三部分组成的:初始化条件
、条件表达式
、更新条件
。
for ($count = 1; $count <= 10; $count++) {
echo "这是第<b>${count}</b>次循环的结果!<br>";
}
$city = ["北京", "上海", "广州", "武汉", "郑州"];
foreach ($city as $key => $value) {
$key += 1;
echo "当前第${key}次循环输出的城市是:${value}<br>";
}
文件加载原理:
1.在引入文件的时候(include或require),系统会自动将引入的文件内的代码加载到当前文件中。
2.对应的文件中的代码嵌入的位置就是对应的include
或require
位置,类似于在html中引入图片(img)的路径。
3.当使用include
时,当前会自动插入一个结束标记,进入到html模式。
require()和include()的本质都是包含文件,唯一的区别在于如果包含的文件不存在时二者的报错形式不一样,可以通过以下案例说明。
include
引入hello1.inc.php
文件
if (true) {
include "hello1,inc.php";
}
从上述代码案例中可以看出,虽然我们引入的hello1,inc.ph
文件并不存在,也报了错,但是并不影响程序继续往下执行。
require
引入hello1.inc.php
文件
require "hello1,inc.php";
echo "使用require引入不存在的文件时程序会报错终止。";
从上述代码案例中可以看出,我们引入的hello1,inc.ph
文件不存在,并且报错了:No such file or directory in...
,程序也终止了没有输出下一行文字。
总结: