Trong bài học này, chúng ta sẽ tìm hiểu về cách điều khiển luồng chương trình trong PHP thông qua câu lệnh điều kiện và vòng lặp.
1. Câu lệnh điều kiện
Câu lệnh điều kiện cho phép chương trình đưa ra quyết định dựa trên việc một biểu thức điều kiện là đúng hay sai.
1.1. Câu lệnh if-else
-
Cấu trúc cơ bản:
// Khối lệnh được thực thi nếu điều_kiện là true
} else {
// Khối lệnh được thực thi nếu điều_kiện là false
}
-
Ví dụ:
<?php
$age = 20;
if ($age >= 18) {
echo "Bạn đủ tuổi bầu cử.";
} else {
echo "Bạn chưa đủ tuổi bầu cử.";
}
?>
-
Khối lệnh else là tùy chọn. Nếu không có khối lệnh else, chương trình sẽ tiếp tục thực thi dòng lệnh tiếp theo sau khối lệnh if nếu điều kiện là false.
1.2. Câu lệnh if-elseif-else
-
Cấu trúc:
// Khối lệnh 1
} elseif (điều_kiện_2) {
// Khối lệnh 2
} else {
// Khối lệnh 3
}
-
Câu lệnh elseif cho phép bạn kiểm tra nhiều điều kiện một cách tuần tự.
-
Khối lệnh đầu tiên có điều kiện đúng sẽ được thực thi. Nếu không có điều kiện nào đúng, khối lệnh else (nếu có) sẽ được thực thi.
-
Ví dụ:
<?php
$score = 75;
if ($score >= 90) {
echo "Xuất sắc";
} elseif ($score >= 80) {
echo "Giỏi";
} elseif ($score >= 70) {
echo "Khá";
} else {
echo "Trung bình";
}
?>
1.3. Câu lệnh switch-case
-
Cấu trúc:
case giá_trị_1:
// Khối lệnh 1
break;
case giá_trị_2:
// Khối lệnh 2
break;
...
default:
// Khối lệnh mặc định
}
-
Câu lệnh switch-case so sánh biểu thức với từng giá trị trong các case.
-
break; được sử dụng để kết thúc khối lệnh của case.
-
default: được thực thi nếu không có case nào khớp.
-
Ví dụ:
<?php
$day = "Sunday";
switch ($day) {
case "Saturday":
case "Sunday":
echo "Cuối tuần rồi!";
break;
default:
echo "Chúc một ngày làm việc vui vẻ!";
}
?>
2. Toán tử
2.1. Toán tử số học
Toán tử số học gồm có những toán tử cơ bản như sau: +, -, *, /, %.
|
Ví dụ |
Chú thích |
|
|
Lấy đối của |
|
|
Tổng của |
|
|
Hiệu của |
|
|
Tích của |
|
|
Phần nguyên của phép |
|
|
Dư của phép |
Có vài điểm chú ý của các toán tử số học như sau:
- Phép chia, khi dùng toán tử
/thì kết quả là một số kiểufloat, trừ khi cả 2 toán hạng đều là kiểuinthoặc giá trị của 2 số hạng bằng nhau thì sẽ cho kết quả là kiểuint. - Phép lấy dư
%là các toán hạng phải được chuyển thành kiểuinttrước khi thực hiện phép lấy dư, một điểm lưu ý nữa là dấu của kết quả phép lấy dư sẽ phụ thuộc vào dấu của số bị chia.
Ví dụ:
$y = 6;
echo $x % $y; // = -4
2.2. Toán tử gán
Toán tử so sánh có thể so sánh các số, kí tự, chuỗi với nhau và trả về TRUE hoặc FALSE.
|
Toán tử |
Ví dụ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ví dụ:
$x *= 6;
echo $x ; // 60
Trong PHP cũng có phép gán bằng tham chiếu với cú pháp $var = &$othervar;. Khi sử dụng phép gán tham chiếu thì cả hai biến đều trỏ đến chung một dữ liệu và thao tác cùng trên dữ liệu đó.
$b = &$a; // $b tham chiếu đến $a khi đó $b = 3
$a = 4; // thay đổi $a = 4 vì thế nên $b = 4
2.3. Toán tử so sánh
Toán tử so sánh có thể so sánh các số, kí tự, chuỗi với nhau và trả về TRUE hoặc FALSE.
| Toán tử | Ví dụ | Chú thích |
| == | $a == $b | So sánh bằng. Trả về TRUE nếu $a bằng $b |
| != | $a != $b | So sánh khác. Trả về TRUE nếu $a khác $b |
| > | $a > $b | Lớn hơn. Trả về TRUE nếu $a lớn hơn $b |
| < | $a < $b | Nhỏ hơn. Trả về TRUE nếu $a nhỏ hơn $b |
| >= | $a >= $b | Lớn hơn hoặc bằng. Trả về TRUE nếu $a lớn hơn hoặc bằng $b |
| <= | $a <= $b | Nhỏ hơn hoặc bằng. Trả về TRUE nếu $a nhỏ hơn hoặc bằng $b |
2.4. Toán tử logic
| Toán tử | Ví dụ | Ý nghĩa |
| && hoặc and |
$a && $b hoặc $a and $b |
Và. Trả về true nếu cả hai vế là true |
| || hoặc or |
$a || $b hoặc $a or $b |
Hoặc. Trả về true nếu một trong hai vế là true |
| xor | $a xor $b | Hoặc loại trừ. Trả về true khi 1 trong hai true |
| ! | !$a | Phủ định. Trả về true nếu phủ định của nó là true |
2.5. Toán tử trên bit
Toán tử trên bit, cho phép thao tác trên từng bit của một số nguyên.
|
Ví dụ |
Chú thích |
|
|
And |
|
|
Or |
|
|
Xor |
|
|
Not |
|
|
Shift left |
|
|
Shift right |
2.6. Toán tử tăng, giảm
Trong PHP, toán tử tăng/giảm chỉ được sử dụng đối với số và chuỗi.
|
Ví dụ |
Chú thích |
|
|
Cộng |
|
|
Trả về |
|
|
Lấy |
|
|
Trả về |
Xét ví dụ sau đây, trong PHP.
$a++;
Sẽ trả về kết quả là $a = ‘AA’.
Còn đối với C/C++,
a ++;
Kết quả là 91, bởi vì trong bảng mã ASCII kí tự Z có mã là 90 và a++ nên a = 91.
Để hiểu rõ hơn theo dõi ví dụ dưới đây.
<?php
echo '== Characters ==';
$s = 'W';
for ($n = 0; $n < 5; $n++) {
echo ++$s . ", ";
}
echo '== Digits ==';
$d = 'A8';
for ($n = 0; $n < 5; $n++) {
echo ++$d . ", ";
}
echo '== Characters and Digits =='
$t = 'A08';
for ($n = 0; $n < 5; $n++) {
echo ++$t . ", " ;
}
?>
Kết quả:
X, Y, Z, AA, AB
== Digits ==
A9, B0, B1, B2, B3
== Characters and Digits ==
A09, A10, A11, A12, A13
2.7. Toán tử trên chuỗi
Liên quan đến chuỗi kí tự thì có hai toán tử sau đây và cả hai toán tử đều là dùng để nối chuỗi lại.
|
Toán tử |
Ví dụ |
Chú thích |
|
|
|
Nối hai chuỗi |
|
|
|
Nối chuỗi |
Ví dụ:
$b .= "Stdio Training!";
echo $b; // “Hello Stdio Training”, nó giống như $b = $b . “Stdio Training!”;
2.8. Toán tử trên mảng
|
Toán tử |
Ví dụ |
Chú thích |
|
|
|
Hợp |
|
|
|
Trả về |
|
|
|
Trả về |
|
|
|
Trả về |
|
|
|
Trả về |
|
|
|
Trả về |
Ví dụ:
<?php
$a = array("a" => "La Kiến Vinh", "b" => "Vũ Quang Huy");
$b = array("Ryan", "Rye", "Dat");
$c = $a + $b;
echo "Union \$a and \$b: \n";
var_dump($c);
$c = $b + $a;
echo "Union of \$b and \$a: \n";
var_dump($c);
$a += $b; // $a = $a + $b
echo "Union \$a += \$b: \n";
var_dump($a);
echo “ === Operator === \n” .
var_dump($a === $b);
?>
Kết quả:
array(3) {
["a"]=>
string(5) "La Kiến Vinh"
["b"]=>
string(5) "Vũ Quang Huy"
["c"]=>
string(3) "Dat"
}
Union $b and $a:
array(3) {
["a"]=>
string(4) "Ryan"
["b"]=>
string(3) "Rye"
["c"]=>
string(3) "Dat"
}
Union $a += $b:
array(3) {
'a' =>
string(5) "La Kiến Vinh"
'b' =>
string(5) "Vũ Quang Huy"
'c' =>
string(3) "Dat"
}
=== Operator ===
Bool(false)
3. Vòng lặp
Vòng lặp cho phép bạn thực hiện một khối mã nhiều lần.
3.1. Vòng lặp for
-
Cấu trúc:
// Khối lệnh lặp
}
-
Vòng lặp for thường được sử dụng khi bạn biết trước số lần lặp.
-
khởi_tạo: Khởi tạo biến đếm.
-
điều_kiện: Điều kiện để tiếp tục lặp.
-
cập_nhật: Cập nhật biến đếm sau mỗi lần lặp.
-
Ví dụ:
for ($i = 1; $i <= 5; $i++) {
echo "Số thứ tự: $i <br>";
}
?>
3.2. Vòng lặp while
-
Cấu trúc:
// Khối lệnh lặp
}
-
Vòng lặp while kiểm tra điều kiện trước khi thực hiện khối lệnh.
-
Vòng lặp sẽ tiếp tục nếu điều kiện là true.
-
Ví dụ:
$i = 1;
while ($i <= 10) {
echo "$i ";
$i++;
}
?>
3.3. Vòng lặp do-while
-
Cấu trúc:
// Khối lệnh lặp
} while (điều_kiện);
-
Vòng lặp do-while thực hiện khối lệnh ít nhất một lần, sau đó mới kiểm tra điều kiện.
-
Ví dụ:
$i = 1;
do {
echo "$i ";
$i++;
} while ($i <= 5);
?>
4. Sử dụng vòng lặp hiệu quả
-
Chọn vòng lặp phù hợp: Nên chọn vòng lặp phù hợp với bài toán cụ thể.
-
Hạn chế tính toán trong điều kiện lặp: Nên tính toán các giá trị cố định bên ngoài vòng lặp.
-
Sử dụng break và continue:
-
break; dùng để thoát khỏi vòng lặp.
-
continue; dùng để bỏ qua lần lặp hiện tại và chuyển sang lần lặp tiếp theo.
-
5. Bài tập:
-
Viết chương trình kiểm tra một số nguyên có phải là số nguyên tố hay không.
-
Viết chương trình in ra bảng cửu chương từ 1 đến 10.
-
Viết chương trình tìm ước số chung lớn nhất và bội số chung nhỏ nhất của hai số nguyên dương