Sau khi nắm vững cách khai báo biến trong PHP, bước tiếp theo là học cách xử lý dữ liệu thông qua toán tử trong PHP. Toán tử giống như các công cụ giúp bạn thực hiện phép tính, so sánh giá trị, kết hợp điều kiện và thao tác với dữ liệu. Hiểu rõ các loại toán tử và thứ tự ưu tiên của chúng sẽ giúp bạn viết code chính xác và hiệu quả hơn.
1. Toán tử là gì?
Toán tử (Operator) là ký hiệu đặc biệt dùng để thực hiện các phép toán trên biến và giá trị. Kết quả của phép toán tạo thành biểu thức (Expression).
<?php
// Ví dụ về toán tử
$a = 10; // Toán tử gán (=)
$b = $a + 5; // Toán tử cộng (+)
$c = $a > $b; // Toán tử so sánh (>)
// Biểu thức: $a + 5 → kết quả là 15
?>PHP hỗ trợ nhiều loại toán tử khác nhau:
- ✅ Toán tử số học (Arithmetic)
- ✅ Toán tử gán (Assignment)
- ✅ Toán tử so sánh (Comparison)
- ✅ Toán tử logic (Logical)
- ✅ Toán tử tăng/giảm (Increment/Decrement)
- ✅ Toán tử chuỗi (String)
- ✅ Toán tử mảng (Array)
2. Toán tử số học (Arithmetic Operators)
Dùng để thực hiện các phép tính cơ bản với số:
<?php
$a = 10;
$b = 3;
// Cộng
$tong = $a + $b;
echo $tong; // 13
// Trừ
$hieu = $a - $b;
echo $hieu; // 7
// Nhân
$tich = $a * $b;
echo $tich; // 30
// Chia
$thuong = $a / $b;
echo $thuong; // 3.3333...
// Chia lấy phần dư (Modulus)
$du = $a % $b;
echo $du; // 1 (10 chia 3 dư 1)
// Lũy thừa (PHP 5.6+)
$luy_thua = $a ** $b;
echo $luy_thua; // 1000 (10^3)
?>2.1. Bảng tổng hợp toán tử số học
| Toán tử | Tên | Ví dụ | Kết quả |
|---|---|---|---|
+ | Cộng | 10 + 3 | 13 |
- | Trừ | 10 - 3 | 7 |
* | Nhân | 10 * 3 | 30 |
/ | Chia | 10 / 3 | 3.333… |
% | Chia lấy dư | 10 % 3 | 1 |
** | Lũy thừa | 10 ** 3 | 1000 |
💡 Mẹo: Toán tử
%rất hữu ích để kiểm tra số chẵn/lẻ:$so % 2 == 0→ số chẵn
3. Toán tử gán (Assignment Operators)
Dùng để gán giá trị cho biến:
<?php
$x = 10; // Gán giá trị 10 cho $x
// Gán kết hợp với phép toán
$x += 5; // Tương đương: $x = $x + 5 → 15
$x -= 3; // Tương đương: $x = $x - 3 → 12
$x *= 2; // Tương đương: $x = $x * 2 → 24
$x /= 4; // Tương đương: $x = $x / 4 → 6
$x %= 4; // Tương đương: $x = $x % 4 → 2
// Với chuỗi
$text = "Hello";
$text .= " World"; // Nối chuỗi: "Hello World"
?>3.1. Bảng toán tử gán
| Toán tử | Tương đương | Ví dụ |
|---|---|---|
= | Gán cơ bản | $x = 5 |
+= | $x = $x + value | $x += 3 |
-= | $x = $x - value | $x -= 2 |
*= | $x = $x * value | $x *= 4 |
/= | $x = $x / value | $x /= 2 |
.= | $x = $x . value | $x .= "text" |
4. Toán tử so sánh (Comparison Operators)
Dùng để so sánh 2 giá trị, trả về true hoặc false:
<?php
$a = 10;
$b = "10";
$c = 20;
// So sánh bằng (giá trị)
var_dump($a == $b); // true (10 == "10")
// So sánh bằng tuyệt đối (giá trị + kiểu)
var_dump($a === $b); // false (int ≠ string)
// Khác nhau
var_dump($a != $c); // true
var_dump($a !== $b); // true (khác kiểu)
// Lớn hơn, nhỏ hơn
var_dump($a > $b); // false
var_dump($a < $c); // true
var_dump($a >= 10); // true
var_dump($c <= 15); // false
// Spaceship (PHP 7+)
echo $a <=> $b; // 0 (bằng nhau)
echo $a <=> $c; // -1 (a < c)
echo $c <=> $a; // 1 (c > a)
?>4.1. Bảng toán tử so sánh
| Toán tử | Tên | Ví dụ | Kết quả |
|---|---|---|---|
== | Bằng | 10 == "10" | true |
=== | Bằng tuyệt đối | 10 === "10" | false |
!= | Khác | 10 != 20 | true |
!== | Khác tuyệt đối | 10 !== "10" | true |
> | Lớn hơn | 10 > 5 | true |
< | Nhỏ hơn | 10 < 20 | true |
>= | Lớn hơn hoặc bằng | 10 >= 10 | true |
<= | Nhỏ hơn hoặc bằng | 10 <= 15 | true |
<=> | Spaceship | 10 <=> 20 | -1 |
⚠️ Lưu ý: Luôn dùng
===thay vì==để tránh lỗi do chuyển kiểu tự động. Ví dụ:0 == "abc"→ true (sai logic!)
5. Toán tử logic (Logical Operators)
Dùng để kết hợp nhiều điều kiện:
<?php
$tuoi = 20;
$diem = 8.5;
// AND (và) - Cả 2 điều kiện đều đúng
if ($tuoi >= 18 && $diem >= 8.0) {
echo "Đủ điều kiện nhận học bổng";
}
// OR (hoặc) - 1 trong 2 điều kiện đúng
if ($diem >= 9.0 || $tuoi < 18) {
echo "Được miễn phí";
}
// NOT (phủ định)
$da_nop_ho_so = false;
if (!$da_nop_ho_so) {
echo "Chưa nộp hồ sơ";
}
// Kết hợp nhiều điều kiện
if (($tuoi >= 18 && $diem >= 7.0) || $tuoi < 16) {
echo "OK";
}
?>5.1. Bảng toán tử logic
| Toán tử | Tên | Ví dụ | Kết quả |
|---|---|---|---|
&& | AND (và) | true && false | false |
|| | OR (hoặc) | true || false | true |
! | NOT (phủ định) | !true | false |
and | AND (ưu tiên thấp) | true and false | false |
or | OR (ưu tiên thấp) | true or false | true |
💡 Khuyến nghị: Dùng
&&và||thay vìandvàorvì chúng có độ ưu tiên cao hơn, tránh lỗi logic.
6. Toán tử tăng/giảm (Increment/Decrement)
Dùng để tăng hoặc giảm giá trị biến đi 1:
<?php
$x = 5;
// Tăng sau (Post-increment)
echo $x++; // In ra 5, sau đó $x = 6
echo $x; // 6
// Tăng trước (Pre-increment)
$y = 5;
echo ++$y; // $y = 6, sau đó in ra 6
echo $y; // 6
// Giảm sau
$z = 10;
echo $z--; // In ra 10, sau đó $z = 9
echo $z; // 9
// Giảm trước
$w = 10;
echo --$w; // $w = 9, sau đó in ra 9
echo $w; // 9
?>6.1. Phân biệt tăng trước và tăng sau
<?php
// Ví dụ thực tế
$a = 5;
$b = $a++; // $b = 5, $a = 6
echo "$a, $b"; // 6, 5
$c = 5;
$d = ++$c; // $c = 6, $d = 6
echo "$c, $d"; // 6, 6
?>7. Toán tử chuỗi (String Operators)
Dùng để nối chuỗi:
<?php
$ho = "Nguyễn";
$ten = "Văn A";
// Nối chuỗi với .
$ho_ten = $ho . " " . $ten;
echo $ho_ten; // Nguyễn Văn A
// Nối chuỗi với .=
$chao = "Xin chào";
$chao .= ", $ho_ten!";
echo $chao; // Xin chào, Nguyễn Văn A!
// Kết hợp với biến
$tuoi = 20;
$thong_tin = "Tên: $ho_ten, Tuổi: $tuoi";
echo $thong_tin;
?>8. Toán tử ba ngôi (Ternary Operator)
Cú pháp ngắn gọn của câu lệnh if-else:
<?php
// Cú pháp: điều_kiện ? giá_trị_nếu_đúng : giá_trị_nếu_sai
$tuoi = 20;
$ket_qua = ($tuoi >= 18) ? "Trưởng thành" : "Vị thành niên";
echo $ket_qua; // Trưởng thành
// Ví dụ khác
$diem = 7.5;
$xep_loai = ($diem >= 8.0) ? "Giỏi" :
(($diem >= 6.5) ? "Khá" : "Trung bình");
echo $xep_loai; // Khá
// Null Coalescing (PHP 7+)
$ten = $_GET['name'] ?? "Khách"; // Nếu không có 'name' thì = "Khách"
echo $ten;
?>9. Toán tử mảng (Array Operators)
Dùng để thao tác với mảng:
<?php
$arr1 = ["a" => "PHP", "b" => "MySQL"];
$arr2 = ["c" => "JavaScript", "b" => "PostgreSQL"];
// Gộp mảng (Union)
$gop = $arr1 + $arr2;
print_r($gop);
// ["a" => "PHP", "b" => "MySQL", "c" => "JavaScript"]
// Lưu ý: Key trùng giữ giá trị của $arr1
// So sánh mảng
var_dump($arr1 == $arr2); // false
var_dump($arr1 === $arr2); // false
$arr3 = ["a" => "PHP", "b" => "MySQL"];
var_dump($arr1 == $arr3); // true (cùng key-value)
var_dump($arr1 === $arr3); // true (cùng key-value và kiểu)
?>10. Thứ tự ưu tiên toán tử (Operator Precedence)
Khi một biểu thức có nhiều toán tử, PHP thực hiện theo thứ tự ưu tiên:
<?php
// Ví dụ 1: Nhân, chia trước cộng, trừ
$ket_qua = 10 + 5 * 2;
echo $ket_qua; // 20 (không phải 30)
// Giải thích: 5 * 2 = 10 → 10 + 10 = 20
// Ví dụ 2: Dùng ngoặc đơn để thay đổi thứ tự
$ket_qua2 = (10 + 5) * 2;
echo $ket_qua2; // 30
// Ví dụ 3: Toán tử logic
$a = true || false && false;
// && có độ ưu tiên cao hơn ||
// false && false = false → true || false = true
var_dump($a); // true
// Ví dụ 4: Dùng ngoặc cho rõ ràng
$b = (true || false) && false;
var_dump($b); // false
?>10.1. Bảng thứ tự ưu tiên (cao → thấp)
| Mức độ | Toán tử | Mô tả |
|---|---|---|
| 1 (cao nhất) | ++ -- | Tăng/Giảm |
| 2 | ! | Phủ định logic |
| 3 | * / % | Nhân, chia, chia lấy dư |
| 4 | + - . | Cộng, trừ, nối chuỗi |
| 5 | < <= > >= | So sánh |
| 6 | == != === !== | So sánh bằng |
| 7 | && | AND logic |
| 8 | || | OR logic |
| 9 | ? : | Toán tử ba ngôi |
| 10 (thấp nhất) | = += -= *= /= | Toán tử gán |
💡 Mẹo: Khi không chắc về thứ tự ưu tiên, hãy dùng ngoặc đơn
()để code dễ đọc và tránh lỗi logic.
11. Ví dụ thực tế
11.1. Tính điểm trung bình
<?php
$toan = 8.5;
$ly = 7.0;
$hoa = 9.0;
$trung_binh = ($toan + $ly + $hoa) / 3;
echo "Điểm TB: " . number_format($trung_binh, 2); // 8.17
// Xếp loại
$xep_loai = ($trung_binh >= 8.0) ? "Giỏi" :
(($trung_binh >= 6.5) ? "Khá" : "Trung bình");
echo "<br>Xếp loại: $xep_loai"; // Giỏi
?>11.2. Kiểm tra năm nhuận
<?php
$nam = 2024;
// Năm nhuận: Chia hết cho 4 NHƯNG không chia hết cho 100
// HOẶC chia hết cho 400
$la_nam_nhuan = ($nam % 4 == 0 && $nam % 100 != 0) || ($nam % 400 == 0);
if ($la_nam_nhuan) {
echo "$nam là năm nhuận";
} else {
echo "$nam không phải năm nhuận";
}
?>11.3. Tính giá sau giảm
<?php
$gia_goc = 500000;
$phan_tram_giam = 20;
// Cách 1: Dùng toán tử số học
$tien_giam = $gia_goc * ($phan_tram_giam / 100);
$gia_sau_giam = $gia_goc - $tien_giam;
// Cách 2: Ngắn gọn hơn
$gia_sau_giam2 = $gia_goc * (1 - $phan_tram_giam / 100);
echo "Giá gốc: " . number_format($gia_goc) . " VNĐ<br>";
echo "Giảm $phan_tram_giam%<br>";
echo "Giá sau giảm: " . number_format($gia_sau_giam) . " VNĐ";
// Kết quả: 400,000 VNĐ
?>Tóm tắt
Qua bài này bạn đã nắm được:
- ✅ Toán tử trong PHP là ký hiệu thực hiện phép toán trên biến và giá trị
- ✅ Toán tử số học:
+ - * / % **cho các phép tính cơ bản - ✅ Toán tử gán:
= += -= *= /= .=để gán và cập nhật giá trị - ✅ Toán tử so sánh:
== === != !== > < >= <=trả về true/false - ✅ Phân biệt
==(so sánh giá trị) và===(so sánh giá trị + kiểu) - ✅ Toán tử logic:
&& || !để kết hợp nhiều điều kiện - ✅ Toán tử tăng/giảm:
++ --(trước và sau khác nhau) - ✅ Toán tử ba ngôi:
? :rút gọn if-else - ✅ Thứ tự ưu tiên:
* /trước+ -, dùng()khi cần
Bài tiếp theo, bạn sẽ học về câu lệnh điều kiện để kiểm soát luồng chương trình dựa trên các điều kiện logic.
🎯 Bài tập thực hành
- Bài 1: Viết code tính chu vi và diện tích hình chữ nhật có chiều dài 10cm, chiều rộng 5cm. In kết quả ra màn hình.
- Bài 2: Cho biến
$so = 17. Viết code kiểm tra số này là chẵn hay lẻ bằng toán tử%và in kết quả. - Bài 3: Tạo 3 biến
$a = 5,$b = "5",$c = 10. So sánh$a == $b,$a === $b,$a < $cvà in kết quả từng phép so sánh.
Gợi ý Bài 1:
<?php
$dai = 10;
$rong = 5;
$chu_vi = ($dai + $rong) * 2;
$dien_tich = $dai * $rong;
echo "Chiều dài: {$dai}cm<br>";
echo "Chiều rộng: {$rong}cm<br>";
echo "Chu vi: {$chu_vi}cm<br>";
echo "Diện tích: {$dien_tich}cm²";
?>Gợi ý Bài 2:
<?php
$so = 17;
if ($so % 2 == 0) {
echo "$so là số chẵn";
} else {
echo "$so là số lẻ";
}
// Hoặc dùng toán tử ba ngôi
$ket_qua = ($so % 2 == 0) ? "chẵn" : "lẻ";
echo "$so là số $ket_qua";
?>Gợi ý Bài 3:
<?php
$a = 5;
$b = "5";
$c = 10;
echo "So sánh \$a == \$b: ";
var_dump($a == $b); // true (giá trị bằng nhau)
echo "<br>So sánh \$a === \$b: ";
var_dump($a === $b); // false (khác kiểu)
echo "<br>So sánh \$a < \$c: ";
var_dump($a < $c); // true (5 < 10)
?>