PHP và MySQL Bài 5: Toán tử trong PHP - Xử lý tính toán và logic hệ thống
Ở bài trước, chúng ta đã biết cách lưu trữ dữ liệu vào các biến. Tuy nhiên, dữ liệu nằm im thì không có tác dụng gì cả. Để ứng dụng hoạt động (ví dụ: tính tổng tiền giỏ hàng, kiểm tra mật khẩu, hay trừ tiền vé qua cổng), chúng ta cần thao tác với các dữ liệu đó thông qua Toán tử (Operators).
Trong PHP, toán tử được chia thành 5 nhóm cơ bản nhất mà một Backend Developer phải nắm vững.
1. Toán tử số học (Arithmetic Operators)
Đây là nhóm toán tử dùng để thực hiện các phép tính toán học cơ bản trên dữ liệu kiểu số (Integer, Float).
+: Cộng-: Trừ*: Nhân/: Chia (Kết quả có thể là số thập phân)%: Chia lấy phần dư (Modulus- Rất hữu ích để kiểm tra số chẵn/lẻ)**: Lũy thừa (Mũ)
💡 Ví dụ thực tế: Tính toán tiền thối tại máy bán vé tự động (Ticket Vending Machine):
<?php
$tienKhachDua = 50000;
$giaVe = 12000;
$soLuong = 3;
// Tính tổng tiền cần thanh toán
$tongTien = $giaVe * $soLuong;
// Tính tiền thừa trả lại cho khách
$tienThua = $tienKhachDua - $tongTien;
echo "Tổng tiền vé: " . $tongTien . " VNĐ\n";
echo "Tiền thối lại: " . $tienThua . " VNĐ\n";
// Ứng dụng phép chia lấy dư: Kiểm tra một ID giao dịch là chẵn hay lẻ
$transactionId = 105;
$laSoLe = $transactionId % 2; // Kết quả là 1 (Số lẻ)
?>
2. Toán tử gán (Assignment Operators)
Toán tử gán dùng để cấp phát giá trị cho một biến. Toán tử cơ bản nhất là dấu =, có ý nghĩa là "lấy giá trị bên phải gán cho biến bên trái".
Ngoài ra, PHP hỗ trợ các toán tử gán rút gọn để code ngắn gọn hơn:
x = y: Gán giá trịychoxx += y: Tương đươngx = x + y(Cộng thêm vào biến hiện tại)x -= y: Tương đươngx = x - y(Trừ đi từ biến hiện tại)x *= y: Tương đươngx = x * yx .= y: Tương đươngx = x . y(Nối chuỗi - Cực kỳ hay dùng)
<?php
// Cập nhật doanh thu liên tục
$doanhThuCa = 500000;
$giaVeMoi = 15000;
$doanhThuCa += $giaVeMoi; // Tương đương: $doanhThuCa = $doanhThuCa + $giaVeMoi
// Nối chuỗi log hệ thống
$logMessage = "Lỗi nạp tiền thẻ lúc 10:00. ";
$logMessage .= "Mã lỗi: ERR_TIMEOUT."; // Gắn thêm nội dung vào chuỗi cũ
?>
3. Toán tử so sánh (Comparison Operators)
Đây là nhóm toán tử cốt lõi để tạo ra các luồng rẽ nhánh (if/else). Chúng so sánh hai giá trị và luôn trả về kiểu Boolean (true hoặc false).
==: Bằng nhau về giá trị.===: Đồng nhất (Bằng tuyệt đối) - Bằng nhau về cả giá trị lẫn KIỂU DỮ LIỆU.!=: Khác nhau.!==: Khác nhau tuyệt đối.>,<,>=,<=: Lớn hơn, nhỏ hơn, lớn hơn hoặc bằng, nhỏ hơn hoặc bằng.
⚠️ Lưu ý sinh tử giữa
==và===: Trong PHP,==sẽ tự động ép kiểu dữ liệu để so sánh, dẫn đến nhiều lỗi logic tiềm ẩn. Khi làm dự án thực tế, luôn ưu tiên sử dụng===.
<?php
$soTien = 100; // Kiểu Integer
$chuoiTien = "100"; // Kiểu String
// So sánh bằng (==)
var_dump($soTien == $chuoiTien); // Kết quả: bool(true) - Rất nguy hiểm nếu kiểm tra ID!
// So sánh đồng nhất (===)
var_dump($soTien === $chuoiTien); // Kết quả: bool(false) - An toàn và chính xác.
?>
4. Toán tử logic (Logical Operators)
Dùng để kết hợp nhiều điều kiện kiểm tra với nhau. Trả về true hoặc false.
&&(hoặcand): VÀ - Trả vềtruenếu TẤT CẢ các điều kiện đều đúng.||(hoặcor) : HOẶC - Trả vềtruenếu CHỈ CẦN MỘT trong các điều kiện đúng.!: PHỦ ĐỊNH (NOT) - Đảo ngược giá trị logic (từtruethànhfalsevà ngược lại).
💡 Ví dụ thực tế: Cổng kiểm soát vé (AFC Gate): Để một hành khách được mở cổng đi qua, hệ thống phải thỏa mãn đồng thời 2 điều kiện: Thẻ đang hoạt động VÀ số dư phải lớn hơn hoặc bằng giá vé tuyến.
<?php
$soDuThe = 20000;
$trangThaiThe = "active";
$giaVeTuyen = 15000;
// Kiểm tra điều kiện mở cổng (Turnstile)
$hopLe = ($trangThaiThe === "active") && ($soDuThe >= $giaVeTuyen);
// Dùng toán tử ! để kiểm tra thẻ bị khóa
$biKhoa = !($trangThaiThe === "active");
?>
5. Toán tử tăng/giảm (Increment / Decrement Operators)
Toán tử này thường được dùng nhiều nhất trong các vòng lặp (như vòng lặp for) để tăng hoặc giảm giá trị của một biến đi 1 đơn vị một cách nhanh chóng.
++$x(Pre-increment): Tăngxlên 1 đơn vị, sau đó mới trả về giá trị củax.$x++(Post-increment): Trả về giá trị củaxhiện tại trước, sau đó mới tăngxlên 1.--$xvà$x--: Tương tự nhưng là giảm đi 1 đơn vị.
<?php
$luotKhach = 100;
// Có một hành khách mới quét thẻ qua trạm
$luotKhach++; // Lúc này $luotKhach trở thành 101
// Ví dụ phân biệt tiền tố và hậu tố:
$a = 5;
$b = $a++; // $b lấy giá trị 5 trước, sau đó $a mới tăng lên 6
$c = 5;
$d = ++$c; // $c tăng lên 6 trước, sau đó mới gán vào $d (lúc này $d = 6)
?>
All rights reserved