批改状态:合格
老师批语:作业写的还行,一定要按自己的想法多写几遍!
1、比较运算(比较运算返回布尔值)
| 运算符 | 描述 |
|---|---|
> |
条件成立返回 true,不成立则返回 false; |
== |
值比较,当操作符二边的操作数类型不一致,会触发类型自动转换机制 |
=== |
除了值相等, 类型也必须一致 |
实例:
<?php// 比较运算返回布尔值var_dump(10 > 20);//括号内条件成立返回true,不成立则返回false;echo '<hr>';// "==", "==="// "==": 值比较,当操作符二边的操作数类型不一致,会触发类型自动转换机制var_dump(100 == '100');echo '<hr>';// "===":除了值相等, 类型也必须一致var_dump(100 === '100');?>
效果图:
2、太空船运算符(第一个数大于第二个数返回 1,小于返回-1,等于返回 0)
实例:
<?php// 太空船运算符,第一个数大于第二个数返回1,小于返回-1,等于返回0;var_dump(10 <=> 20);echo '<hr>';var_dump(10 <=> 5);echo '<hr>';var_dump(10 <=> 10);echo '<hr>';?>
效果图:
3、逻辑运算符
| 运算符 | 描述 |
|---|---|
&& |
二边表达式除非全部为 true,否则返回 false |
// |
二边表达式只要有一个为 true,则返回 true |
实例:
<?php// 逻辑运算符// &&:二边表达式除非全部为true,否则返回falsevar_dump((10 > 20) && (5 > 8));echo '<hr>';// ||: 二边表达式只要有一个为true,则返回truevar_dump((10 < 20) || (5 > 8));echo '<hr>';var_dump(true || false);?>
效果图:
4、短路求值
<?php// 短路求值// 如果第一个表达式(isset($username)) 为false, 则直接执行else分支,不会再去计算" $username === 'admin'"$username = 'peter';if ($username && $username === 'admin')echo '欢迎您';elseecho '您未登录,请先登录';echo '<hr>';?>
效果图:
5、三元运算符(三元: 是指有三个表达式, 意味要有二个操作符)
<?php// 三元运算符$price = 2000;if ($price > 1500) echo '太贵了';else echo '太便宜了';echo '<hr>';// 用三元运算符来简单双分支// 三元: 是指有三个表达式, 意味要有二个操作符$price = 1000;//如果 $price > 1500 成立 结果为:太贵了//如果 $price > 1500 不成立 结果为:太便宜了echo $price > 1500 ? '太贵了' : '太便宜了';echo '<hr>';// root, 密码:默认就是 root//sha1()加密,sha1('123456')将123456加密,现不要深究$password = sha1('123456');echo isset($password) ? $password : 'root';// isset() + 三元运算 = 变量默认值echo '<hr>';// $password = '123456';//删除$passwordunset($password);echo $password ?? 'root';// ?? : null合并运算符?>
效果图:
二、分支结构和模板语法
大家根据自己的习惯使不使用模板语法都可以。
1. 单分支实例:
<?php// 1. 单分支$amount = 6000;// 实际支付的金额,默认值是不打折的金额$payment = $amount;if ($amount >= 5000) {//当流程控制语句中只有一行代码的时候,可以省略大括号$payment = $amount * 0.8;}echo '实际支付: ' , $payment , '<br>';echo '<hr>';//当流程控制语句中只有一行代码的时候,可以省略大括号if ($amount >= 5000) $payment = $amount * 0.7;echo '实际支付: ' , $payment , '<br>';echo '<hr>';// 模板语法: 就是干掉流程控制中的大括号// 将起始大括号用冒号代替,将结束大括号用特殊关键字代替if ($amount >= 5000) :$payment = $amount * 0.9;endif;//当流程控制语句中只有一行代码的时候,可以省略大括号if ($amount >= 5000) : $payment = $amount * 0.9; endif;echo '实际支付: ' , $payment , '<br>';echo '<hr>';?>
效果图:
2. 双分支
实例:
<?php//2. 双分支$amount = 4500;if ($amount >= 5000) {// 当流程控制语句中只有一行代码的时候,可以省略大括号$payment = $amount * 0.9;} else {$payment = $amount;}echo '实际支付: ' , $payment , '<br>';echo '<hr>';// 模板语法$amount = 7500;if ($amount >= 5000) :$payment = $amount * 0.9;else :$payment = $amount;endif;echo '实际支付: ' , $payment , '<br>';echo '<hr>';?>
效果图:
3. 多分支
实例:
<?php// 3. 多分支$amount = 22500;/* 判断变量$amount是否大于5000且小于10000,是的话则执行内部语句,不是则跳到下一步elseif再判断,以此类推*/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;}echo '实际支付: ' , $payment , '<br>';echo '<hr>';// 模板语法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: 用来简化多分支
基本流程:
switch (表达式) {case 条件1:分支语句...break;//跳出整个循环case 条件3:...分支语句...break;//default:....}
实例:
<?php// 4. switch: 用来简化多分支// switch:通常用在单值判断中$discount = 0.8;$amount = 1400;switch ($discount) {case 0.7:$payment = $amount * 0.7;break;case 0.8:$payment = $amount * 0.8;break;case 0.9:$payment = $amount * 0.9;break;default://die() 函数输出一条消息,并退出当前脚本。die('不支持的折扣率');}echo '1.实际支付: ' , $payment , '<br>';echo '<hr>';// 模板语法$discount = 0.9;$amount = 1500;switch ($discount) :case 0.7:$payment = $amount * 0.7;break;case 0.8:$payment = $amount * 0.8;break;case 0.9:$payment = $amount * 0.9;break;default:die('不支持的折扣率');endswitch;echo '2.实际支付: ' , $payment , '<br>';echo '<hr>';?>
效果图:
三、循环控制和模板语法
1. 判断型循环
实例:
<?php//创建一个数组并赋值$cities = ['合肥', '南京', '杭州', '苏州', '上海'];// 1. 判断型循环: 入口判断型 while(条件) {...}// 进入循环代码之前进行判断,只有条件为真才执行循环体while ($city = current($cities)) {echo $city, '<br>';// next() 函数将内部指针指向数组中的下一个元素,并输出。next($cities);}echo '<br>';//数组指针复位,重新指向第一个reset($cities);// 模板语法while ($city = current($cities)) :echo $city, '<br>';next($cities);endwhile;?>
效果图:
2. 判断型循环
<?phperror_reporting(E_ALL);//current() 函数返回数组中的当前元素的值。//创建一个数组并赋值$cities = ['合肥', '南京', '杭州', '苏州', '上海'];// 2. 判断型循环: 出口判断型 do {...} while(条件)do {//即使报错也也要执行一遍echo $city, '<br>';//循环体内必须要有更新循环条件的语句,否则进入死循环,next($cities);} while ($city = current($cities));// do - while 没有对应的模板语法?>
效果图:
3. 计数型循环
<?phperror_reporting(E_ALL);//创建一个数组并赋值$cities = ['合肥', '南京', '杭州', '苏州', '上海'];// 3. 计数型循环: for (循环变量的初始化; 循环条件; 更新循环条件){....}// 遍历数组//count() 函数返回数组中元素的数目。echo count($cities);echo '<br>';//$i:数组元素的索引,默认从0开始for ($i = 0; $i < count($cities); $i++) {echo $cities[$i], '<br>';}echo '<br>模板语法: <br><br>';// 模板语法//break 语句的作用都是终止循环//continue 语句的作用是跳出本次循环,接着执行下一次循环for ($i = 0; $i < count($cities); $i++) :// 输出拦截, break: 提前终止循环// if ($i > 2) break;// 有选择性的输出, 跳过一部分元素if ($i === 3 || $i === 2) continue;echo $cities[$i], '<br>';endfor;?>
效果图:
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号