一、运算符
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,否则返回false
var_dump((10 > 20) && (5 > 8));
echo '<hr>';
// ||: 二边表达式只要有一个为true,则返回true
var_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 '欢迎您';
else
echo '您未登录,请先登录';
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';
//删除$password
unset($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. 判断型循环
<?php
error_reporting(E_ALL);
//current() 函数返回数组中的当前元素的值。
//创建一个数组并赋值
$cities = ['合肥', '南京', '杭州', '苏州', '上海'];
// 2. 判断型循环: 出口判断型 do {...} while(条件)
do {
//即使报错也也要执行一遍
echo $city, '<br>';
//循环体内必须要有更新循环条件的语句,否则进入死循环,
next($cities);
} while ($city = current($cities));
// do - while 没有对应的模板语法
?>
效果图:
3. 计数型循环
<?php
error_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;
?>
效果图: