php中的运算符
- 比较运算符
==:两边操作数值相等即可
===两边操作数不仅值相等,类型也要相同
!==两边操作数值不相等
<=> 太空船运算符[当左边的小于右边输出-1 当左边的大于右边的输出1 当两边相等输出0]
例:
// == 两边操作数值相等
var_dump(100 == '100'); // 输出true
// === 两边操作数值和类型都相等
var_dump(200 === '200'); // 返回false 两边操作数类型不同
// !== 两边操作数比较值,值不相等返回true
var_dump(200 !== 100);
// 太空船运算符
var_dump(10 <=> 20); // 输出 -1
var_dump(10 <=> 10); // 输出 0
var_dump(20 <=> 10); // 输出 1
- 逻辑运算符
&&:逻辑与运算符,两边的表达式全为true,否则返回false
||:逻辑或运算符,两边的表达式只要有一个为true则返回true
例:
var_dump((10 > 8) && (10 > 5)); // 输出true 两边表达式全为true
echo '<br>';
var_dump((10 > 8) && (5 > 15)); // 输出false 右边表达式为false 所以输出false
echo '<br>';
var_dump((10 > 8) || (5 > 15)); // 输出true 左边表达式为true故输出true
短路求值
第一个表达式不成立时直接走else区间不会再去计算第二个表达式
// 以下面例子为例 当$username表达式不成立时直接走else输出no不会再计算$username === 'admin';
例:
$username = '张三';
if ($username && $username === 'admin') {
echo 'ok';
}else
echo 'no';
}
- 三元运算符
表达式 ? 表达式为走的真区间 : 表达式为假走的区间;
??:三元运算中的合并运算(用于执行isset()检测的三元运算的快捷方式)
例:
// 常规写法
$price = 4000;
if($price>3000) {
echo '有点贵';
} else {
echo '买它';
}
// 三元运算符写法
echo $price > 3000 ? '有点贵' : '买它';
// 三元运算默认值
$password = '123456';
// 当$password存在时输出$password的值否则输出给定的默认值
echo isset($password) ? $password :'root';
// 使用??简化:isset() + 三元运算 = 变量默认值 方式
echo $password ?? 'root';
php中的分值结构
- 单分支结构
if(条件) { 执行代码 }
例:
$price = 500;
// 1.单分支结构
if ($price >= 500) {
// 价格大于等于500打九折
echo $price * 0.9;
}
简写:当流程控制中只有一行代码的时候,可以省略大括号
例:
$price = 500;
if ($price >= 500) echo $price * 0.8;
- 单分支模板语法
if(条件) : 执行代码 endif[就是把初始大括号用冒号代替,结束大括号用指定关键字代替]
// 模板语法
例:
$price = 500;
if ($price >= 500) :
// 价格大于等于500打九折
echo $price * 0.9;
endif;
// 一行简写
if ($price >= 500) : echo $price * 0.5;endif;
- 双分支结构
if(条件) { true执行代码 } else { false执行代码 }
例:
$price = 300;
if ($price >= 300) {
// 当价格大于等于300是走这个区间打九折
$payment = $price * 0.9;
} else {
// 当价格不满足表达式价格小于300时走这个区间,原价格
$payment = $price;
}
// 打印最后结账价格
var_dump($payment);
- 双分支模板语法
if(条件) : true执行代码 else : false执行代码 endif
注意:else前面的花括号直接去掉没有东西代替
例:
$price = 300
if ($price >= 300) :
$payment = $price * 0.9;
else :
$payment = $price;
endif;
var_dump($payment);
- 多分支结构
多分支:if(条件)else { 执行代码 } elsef(条件){执行代码} else { 默认值 }
注意:这里的elseif根据需求来写上面两个只是例子
例:
$price = 5000;
if ($price > 1000 && $price < 2000) {
$payment = $price * 0.9;
} elseif($price > 2000 && $price < 3000) {
$payment = $price * 0.7;
} elseif ($price > 3000 && $price < 4000) {
$payment = $price * 0.6;
} elseif($price>4000 && $price <= 5000) {
$payment = $price * 0.5;
}else {
// 默认值(当所有条件都不符合时)
$payment = $price;
}
echo '实付价钱'.$payment;
- 多分支模板语法
if(条件):执行代码; elseif(条件):执行代码;else:默认值;endif
例:
$price = 3000;
// 模板语法
if ($price > 1000 && $price < 2000) :
$payment = $price * 0.9;
elseif($price > 2000 && $price < 3000) :
$payment = $price * 0.7;
elseif ($price > 3000 && $price < 4000) :
$payment = $price * 0.6;
elseif($price>4000 && $price <= 5000) :
$payment = $price * 0.5;
else :
// 默认值(当所有条件都不符合时)
$payment = $price;
endif;
echo '实付价钱'.$payment;
- switch多分支[简化多分支]
switch (条件) {
case 表达式:
执行代码
break;
default:
执行代码
break;
}
例:
$discount = 0.7;// 折扣
$price = 6000; // 价钱
switch ($discount) {
case 0.7:
$payment = $price * $discount;
break;
case 0.8:
$payment = $price * $discount;
break;
case 0.9:
$payment = $price * $discount;
break;
default:
$payment = $price;
break;
}
echo '实际结账啊'.$payment;
- switch模板语法
// 模板语法
switch (条件) :
case 表达式:
执行代码
break;
default:
执行代码
break;
endswitch;
例:
$discount = 0.7;// 折扣
$price = 5000; // 价钱
switch ($discount) :
case 0.7:
$payment = $price * $discount;
break;
case 0.8:
$payment = $price * $discount;
break;
case 0.9:
$payment = $price * $discount;
break;
default:
$payment = $price;
break;
endswitch;
echo '实际结账啊'.$payment;
php循环
- while循环
// while循环(入口循环:入口判断) while (条件) { 需要执行的代码 }
current($cities); // 输出数组中的当前元素
next($cities); // 指针下移
reset($cities);数组指针复位重新指向第一个
例:
$cities = ['海淀', '丰台', '朝阳', '大兴', '昌平'];
echo current($cities); // 输出数组中的当前元素 "海淀"
next($cities); // 指针下移
echo current($cities); // 输出丰台 上面指针下移所以输出丰台
while ($city = current($cities)) {
echo $city, '<br>';
// 前移指针
next($cities);
}
// 输出结果依次输出,海淀,丰台,朝阳,大兴,昌平
- while模板语法
while(条件): 执行代码 endwhile
例:
$cities = ['海淀', '丰台', '朝阳', '大兴', '昌平'];
while ($city = current($cities)) :
echo $city, '<br>';
// 前移指针
next($cities);
endwhile;
- do {执行代码} while (条件); 没有模板语法
do {执行代码} while (条件);判断型循环:出口判断 无论条件成不成立先执行一次
例:
$cities = ['海淀', '丰台', '朝阳', '大兴', '昌平'];
do {
echo $city;
next($cities);
} while ($city = current($cities));
// 输出结果丰台,朝阳,大兴,昌平因为在判断条件前限制性了一次数组指针下移
- for循环
for (循环变量的初始化; 循环条件; 更新循环条件){ 执行代码 }
count(变量名); 数数,数数组中的元素个数
例:
这里$i的起始值是数组中元素的下标值 [下标值是从0开始的]
for ($i=0; $i < count($cities) ; $i++) {
var_dump($cities[$i]); echo '<br>';
}
- for循环模板语法
for (循环变量的初始化; 循环条件; 更新循环条件): 执行代码 endfor
例:
for ($i=0; $i < count($cities) ; $i++) :
var_dump($cities[$i]); echo '<br>';
endfor;
模板语法在模板中的应用
// 数据表查询结果通常是一个二维数组,用二维数组来模拟
$users = [
['id'=>1, 'name'=>'zhu', 'grade'=> 60],
['id'=>2, 'name'=>'admin', 'grade'=> 50],
['id'=>3, 'name'=>'peter', 'grade'=> 20],
];
?>
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo '这是title' ?></title>
</head>
<body>
<table border='1'>
<?php for($i=0;$i<count($users);$i++) : ?>
<tr>
<td><?php echo $users[$i]['id']?></td>
<td><?php echo $users[$i]['name']?></td>
<td><?php echo $users[$i]['grade']?></td>
</tr>
<?php endfor; ?>
</table>
</body>
</html>