【PHP】解析邏輯運算子 and、or、&&、|| 之間的差異

【PHP】解析邏輯運算子 and、or、&&、|| 之間的差異

本篇重點

  • and 和 &&之間有什麼差別,它們分別代表什麼意思?
  • or 和 || 之間有什麼差別,它們分別代表什麼意思?
  • 邏輯運算子的執行順序
  • 邏輯運算子使用建議

「分數有及格嗎?」、「考卷的姓名和學號都是正確的嗎?」、「這張考卷是 john 還是tom 的?」,在日常生活中很常用到的條件判斷,在程式中也很常出現,PHP 提供了很多符號來輔助我們,使用邏輯運算子來達到目的。

&&、AND vs || 、OR

  • &&、AND 是「且、和」的意思,符號兩邊的條件都達成,結果為 true,反之為 false
  • ||、OR 是「或」的意思,符號兩邊依左至右判斷,如果有條件達成,結果為 true,反之為 false

範例

依學生的資訊做條件處理

php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
// 設定學生 'john' 的資訊
$name = 'john';
$score = 60;
$gender = 'male';

// &&、AND 範例
// 判斷學生是 john,且分數是及格
if ($name == 'john' && $score >= 60) {
echo '判斷為true,學生是 john,且分數是及格';
} else {
echo '判斷為false';
}

// 結果:if ($name == 'john' && $score >= 60) 判斷為true,「&&」兩邊的條件皆正確

// 判斷學生不是john,且性別是男生
if ($name != 'john' AND $gender == 'male') {
echo '判斷為true,學生不是john,且性別是男生';
} else {
echo '判斷為false';
}

// 結果:if ($name != 'john' AND $gender == 'male') 判斷為 false,第一個條件學生不是 john 是錯誤的,因此也不用看第二個條件了,整個判斷式直接錯誤

// ||、OR 範例
// 判斷學生是john或是學生是女生
if ($name == 'john' || $gender == 'female') {
echo '判斷為true,學生是john,或是學生是女生';
} else {
echo '判斷為false';
}

// 結果:if ($name == 'john' || $gender == 'female') 判斷為 true,第一個條件學生是 john 是正確的,因此也不用看第二個條件了,整個判斷式直接正確

// 判斷學生分數不及格或是這位學生不是男生
if ($score < 60 OR $gender != 'male') {
echo '判斷為true,學生分數不及格或是這位學生不是男生';
} else {
echo '判斷為false';
}

// 結果:if ($name == 'john' || $gender == 'female') 判斷為 false,第一個條件不正確,接續判斷第二個條件,第二個條件也不正確

&& vs AND 以及 || vs OR

接著來比較 and 和 && 之間以及 or 和 || 之間的差異

簡單來說它們的差異就是執行的優先順序(Operator Precedence)不同

  • 「&&」的執行順序比「=」高,而「=」的執行順序比「AND」高
  • 「||」的執行順序比「=」高,而「=」的執行順序比「OR」高

範例

依學生的資訊做條件處理

php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
// 設定學生 'Tom' 的資訊
$student_id = 123;
$name = 'tom';
$gender = 'male';
$score = 49;

// &&、AND 範例
// 判斷學生學號是123,且分數是及格
$answer = $student_id == 123 && $score >= 60;

// 結果:判斷結果為 fasle,第二個條件錯誤

$answer = $student_id == 123 AND $score >= 60;

// 結果:判斷結果為 true,因為「=」的執行順序比「AND」高,因此變成先執行「$answer = $student_id== 123」,導致 $answer 先賦值

$answer = ($student_id == 123 AND $score >= 60);

// 結果:判斷結果為 false,因為加了括號改變執行順序,先執行「$student_id == 123 AND $score >= 60」

// 判斷這位學生是 john 還是 tom
$answer = $name == 'john' || $name == 'tom';

// 結果:判斷結果為 true,第一個條件正確

$answer = $name == 'john' OR $name == 'tom';

// 結果:判斷結果為 false,因為「=」的執行順序比「OR」高,因此變成先執行「$answer = $name == 'john'」,導致 $answer 先賦值

$answer = ($name == 'john' OR $name == 'tom');

// 結果:判斷結果為 true,因為加了括號改變執行順序,先執行「$name == 'john' OR $name == 'tom'」

結論

條件判斷時,依需求使用不同的邏輯運算子幫助我們達到目的。

  • 「&&」、「AND」 是「且」的意思,符號兩邊的條件皆須達成時使用
  • 「||」、「OR」 是「或」的意思,符號兩邊的條件只需要有一個條件達成時使用
  • 「&&」的執行順序比「=」高,而「=」的執行順序比「AND」高
  • 「||」的執行順序比「=」高,而「=」的執行順序比「OR」高

運算子的執行優先順序大大的影響判斷的結果,所以在使用時要多加注意,不然會得到意想不到的結果😆,建議使用「&&」和「||」可以減少錯誤的發生~

延伸閱讀

作者

健忘工程師

發表於

2024-04-29

更新於

2024-04-29

許可協議


評論

複製完成