Correcting teacher:Guanhui
Correction status:qualified
Teacher's comments:写的不错!总结的很好,不过模板语法是在和html混写的时候尽量使用的。
PHP中的运算符大致分为几下几类:
算术运算符
赋值运算符
比较运算符
逻辑运算符
递增/递减运算符
数组运算符
三元运算符
组合比较符,又称太空船运算符
运算符 | 名称 | 描述 | 例子 | 结果 |
---|---|---|---|---|
a + b | 加法 | 求和 | 5 + 5 | 10 |
a - b | 减法 | 求差 | 10 - 5 | 5 |
a * b | 乘法 | 求积 | 5 * 5 | 25 |
a / b | 除法 | 求商 | 15 / 5 | 3 |
a % b | 求模 | 取余 | 15 % 6 | 3 |
- a | 取反 | 取a的反数 | <?php $a = 5;echo -$a; |
-5 |
a.b | 并置 | 连接2个字符串 | ‘hel’.’lo’ | hello |
运算符 | 等同于 | 描述 |
---|---|---|
a = b | a = b | 把b的值赋给a |
a += b | a = a + b | 加 |
a -= b | a = a - b | 减 |
a *= b | a = a * b | 乘 |
a /= b | a = a / b | 除 |
a %= b | a = a % b | 模(除法的余数) |
a .= b | a = a . b | 连接两个字符串 |
运算符 | 名称 | 描述 | 实例 |
---|---|---|---|
x == y | 等于 | 如果 x 等于 y,则返回 true | 5==8 返回 false |
x === y | 绝对等于 | 如果 x 等于 y,且它们类型相同,则返回 true | 5===”5” 返回 false |
x != y | 不等于 | 如果 x 不等于 y,则返回 true | 5!=8 返回 true |
x <> y | 不等于 | 如果 x 不等于 y,则返回 true | 5<>8 返回 true |
x !== y | 绝对不等于 | 如果 x 不等于 y,或它们类型不相同,则返回 true | 5!==”5” 返回 true |
x > y | 大于 | 如果 x 大于 y,则返回 true | 5>8 返回 false |
x < y | 小于 | 如果 x 小于 y,则返回 true | 5<8 返回 true |
x >= y | 大于等于 | 如果 x 大于或者等于 y,则返回 true | 5>=8 返回 false |
x <=y | 小于等于 | 如果 x 小于或者等于 y,则返回 true | 5<=8 返回 true |
运算符 | 名称 | 描述 | 实例 |
---|---|---|---|
x and y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6;y=3; (x < 10 and y > 1); 返回 true |
x or y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6;y=3;(x==6 or y==5) ;返回 true |
x xor y | 异或 | 如果 x 和 y 有且仅有一个为 true,则返回 true | x=6;y=3;(x==6 xor y==3); 返回 false |
x && y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 ; y=3 ; (x < 10 && y > 1) ; 返回 true |
x | | y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6;y=3;(x==5 | | y==5) 返回 false |
! x | 非 | 如果 x 不为 true,则返回 true | x=6;y=3;!(x==y) 返回 true |
运算符 | 名称 | 描述 |
---|---|---|
++ x | 预递增 | x 加 1,然后返回 x |
x ++ | 后递增 | 返回 x,然后 x 加 1 |
- - x | 预递减 | x 减 1,然后返回 x |
x - - | 后递减 | 返回 x,然后 x 减 1 |
运算符 | 名称 | 描述 |
---|---|---|
x + y | 集合 | x 和 y 的集合 |
x == y | 相等 | 如果 x 和 y 具有相同的键/值对,则返回 true |
x === y | 恒等 | 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true |
x != y | 不相等 | 如果 x 不等于 y,则返回 true |
x <> y | 不相等 | 如果 x 不等于 y,则返回 true |
x !== y | 不恒等 | 如果 x 不等于 y,则返回 true |
语法格式是:(expr1) ? (expr2) : (expr3)
,对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
示例如下:
PHP7+后出现了组合比较运算符,又称太空船运算符,<=>
,组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。它的返回值为1,0,-1。
示例如下:
<?php
// 数值为0,表示相等
// 数值为1,表示前者大于后者
// 数值为-1,表示前者小于后者
// 示例一:比较整形
echo 5<=>5,'<br>';
echo 8<=>5,'<br>';
echo 5<=>8,'<br>';
echo '<hr>';
// 示例二:比较字符串
$str1 = 'hello';
$str2 = 'hello1';
echo $str1 <=> $str2,'<br>';
echo $str2 <=> $str1,'<br>';
// 若把两个字符串的值改为一样
$str2 = 'hello';
echo $str1 <=> $str2;
// 从这个例子可以看书,太空船运算符不仅可以比较数值,
// 也可以比较字符串,取值为0时,表示字符串的内容是一样的
// 取值为1时,表示前者字符串长度大于后者
// 取值为-1时,表示前者字符串长度小于后者
示例如下:
<?php
// 示例:检测用户是否有密码,若无,给一个默认密码root
echo isset($password) ? $password : 'root';
echo '<hr>';
// 现在给一个密码
$password = '666666';
echo isset($password) ? $password : 'root';
echo '<hr>';
// 用NULL合并运算符(??)的方式写
echo $password ?? 'root';
流程控制语句 | 描述 | 结构划分 |
---|---|---|
if |
条件成立时执行代码 | 单分支 |
if...else |
条件成立时执行一块代码,不成立时执行另一块代码 | 双分支 |
if...elseif...else |
在若干条件之一成立时执行一个代码块 | 多分支 |
switch |
在若干条件之一成立时执行一个代码块 | 多分支 |
while |
只要指定的条件成立,则循环执行代码块 | 循环 |
do...while |
首先执行一次代码块,然后在指定的条件成立时重复这个循环 | 循环 |
for |
循环执行代码块指定的次数 | 循环 |
foreach |
根据数组中每个元素来循环代码块 | 循环 |
示例如下:
<?php
error_reporting(E_ALL);
// 1. 单分支
// 示例:考试平均成绩大于90分,就是优秀成绩
$avg = 95;
if($avg > 90){
echo '成绩优秀','<hr>';
}
// 单分支简化:当这个流程控制语句中只有一段代码时,可省略大括号
if($avg > 90) echo '成绩优秀','<hr>';
// 2. 双分支
// 示例:平均成绩大于85分的没有暑假作业,否则做100张复习试卷
$avg = 80;
if($avg > 85){
echo '没有作业,好好玩把';
}else{
echo '做100张试卷';
}
echo '<hr>';
// 双分支简化:
// 简化方式一:使用三元运算符
echo $avg > 85 ? '没有作业,好好玩吧' : '做100张试卷';
echo '<hr>';
// 简化方式二:使用模板语法
if($avg > 85) :
echo '没有作业,好好玩把';
else :
echo '做100张试卷';
endif ;
示例如下:
<?php
error_reporting(E_ALL);
/* 示例:
平均成绩在90-100,为优秀
平均成绩在80-90,为良好
平均成绩在70-80,为中等
平均成绩在60-70,为及格
平均成绩在60以下,站黑板把
*/
// 方式一:使用if...elseif...elseif...else
$avg = 68;
// 代码中的 and 和 && 是一个意思,另外,or 和 || 也是一个意思
if($avg >= 90 and $avg <= 100){
echo '成绩优秀';
}elseif($avg >= 80 and $avg < 90){
echo '成绩良好';
}elseif($avg >= 70 and $avg < 80){
echo '成绩中等';
}elseif($avg >=60 and $avg < 70){
echo '及格';
}else{
echo '站黑板把';
}
echo '<hr>';
// 改为模板语法
if($avg >= 90 and $avg <= 100):
echo '成绩优秀';
elseif($avg >= 80 and $avg < 90):
echo '成绩良好';
elseif($avg >= 70 and $avg < 80):
echo '成绩中等';
elseif($avg >=60 and $avg < 70):
echo '及格';
else:
echo '站黑板把';
endif;
echo '<hr>';
// 方式二:使用switch简化分支
switch(true){
case $avg >= 90 and $avg <= 100 : echo '成绩优秀';
break;
case $avg >= 80 and $avg < 90 : echo '成绩良好';
break;
case $avg >= 70 and $avg < 80 : echo '成绩中等';
break;
case $avg >=60 and $avg < 70 : echo '及格';
break;
default : echo '站黑板把';
}
echo '<hr>';
// 改为模板语法
switch(true):
case $avg >= 90 and $avg <= 100 : echo '成绩优秀';
break;
case $avg >= 80 and $avg < 90 : echo '成绩良好';
break;
case $avg >= 70 and $avg < 80 : echo '成绩中等';
break;
case $avg >=60 and $avg < 70 : echo '及格';
break;
default : echo '站黑板把';
endswitch;
对于多分支结构switch,通常又是用在单值判断场景中,示例如下:
<?php
$person = 8;
switch($person){
case 0 : echo '还没人来';
break;
case 1 : echo '一个人玩求';
break;
case 2 : echo '两个人玩象棋把';
break;
case 3 : echo '三个人斗地主把';
break;
case 4 : echo '四个人玩麻将把';
break;
default : echo '人太多,去K歌把';
}
循环结构一般都是用于进行遍历操作的,下面以遍历一个数组为例:
<?php
// 使用不同的循环结构遍历数组
// 示例:自己有一个购物清单,分别有:牙刷、杯子、台灯、电脑、风扇
$list = ['牙刷','杯子','台灯','电脑','风扇'];
// 方式一:使用while循环,while循环属于入口判断型,先判断再执行
$i = 0;
while( $i < count($list) ):
echo $list[$i],'<br>';
$i++;
endwhile;
echo '<hr>';
// 方式二:使用do...while循环,它是属于出口判断型,无论如何代码都要先执行一次
// 注意:此种方式,不能使用模板语法,实际开发,用得也比较少
$j = 0;
do{
echo $list[$j],'<br>';
$j++;
}while($j < count($list));
echo '<hr>';
// 方式三:使用for循环,语法:for(变量的初始值;循环的条件;更新)
for( $i=0; $i<count($list); $i++):
echo $list[$i],'<br>';
endfor;
echo '<hr>';
// 在for循环中插入break或continue,可以指定终止或者跳过循环
// 1.台灯以后的清单不要了
for( $i=0; $i<count($list); $i++):
if($i > 2) break;
echo $list[$i],'<br>';
endfor;
echo '<hr>';
// 2.电脑不要
for( $i=0; $i<count($list); $i++):
if($i === 3) continue;
echo $list[$i],'<br>';
endfor;
echo '<hr>';
// 方式四:使用foreach
foreach($list as $value):
echo $value,'<br>';
endforeach;
运算符大都和小学的运算差不多,着重掌握好逻辑和三元运算,理解到太空运算符的值的意义,三元运算必须掌握好,因为它能大大的简化双分支结构。
至于多分支结构,根据不同的场景自己选择,但是遇到单值判断,还是尽量使用switch。
在进行循环遍历时,也了解到了几种方法,也是需要根据不同的场景择佳使用,在使用while
和do...while
时,切记一定要更新循环条件,不然会进入死循环,另外在循环中,结合break
和continue
语句,可以根据不同的条件使循环得到更好的控制
在写代码过程中,能够使用模板语法的,尽量使用,后期在混编中会有大量的展现