Site logo

PHP Development

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$b
- Phép trừ $a - $b Hiệu của $a$b
* Phép nhân $a * $b Tích của $a$b
/ Phép chia $a / $b Thương của $a$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ả
&& $a && $b true nếu cả $a$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$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

  1. Tạo một tệp PHP mới có tên "lesson-operators.php"
  2. 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;
  1. Chạy tệp và quan sát kết quả
php lesson-operators.php

PHP Operators

  1. 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ô.