前面介绍的程序都只有单一路径,今天要来讲更复杂的多路径的情况
比较运算子 | 说明 | 用法 |
---|---|---|
== |
a 和 b 相同,返回 true | $a == $b |
=== |
同 == |
$a === $b |
!= |
a 和 b 不相同,返回 true | $a != $b |
!== |
同 !== |
$a != $b |
逻辑运算子 | 说明 | 用法 |
---|---|---|
and |
a 和 b 都是 true,返回 true | $a and $b |
&& |
同 and |
$a && $b |
or |
a 或 b 其中一个是 true,返回 true | $a or $b |
|| |
同 or |
$a || $b |
xor |
同 != ,且可以连续使用 |
$a xor $b |
! |
反转,true -> false,false -> true | !$a |
优先顺序 | 结合性 |
---|---|
** |
右 |
+a -a ++a --a |
- |
!a |
- |
* / % |
左 |
+ - |
左 |
== != === !== <> <=> |
- |
&& |
左 |
|| |
左 |
= += -= *= ... |
右 |
and |
左 |
xor |
左 |
or |
左 |
越上面越优先,如果在同一排就看结合性
$a = 10;
$b = 15;
$c = 20;
var_dump($b === $a + 6 - 2 + 1); // true
var_dump($b === $a + 5 and $c - $b * 2 === -$a); // true
var_dump(100 === -$a ** 2); // false
+
-
比 ===
优先,至於是 $a + 6
还是 6 - 2
先,就要看结合性,+
-
是左结合表示左边 $a + 6
先做,另外两个就换你想想看啦
所有运算子的优先顺序:https://www.php.net/manual/en/language.operators.precedence.php
短路
and 在左方为 false 时,不再继续往右运算
function a(){
echo 'a';
return false;
}
a() and a() and a(); // a
or 在左方为 true 时,不再继续往右运算
function b(){
echo 'b';
return true;
}
b() or b() or b(); // b
xor 则没有短路
function c() {
echo 'c';
return false;
}
c() xor c() xor b() xor a(); // ccba
二元运算子 | 说明 | 用法 |
---|---|---|
?: |
(bool)$a 为 true 时返回 $a ,否则返回 $b |
$a ?: $b |
?? |
$a 不存在或为 null 时返回 $b ,否则返回 $a |
$a ?? $b |
??= |
等同 $a = $a ?? $b |
$a ??= $b |
三元运算子 | 说明 | 用法 |
---|---|---|
?: |
(bool)$a 为 true 时返回 $b ,否则返回 $c |
$a ? $b : $c |
$a
为 0
"0"
""
[]
null
false
时,(bool)$a
为 false
单向选择结构 if...
如果小括号中的运算结果为 true,就会执行大括号里面的程序
$walk_to_school = true;
$will_raining_today = true;
if ($walk_to_school and $will_raining_today) {
echo '带伞出门';
}
双向选择结构 if...else...
如果小括号中的运算结果为 true,就会执行 if 里面的程序,不然就执行 else 里的程序
$math_score = 40;
if ($math_score < 60) {
echo '数学不及格';
} else {
echo '数学及格';
}
多向选择结构 if...elseif...else...
从上到下一一检查,如果有一个是 true,就会执行其中的程序
以下的程序不管 $num
为多少,都不会印出 Fizz Buzz
,你知道为什麽吗?
$num = 3;
if ($num % 3 === 0) { // 3 的倍数
echo 'Fizz';
} elseif ($num % 5 === 0) { // 5 的倍数
echo 'Buzz';
} elseif ($num % 15 === 0) { // 15 的倍数
echo 'Fizz Buzz';
} else {
echo $num;
}
巢状选择结构 if () {if...else...}
多层的 if else,写在一起
$math_score = 40;
if ($math_score < 0 or $math_score > 100) {
echo '输入错误';
} else {
if ($math_score > 90) {
echo 'A';
} elseif ($math_score > 80) {
echo 'B';
} elseif ($math_score > 70) {
echo 'C';
} elseif ($math_score > 60) {
echo 'D';
} else {
echo 'F';
}
}
我比较偏好写成非巢状,像这样:
$math_score = 40;
if ($math_score < 0 or $math_score > 100) {
echo '输入错误';
return;
}
if ($math_score > 90) {
echo 'A';
return;
}
if ($math_score > 80) {
echo 'B';
return;
}
if ($math_score > 70) {
echo 'C';
return;
}
if ($math_score > 60) {
echo 'D';
return;
}
echo 'F';
return;
多向选择结构 switch...case...default...
switch 不像 if else 那样一个个的比对,而是直接找到对应的位置执行,之後继续往下执行直到遇到 break 或区块结束
$something = 'apple'; // 外面红色的里面黄色的水果
switch ($something) {
case 'apple':
echo '外面红色的';
case 'banana':
echo '里面黄色的';
echo '水果';
break;
case 'bag':
case 'book':
echo '物品';
break;
case 'cat':
echo '动物';
break;
default:
echo '其他';
}
>>: D21 Django-bootstrap 网站美化工程 (1)
写程序,弄个 IDE 真的会方便不少,如果您是要在 ubuntu 20.04 上面使用 Code::...
此系列文章会同步发文到个人部落格,有兴趣的读者可以前往观看喔。 今天要跟大家分享当网页上有子表时,...
09-02-2021 如何开始使用React 本章内容 将React加到网页中 只需部分使用时 建立...
标注资料与特徵工程是处理资料重要的步骤,目的都是为了让模型效果最佳化,标注的一致性、特徵工程到位都对...
在平时开发时,我们会遇到要创建许多类型相似的object,之前的文章有提到使用new操作符配合fun...