Tìm hiểu Toán tử trong PHP(PHP Operations)
Giới thiệu
Toán tử là nền tảng để thực hiện các phép toán trong PHP, chẳng hạn như tính toán số học, so sánh, đánh giá logic và nhiều hơn nữa. PHP cung cấp một tập hợp phong phú các toán tử cho phép các nhà phát triển thực hiện các phép toán khác nhau trên biến, kết hợp giá trị và tạo ra các biểu thức phức tạp. Hiểu rõ các toán tử này là rất quan trọng để viết mã PHP hiệu quả và sạch sẽ. Trong hướng dẫn này, chúng ta sẽ khám phá các toán tử PHP cơ bản, cú pháp của chúng và các ví dụ thực tế để giúp bạn làm chủ chúng.
1. Arithmetic Operators(Toán tử Số học)
Toán tử số học cho phép bạn thực hiện các phép tính toán học.
Toán tử | Tên | Ví dụ | Kết quả |
---|---|---|---|
+ |
Phép cộng | $a + $b |
Tổng của $a và $b |
- |
Phép trừ | $a - $b |
Hiệu của $a và $b |
* |
Phép nhân | $a * $b |
Tích của $a và $b |
/ |
Phép chia | $a / $b |
Thương của $a và $b |
% |
Phép chia lấy dư | $a % $b |
Số dư của $a chia cho $b |
** |
Phép lũy thừa | $a ** $b |
$a lũy thừa $b |
Ví dụ:
$a = 10;
$b = 3;
echo $a + $b; // Phép cộng: 13
echo $a - $b; // Phép trừ: 7
echo $a * $b; // Phép nhân: 30
echo $a / $b; // Phép chia: 3.3333
echo $a % $b; // Phép chia lấy dư: 1
echo $a ** $b; // Phép lũy thừa: 1000
2. Assignment Operators(Toán tử Gán)
Toán tử gán gán giá trị cho biến.
Toán tử | Ví dụ | Tương đương với |
---|---|---|
= |
$a = $b |
Gán $b cho $a |
+= |
$a += $b |
$a = $a + $b |
-= |
$a -= $b |
$a = $a - $b |
*= |
$a *= $b |
$a = $a * $b |
/= |
$a /= $b |
$a = $a / $b |
%= |
$a %= $b |
$a = $a % $b |
Ví dụ:
$x = 5; // Gán đơn giản
$x += 3; // Tương đương với $x = $x + 3 (8)
$x -= 2; // Tương đương với $x = $x - 2 (6)
$x *= 2; // Tương đương với $x = $x * 2 (12)
$x /= 4; // Tương đương với $x = $x / 4 (3)
$x %= 2; // Tương đương với $x = $x % 2 (1)
3. Comparison Operators(Toán tử So sánh)
Toán tử so sánh so sánh hai giá trị và trả về true
hoặc false
.
Toán tử | Tên | Ví dụ | Kết quả |
---|---|---|---|
== |
Bằng | $a == $b |
true nếu $a bằng $b |
=== |
Bằng chặt chẽ | $a === $b |
true nếu $a bằng $b và cùng kiểu |
!= |
Không bằng | $a != $b |
true nếu $a không bằng $b |
!== |
Không bằng chặt chẽ | $a !== $b |
true nếu $a không bằng $b hoặc không cùng kiểu |
> |
Lớn hơn | $a > $b |
true nếu $a lớn hơn $b |
< |
Nhỏ hơn | $a < $b |
true nếu $a nhỏ hơn $b |
>= |
Lớn hơn hoặc bằng | $a >= $b |
true nếu $a lớn hơn hoặc bằng $b |
<= |
Nhỏ hơn hoặc bằng | $a <= $b |
true nếu $a nhỏ hơn hoặc bằng $b |
Ví dụ:
$a = 5;
$b = '5';
var_dump($a == $b); // So sánh lỏng (true)
var_dump($a === $b); // So sánh chặt chẽ (false)
var_dump($a != $b); // Không bằng (false)
var_dump($a !== $b); // Không bằng chặt chẽ (true)
var_dump($a > 3); // Lớn hơn (true)
var_dump($a < 10); // Nhỏ hơn (true)
var_dump($a >= 5); // Lớn hơn hoặc bằng (true)
var_dump($a <= 4); // Nhỏ hơn hoặc bằng (false)
4. Decrement Operators(Toán tử Tăng/Giảm)
Được sử dụng để tăng hoặc giảm giá trị của biến lên 1.
Toán tử | Mô tả | Ví dụ |
---|---|---|
++$a |
Tăng trước | Tăng $a trước khi sử dụng |
$a++ |
Tăng sau | Sử dụng $a , sau đó tăng |
--$a |
Giảm trước | Giảm $a trước khi sử dụng |
$a-- |
Giảm sau | Sử dụng $a , sau đó giảm |
Ví dụ:
$x = 5;
echo $x++; // Tăng sau (in ra 5, sau đó thành 6)
echo ++$x; // Tăng trước (thành 7, sau đó in ra 7)
echo $x--; // Giảm sau (in ra 7, sau đó thành 6)
echo --$x; // Giảm trước (thành 5, sau đó in ra 5)
5. Logical Operators(Toán tử Logic)
Toán tử logic được sử dụng để kết hợp các câu lệnh điều kiện:
Toán tử | Tên | Ví dụ | Kết quả |
---|---|---|---|
&& |
VÀ | $a && $b |
true nếu cả $a và $b đều đúng |
` | ` | HOẶC | |
! |
PHỦ ĐỊNH | !$a |
true nếu $a sai |
Ví dụ:
$a = true;
$b = false;
var_dump($a && $b); // Toán tử VÀ (false)
var_dump($a || $b); // Toán tử HOẶC (true)
var_dump(!$a); // Toán tử PHỦ ĐỊNH (false)
var_dump($a xor $b); // Toán tử XOR (true)
6. String Operators(Toán tử Chuỗi)
Toán tử chuỗi giúp thao tác và kết hợp chuỗi:
Toán tử | Tên | Ví dụ | Kết quả |
---|---|---|---|
. |
Nối chuỗi | $a . $b |
Kết hợp $a và $b |
.= |
Gán nối chuỗi | $a .= $b |
Thêm $b vào $a |
Ví dụ:
$greeting = "Hello";
$name = "World";
echo $greeting . " " . $name; // Nối chuỗi: "Hello World"
$greeting .= " PHP"; // Gán nối chuỗi: "Hello PHP"
7. Array Operators(Toán tử Mảng)
Toán tử mảng cho phép bạn kết hợp và so sánh các mảng:
Toán tử | Tên | Ví dụ |
---|---|---|
+ |
Hợp nhất | $a + $b |
== |
Bằng nhau | $a == $b |
=== |
Giống nhau | $a === $b |
Ví dụ:
$a = ["a" => 1, "b" => 2];
$b = ["c" => 3, "d" => 4];
print_r($a + $b);
var_dump($a + $b); // Hợp nhất mảng
var_dump($a == $b); // So sánh bằng nhau (false)
var_dump($a === $b); // So sánh giống nhau (false)
8. Assignment Operators(Toán tử Gán Điều kiện)
Toán tử null coalescing và toán tử ba ngôi cung cấp các gán điều kiện ngắn gọn:
Toán tử | Tên | Ví dụ | Mô tả |
---|---|---|---|
?: |
Ba ngôi | $a = $b ?: "default" |
Nếu $b đúng, $a = $b ; nếu không $a = "default" |
?? |
Null coalescing | $a = $b ?? "default" |
Nếu $b được đặt, $a = $b ; nếu không $a = "default" |
Ví dụ:
// Toán tử ba ngôi
$status = ($score > 60) ? 'Pass' : 'Fail';
// Toán tử null coalescing
$c = null;
$d = $c ?? "Default"; // Kết quả: Default
$username = $_GET['user'] ?? 'guest';
9. Toán tử Null-Safe (?->
)
Null-Safe: Truy cập An toàn vào Thuộc tính và Phương thức của Đối tượng
Được giới thiệu trong PHP 8.0, toán tử Null-Safe (?->) cung cấp cách tiếp cận thuộc tính và phương thức của đối tượng một cách clean và ngắn gọn hơn khi làm việc với các đối tượng có thể là null
. Nó giúp ngăn chặn lỗi "Trying to access property of non-object" (Cố gắng truy cập thuộc tính của đối tượng không tồn tại), thường gặp khi làm việc với các đối tượng có thể là null.
Cú pháp:
$object?->property;
$object?->method();
$object?->property?->property;
Cách hoạt động:
- Nếu đối tượng không phải
null
, thuộc tính hoặc phương thức được truy cập như bình thường. - Nếu đối tượng là
null
, biểu thức sẽ ngắt mạch và trả vềnull
.
Ví dụ:
class User {
public function getName() {
return "John";
}
}
$user = null;
$name = $user?->getName(); // An toàn: trả về null nếu $user là null
echo $name ?? "No user"; // Kết quả: No user
$user = new User();
$name = $user?->getName(); // An toàn: gọi getName() nếu $user không phải null
echo $name; // Kết quả: John
// Không sử dụng Toán tử Null-Safe Operator
if ($user !== null) {
echo $user->getName();
} else {
echo null;
}
// Không sử dụng Toán tử Null-Safe Operator
echo $user->getName(); // Error: Trying to access method on null object
10. Type Operators(Toán tử Kiểu)
Toán tử kiểu kiểm tra kiểu của một đối tượng.
class MyClass {}
$obj = new MyClass();
// instanceof kiểm tra nếu một đối tượng là một thể hiện của một lớp
var_dump($obj instanceof MyClass); // true
11. Bitwise Operators(Toán tử Bitwise)
Dành cho các trường hợp sử dụng nâng cao liên quan đến thao tác mức bit:
$a = 5; // Nhị phân: 101
$b = 3; // Nhị phân: 011
echo $a & $b; // Bitwise AND (1)
echo $a | $b; // Bitwise OR (7)
echo $a ^ $b; // Bitwise XOR (6)
echo ~$a; // Bitwise NOT (-6)
echo $a << 1; // Dịch trái (10)
echo $a >> 1; // Dịch phải (2)
Thực hành: Áp dụng những gì chúng ta đã học
- Tạo một tệp PHP mới có tên "lesson-operators.php"
- Viết một chương trình minh họa các toán tử khác nhau:
<?php
// Phép toán số học
$num1 = 20;
$num2 = 5;
// Tính toán và hiển thị kết quả
echo "Phép cộng: " . ($num1 + $num2) . "\n";
echo "Phép trừ: " . ($num1 - $num2) . "\n";
echo "Phép nhân: " . ($num1 * $num2) . "\n";
echo "Phép chia: " . ($num1 / $num2) . "\n";
// Phép so sánh
$x = 10;
$y = "10";
var_dump($x == $y); // So sánh lỏng
var_dump($x === $y); // So sánh chặt chẽ
// Phép logic
$a = true;
$b = false;
var_dump($a && $b); // Phép VÀ
var_dump($a || $b); // Phép HOẶC
// Nối chuỗi
$first = "Hello";
$second = "World";
echo $first . " " . $second;
echo PHP_EOL;
- Chạy tệp và quan sát kết quả
php lesson-operators.php
- Thử nghiệm với các giá trị và toán tử khác nhau
Bài tập này sẽ giúp củng cố hiểu biết của bạn về các toán tử PHP.
Kết luận
Làm chủ các toán tử PHP là rất quan trọng để viết mã hiệu quả và biểu cảm. Mỗi loại toán tử phục vụ một mục đích cụ thể, từ số học cơ bản đến đánh giá logic phức tạp. Thực hành và thử nghiệm sẽ giúp bạn sử dụng các toán tử này một cách hiệu quả trong hành trình phát triển PHP của mình.
Best Practices
- Luôn sử dụng so sánh chặt chẽ (
===
) khi có thể - Chú ý đến việc chuyển đổi kiểu
- Sử dụng dấu ngoặc đơn để làm rõ các biểu thức phức tạp
- Cân nhắc tính dễ đọc khi kết hợp các toán tử
- Cân nhắc đánh giá ngắn mạch khi sử dụng toán tử logic
Mẹo
Một số toán tử như ++
có thể nhanh hơn một chút so với phép cộng đầy đủ, nhưng ưu tiên tính dễ đọc của mã hơn là tối ưu hóa vi mô.