Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:看别人写代码很轻松, 甚至对一些地方还吐槽, 轮到自己写, 才发现写一行错一行, 这就是动手与动口的区别, 所以学编程一定要多动手,少动口, 用代码说话
<?php
// 运算符
// 取模/取余数
var_dump(15%6);
// ++,--,只能用在变量上
$n = 10;
// ++在变量后面, 先引用变量的值, 再将变量执行加1的运算
// var_dump($n++);
// var_dump($n);
// $n = $n + 1;
// var_dump($n--);
// var_dump(--$n);
// var_dump($n);
//. 字符串连接
// echo 'a' . 'b' . '<br>';
// echo 'abc' . 28 . '<br>';
// $n = $n + 10;
$n *= 10;
// $n =$n *10;
var_dump($n);
<?php
$a = "我在学习PHP!";
$b = &$a;
$a = "我学习PHP!"; // 改变变量a的值
$c = &$a;
echo $b."<br />";
echo $c."<br />";
//变量 $b 和 $c都是一样指向$a的内存
==
返回布尔值===
全等,值相等并且类型也相等,返回True!=
不等 如果两边不等,返回True<>
不等 如果两边不等,返回True!==
非全等 只要是值或者类型不等就返回True>
<
<=
>=
<?php
// 比较运算符返回布尔类型的值
var_dump(10 > 20);
// 是否相等==, 是否全等===
// ==: 只判断值是否相等, 不判断类型
// 当==二边的类型不同时,会发生类型的自动转换
// var_dump(10 == (int)'10');
// === 全等, 不仅值要相等, 类型也要相等
var_dump(10 === '10');
echo '<hr>';
// 太空船 <=>
var_dump(10 <=> 20);
// -1 < 0, 说明 10 小于 20
var_dump(10 <=> 5);
// 1 > 0, 说明 10 大于 5
var_dump(10 <=> 10);
// 0, 说明 相等
echo '<hr>';
// && 理解为乘法, true==>1, false==>0
var_dump((3<4) && 5>8);
// var_dump(true && false);
// && 理解为加法, true==>1, false==>0
var_dump((3<4) || 5>8);
// var_dump(true || false);
// $name = 'peter';
// $name = 'admin';
if (@$name && $name==='admin') {
echo '欢迎您';
} else {
echo '未登录';
}
echo '<hr>';
// ? : 简化双分支if
$price = 900;
if ($price > 1000) echo '太贵了'; else echo '真便宜';
// 条件 ? true : false
echo $price > 1000 ? '太贵了' : '真便宜';
echo '<hr>';
// ?? null合并运算符
序号 | 类型 | 语法 | 模板语法 |
---|---|---|---|
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; |
// 单分支语法
$age=17;
if ($age<18) {
echo '未满十八岁未成年你是一个小屁孩';
}
//模板写法
$age=17;
if ($age<18) :
echo '未满十八岁未成年你是一个小屁孩';
endif;
// 双分支语法
$age=24;
if ($age<18) {
echo '未满十八岁未成年你是一个小屁孩';
} else {
echo '您已满十八岁符合标准';
}
//模板写法
$age=24;
if ($age<18) :
echo '未满十八岁未成年你是一个小屁孩';
else :
echo '您已满十八岁符合标准';
endif;
//多分支语法
if ($age<18) {
echo '未满十八岁你是一个小屁孩';
} elseif ($age>60) {
echo '超过六十岁你是老头';
} elseif ($age>100) {
echo '可能已经挂了';
}else {
echo '花样年华';
}
//模板语法
if ($age<18) :
echo '未满十八岁你是一个小屁孩';
elseif ($age>60) :
echo '超过六十岁你是老头';
elseif ($age>100) :
echo '可能已经挂了';
else :
echo '花样年华';
endif;
/ 4. switch: 简化多分支
$amount = 2300;
// switch (true) {
// case $amount > 5000 && $amount < 10000:
// $payment = $amount * 0.9;
// // break: 跳出当前分支
// 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: 跳出当前分支
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 = 10000;
switch ($discount):
case 0.9:
$payment = $amount * 0.9;
break;
case 0.8:
$payment = $amount * 0.8;
break;
default:
die('不支持的折扣率');
endswitch;
echo '实际支付: ' . $payment . ', 折扣率: '. $discount;
序号 | 类型 | 语法 | 模板语法 |
---|---|---|---|
1 | 入口判断型 | while(){...} |
while(): ... endwhile; |
2 | 出口判断型 | do {...} while(); |
do : ... while(); |
3 | 计数型 | for(){...} |
for () : ... endfor; |
循环控制关键字:
序号 | 关键字 | 描述 |
---|---|---|
1 | continue |
终止本次循环,提前进入下一轮 |
2 | break |
跳出本层循环 |
<?php
# 循环
$curriculum = ['语文', '数学', '英语', '地理', '历史'];
// 1. 入口判断型
echo current($curriculum);
next($curriculum);
echo current($curriculum);
next($curriculum);
echo current($curriculum);
echo '<hr>';
reset($curriculum);
// $subject = current($curriculum): 循环条件
// while ($subject = current($curriculum)) {
// echo $subject . '<br>';
// // 更新循环条件, 没有这个语句, 会进入死循环
// next($curriculum);
// }
// reset($curriculum);
// 模板语法
while ($subject = current($curriculum)) :
echo $subject . '<br>';
// 更新循环条件, 没有这个语句, 会进入死循环
next($curriculum);
endwhile;
echo '<hr>';
// 2. 出口判断型
reset($curriculum);
do {
$subject = current($curriculum);
echo $subject . '<br>';
// 更新循环条件, 没有这个语句, 会进入死循环
next($curriculum);
} while ($subject = current($curriculum));
// 无论条件是否为真,至少会执行一次
// 没有对应的模板语法
// 3. 计数型
echo '数组中有 : ' . count($curriculum);
echo '<hr>';
// $i = 0;循环变量初始化
// $i < count($curriculum): 循环条件
// $i++: 更新循环条件
for ($i = 0; $i < count($curriculum); $i++) {
// echo $curriculum[$i] . '<br>';
}
// 模板语法
for ($i = 0; $i < count($curriculum); $i++) :
// echo $curriculum[$i] . '<br>';
endfor;
echo '<hr>';
reset($curriculum);
// continue: 终止当前循环,提前进入下一轮
$curriculum = ['语文', '数学', false, '英语', null, '地理', '历史'];
// while ($subject = current($curriculum)) :
// echo $subject . '<br>';
// next($curriculum);
// endwhile;
for ($i = 0; $i < count($curriculum); $i++) :
// 跳过空数据
if (!$curriculum[$i]) continue;
echo $curriculum[$i] . '<br>';
// break; 跳出本层
if ($curriculum[$i] === '地理') break;
endfor;
运算符和流程控制看似不起眼,但是在实际操作中,如果在逻辑层次不清晰的情况下,操作起来就知道锅儿是铁打的