Toán tử và biểu thức

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)

CÁC LOẠI TOÁN TỬ TRONG PHP TOÁN TỬ SỐ HỌC + - * / % ** Phép tính toán học VD: 10 + 5 = 15 TOÁN TỬ GÁN = += -= *= /= Gán giá trị cho biến VD: $x = 10 TOÁN TỬ SO SÁNH == === != !== So sánh giá trị VD: 10 > 5 → true TOÁN TỬ LOGIC && || ! Kết hợp điều kiện VD: true && false TOÁN TỬ TĂNG/GIẢM ++ -- Tăng/giảm 1 đơn vị VD: $x++ → $x = $x + 1 TOÁN TỬ CHUỖI . .= Nối chuỗi VD: "Hi" . "PHP" TOÁN TỬ BA NGÔI ? : Rút gọn if-else TOÁN TỬ MẢNG + == === Thao tác với mảng
Hình 1: Các loại toán tử trong PHP

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ênVí dụKết quả
+Cộng10 + 313
-Trừ10 - 37
*Nhân10 * 330
/Chia10 / 33.333…
%Chia lấy dư10 % 31
**Lũy thừa10 ** 31000

💡 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 đươngVí 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)
?>

SO SÁNH == (BẰNG) VÀ === (BẰNG TUYỆT ĐỐI) == (BẰNG) So sánh giá trị (tự động chuyển kiểu) 10 == "10" ✅ true 0 == false ✅ true "abc" == 0 ✅ true (!) ⚠️ Có thể gây lỗi logic === (BẰNG TUYỆT ĐỐI) So sánh giá trị VÀ kiểu dữ liệu 10 === "10" ❌ false 0 === false ❌ false 10 === 10 ✅ true ✅ An toàn, chính xác hơn
Hình 2: So sánh == và === trong PHP

4.1. Bảng toán tử so sánh

Toán tửTênVí dụKết quả
==Bằng10 == "10"true
===Bằng tuyệt đối10 === "10"false
!=Khác10 != 20true
!==Khác tuyệt đối10 !== "10"true
>Lớn hơn10 > 5true
<Nhỏ hơn10 < 20true
>=Lớn hơn hoặc bằng10 >= 10true
<=Nhỏ hơn hoặc bằng10 <= 15true
<=>Spaceship10 <=> 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ênVí dụKết quả
&&AND (và)true && falsefalse
||OR (hoặc)true || falsetrue
!NOT (phủ định)!truefalse
andAND (ưu tiên thấp)true and falsefalse
orOR (ưu tiên thấp)true or falsetrue

💡 Khuyến nghị: Dùng &&|| thay vì andor vì 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)
?>

THỨ TỰ ƯU TIÊN TOÁN TỬ (CAO → THẤP) 1. ƯU TIÊN CAO NHẤT ++ -- ! (Tăng, giảm, phủ định) 2. NHÂN, CHIA * / % (Nhân, chia, chia lấy dư) 3. CỘNG, TRỪ + - . (Cộng, trừ, nối chuỗi) 4. SO SÁNH < <= > >= == === != !== 5. LOGIC && || (AND, OR) 6. ƯU TIÊN THẤP NHẤT = += -= *= /= (Toán tử gán) 💡 VD: 10 + 5 * 2 = 20 (vì * trước +) | Dùng () để thay đổi: (10 + 5) * 2 = 30
Hình 3: Thứ tự ưu tiên toán tử

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

  1. 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.
  2. 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ả.
  3. Bài 3: Tạo 3 biến $a = 5, $b = "5", $c = 10. So sánh $a == $b, $a === $b, $a < $c và 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)
?>

Để lại bình luận

Email của bạn sẽ không được hiển thị.