操作运算符和流程控制
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+
版本
++,—,只能用在变量上
- 取模
<?php
//运算符
var_dump(20 % 6);
// 结果为2
//实际上就是取余数
echo '<hr>';
<?php
$n = 10;
var_dump($n++);
//++在变量后面,先引用变量的值,再将变量执行+1 的运算
echo '<br>';
//拆解代码
// var_dump($n++);
// var_dump($n);
// $n = $n + 1;
var_dump($n);
echo '<br>';
同理如果`++/--
在前面,则先减 1
2. 字符串运算符
运算符 |
示例 |
描述 |
. |
$str1 . $str2 |
连接运算,返回连接之后的字符串 |
javascript 字符串连接使用+
echo 'a' . 'b' . '<br>';
echo 'abcde' . 28 . '<br>';
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'; |
//字符串拼接
$user = [110, '朱老师真棒', 'php'];
$table = $table . '<table border=1px>';
$table = $table . '<tr>';
$table = $table . '<td>' . $user[0] . '</td>';
$table = $table . '<td>' . $user[1] . '</td>';
$table = $table . '<td>' . $user[2] . '</td>';
$table = $table . '</tr>';
$table = $table . '</table>';
// 简写
// $user = [110, '朱老师真棒', 'php'];
// $table .= '<table border=1px>';
// $table .= '<tr>';
// $table .= '<td>' . $user[0] . '</td>';
// $table .= '<td>' . $user[1] . '</td>';
// $table .= '<td>' . $user[2] . '</td>';
// $table .= '</tr>';
// $table .= '</table>';
echo $table;
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
, 有三种返回结果
==,===
判断是否相等,判断是否全等==
两个等号值判断值是否相等,不判断类型===
既判断值,又判断类型
//==,===
//判断是否相等,判断是否全等
echo '<br>';
var_dump(10 == 20);
echo '<br>';
var_dump(10 == 10);
echo '<br>';
var_dump(10 == '10');
//两个等号值判断值是否相等,不判断类型
var_dump(10 === '10');
var_dump(10 <=> 20);
//大小比较的判断,返回有三种结果
//如果第一个数大于第二个数,返回一个>0的数
//如果第一个数小于第二个数,返回一个<0的数
//如果第一个数等于第二个数,返回一个=0的数
序号 |
运算 |
结果 |
1 |
$a > $b |
返回>0 的整数 |
2 |
$a < $b |
返回<0 的整数 |
3 |
$a = $b |
返回=0 的整数 |
5. 逻辑运算符
序号 |
运算符 |
示例 |
描述 |
1 |
&& |
$a && $b |
逻辑与 |
2 |
` |
|
` |
`$a |
|
$b` |
逻辑或 |
3 |
! |
!$a |
逻辑非 |
4 |
xor |
$a xor $b |
逻辑异或 |
//逻辑运算
//逻辑运算符的优先级没有比较级大
//&& 同时满足条件
var_dump(3 < 4 && 5 > 8);
//|| 仅满足一个即可
echo '<br>';
var_dump(3 < 4 || 5 > 8);
echo '<br>';
//!非运算,取反
var_dump(!(3 < 4));
6. 三元运算符
序号 |
运算符 |
示例 |
描述 |
场景 |
1 |
?: |
$a ?: $b |
仅判断表达式true/false |
简化双分支 |
2 |
?? |
$a ?? $b |
判断变量存在且不为 null |
设置默认值 |
7. 错误屏蔽符
运算符 |
示例 |
描述 |
场景 |
@ |
@(10/0) |
屏蔽所有运行错误 |
线上生产环境 |
语法错误不能被屏蔽
8. 流程控制
8.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; |
<?php
#流程控制
# 分支结构
//1. 单分支(推荐不要简写)
// 购买金额
$amount = 5500;
// 实际支付
$payment = $amount;
// if ($amount > 5000) {
// $payment = $amount * 0.9;
// }
// 模板语法示例:{使用:/}使用endif
if ($amount > 5000) :
$payment = $amount * 0.9;
endif;
//大括号代码只有一行,可以省略大括号
//替代语法:模板语法,用在与html代码混编的时候
//模板语法的目标就是:干掉大括号
echo '实际支付:' . $payment . '<br>';
echo '<hr>';
//2.双分支
$amount = 3500;
// if ($amount > 5000) {
// $payment = $amount * 0.9;
// } else {
// $payment = $amount;
// }
// 双分支模板语法
if ($amount > 5000) :
$payment = $amount * 0.9;
else :
$payment = $amount;
endif;
echo '实际支付:' . $payment . '<br>';
echo '<hr>';
// 3.多分支
// 多个如何判断
$amount = 13500;
// if ($amount > 5000 && $amount < 10000) {
// $payment = $amount * 0.9;
// } elseif ($amount >= 10000 && $amount < 20000) {
// $payment = $amount * 0.7;
// } elseif ($amount >= 20000) {
// $payment = $amount * 0.5;
// } else {
// $payment = $amount;
// }
//模板语法
if ($amount > 5000 && $amount < 10000) :
$payment = $amount * 0.9;
elseif ($amount >= 10000 && $amount < 20000) :
$payment = $amount * 0.7;
elseif ($amount >= 20000) :
$payment = $amount * 0.5;
else :
$payment = $amount;
endif;
echo '实际支付:' . $payment . '<br>';
echo '<hr>';
//4.switch简化多分支
$amount = 8500;
// switch (true) {
// case $amount > 5000 && $amount < 10000;
// $payment = $amount * 0.9;
// break;
// case $amount >= 10000 && $amount < 20000;
// $payment = $amount * 0.7;
// break;
// case $amount >= 20000;
// $payment = $amount * 0.5;
// break;
// default:
// $payment = $amount;
// }
// 模板语法
switch (true):
case $amount > 5000 && $amount < 10000;
$payment = $amount * 0.9;
break;
case $amount >= 10000 && $amount < 20000;
$payment = $amount * 0.7;
break;
case $amount >= 20000;
$payment = $amount * 0.5;
break;
default:
$payment = $amount;
endswitch;
echo '实际支付:' . $payment . '<br>';
echo '<hr>';
//switch 更常用的场景是单值判断
$discount = 0.6;
$amount = 8500;
switch ($discount):
case 0.9;
$payment = $amount * 0.9;
break;
case 0.8;
$payment = $amount * 0.8;
break;
default:
die('不支持的折扣率');
endswitch;
echo '实际支付:' . $payment . ',折扣率:' . $discount . '<br>';
8.2 循环结构
序号 |
类型 |
语法 |
模板语法 |
1 |
入口判断型 |
while(){...} |
while(): ... endwhile; |
2 |
出口判断型 |
do {...} while(); |
do : ... while(); |
3 |
计数型 |
for(){...} |
for () : ... endfor; |
循环控制关键字:
序号 |
关键字 |
描述 |
1 |
continue |
终止本次循环,提前进入下一轮 |
2 |
break |
跳出本层循环 |
<?php
# 循环
$cities = ['武汉', '合肥', '南京', '杭州', '上海'];
//入口判断型
// current()获取数组当前的值
echo current($cities);
next($cities);
echo current($cities);
next($cities);
echo current($cities);
echo '<hr>';
reset(($cities));
// //循环条件
// while ($city = current($cities)) {
// echo $city . '<br>';
// //更新循环条件,没有这个语句,会进入死循环
// next($cities);
// }
//模板语法
while ($city = current($cities)) :
echo $city . '<br>';
//更新循环条件,没有这个语句,会进入死循环
next($cities);
endwhile;
echo '<hr>';
//2.出口判断型
reset(($cities));
do {
$city = current($cities);
echo $city . '<br>';
//更新循环条件,没有这个语句,会进入死循环
next($cities);
} while (false);
// 无论条件是否为真,至少会执行一次
// 没有对应模板语法
// 3.计数型
echo '<hr>';
echo '数组中:' . count($cities);
echo '<hr>';
// for ($i = 0; $i < count($cities); $i++) {
// echo $cities[$i] . '<br>';
// }
//模板语法
for ($i = 0; $i < count($cities); $i++) :
echo $cities[$i] . '<br>';
endfor;
echo '<hr>';
reset(($cities));
$cities = ['武汉', '合肥', '南京', null, '杭州', '上海'];
//continue:终止当前循环,提前进入下一轮
// while ($city = current($cities)) :
// echo $city . '<br>';
// //更新循环条件,没有这个语句,会进入死循环
// next($cities);
// endwhile;
// while循环应用于数组会有bug
// foreach,一般用这个
for ($i = 0; $i < count($cities); $i++) :
// 跳过空数据或者假数据
if (!$cities[$i]) continue;
// 取反
echo $cities[$i] . '<br>';
// break;跳出本层循环
if ($cities[$i] === '杭州') break;
endfor;
9.总结
本节课的学习让我对 php 瞬间毛瑟顿开,发现 php 的奇妙之处就在于他的变量以及函数的使用可以动态的输出静态数据,实现了一个 web 交互式功能,在学习完运算符我发现,php 代码通过字符串运算符.
以及赋值运算符.=
一样可以输出 html 代码,结合各种变量的灵活使用,简直是完美的语言。