PHP - Оператор_spaceship

Xin chào các bạn đang học lập trình! Hôm nay, chúng ta sẽ bắt đầu một chuyến hành trình thú vị vào thế giới PHP và khám phá một оператор nhỏ nhưng đầy thú vị叫做 Spaceship Operator. Đừng lo lắng nếu bạn chưa từng viết một dòng mã trước đây - tôi sẽ là người hướng dẫn thân thiện của bạn trong chuyến phiêu lưu này, và cuối cùng, bạn sẽ điều khiển con tàu này như một chuyên gia!

PHP - Spaceship Operator

什么是Spaceship Operator?

Trước khi chúng ta đi vào chi tiết, hãy nói về Spaceship Operator thực sự là gì. Trong PHP, Spaceship Operator được biểu thị bởi <=>. Đúng vậy, nó trông giống như một con tàu nhỏ, vì vậy mà có tên như vậy! Đây là một оператор so sánh được giới thiệu trong PHP 7.0 để làm cho cuộc sống của chúng ta như những nhà lập trình trở nên dễ dàng hơn.

Hãy nghĩ về nó như một cách siêu hiệu quả để so sánh hai giá trị. Nó giống như có một mini-máy tính trong mã của bạn có thể nhanh chóng cho bạn biết một giá trị nhỏ hơn, bằng hoặc lớn hơn giá trị khác. Đ酷, phải không?

Cú pháp

Cú pháp của Spaceship Operator rất đơn giản:

$result = $a <=> $b;

Dưới đây là những gì nó làm:

  • Nếu $a nhỏ hơn $b, nó trả về -1
  • Nếu $a bằng $b, nó trả về 0
  • Nếu $a lớn hơn $b, nó trả về 1

Nó giống như một robot nhỏ nhìn vào hai giá trị và đưa ra cho bạn một bản tóm tắt nhanh về cách chúng so sánh với nhau. Bây giờ, hãy xem оператор này trong hành động với một số ví dụ!

Ví dụ 1: So sánh số

Hãy bắt đầu với một điều đơn giản - so sánh số.

<?php
$result1 = 5 <=> 10;
echo "5 <=> 10 = $result1\n";

$result2 = 10 <=> 5;
echo "10 <=> 5 = $result2\n";

$result3 = 5 <=> 5;
echo "5 <=> 5 = $result3\n";
?>

Kết quả:

5 <=> 10 = -1
10 <=> 5 = 1
5 <=> 5 = 0

Trong ví dụ này, chúng ta đang so sánh các số khác nhau:

  1. 5 nhỏ hơn 10, vì vậy nó trả về -1
  2. 10 lớn hơn 5, vì vậy nó trả về 1
  3. 5 bằng 5, vì vậy nó trả về 0

Xem nhanh chóng chúng ta có thể xác định mối quan hệ giữa các số này? Đó là như có một phù thủy toán học trong mã của chúng ta!

Ví dụ 2: So sánh chuỗi

Spaceship Operator không chỉ dành cho số - nó cũng hoạt động với chuỗi!

<?php
$result1 = "apple" <=> "banana";
echo "'apple' <=> 'banana' = $result1\n";

$result2 = "zebra" <=> "aardvark";
echo "'zebra' <=> 'aardvark' = $result2\n";

$result3 = "hello" <=> "hello";
echo "'hello' <=> 'hello' = $result3\n";
?>

Kết quả:

'apple' <=> 'banana' = -1
'zebra' <=> 'aardvark' = 1
'hello' <=> 'hello' = 0

Dưới đây là những gì đang xảy ra:

  1. "apple" đứng trước "banana" theo bảng chữ cái, vì vậy nó trả về -1
  2. "zebra" đứng sau "aardvark" theo bảng chữ cái, vì vậy nó trả về 1
  3. "hello" bằng "hello", vì vậy nó trả về 0

Nó giống như có một thư viện viên có thể ngay lập tức告诉 bạn cách sắp xếp sách của bạn!

Ví dụ 3: So sánh mảng

Bây giờ, hãy nâng cấp và sử dụng Spaceship Operator với mảng. Đây là nơi mọi thứ trở nên thực sự thú vị!

<?php
$array1 = [1, 2, 3];
$array2 = [1, 2, 4];
$array3 = [1, 2, 3];

$result1 = $array1 <=> $array2;
echo "[1, 2, 3] <=> [1, 2, 4] = $result1\n";

$result2 = $array2 <=> $array1;
echo "[1, 2, 4] <=> [1, 2, 3] = $result2\n";

$result3 = $array1 <=> $array3;
echo "[1, 2, 3] <=> [1, 2, 3] = $result3\n";
?>

Kết quả:

[1, 2, 3] <=> [1, 2, 4] = -1
[1, 2, 4] <=> [1, 2, 3] = 1
[1, 2, 3] <=> [1, 2, 3] = 0

Dưới đây là những gì đang xảy ra:

  1. [1, 2, 3] được coi là nhỏ hơn [1, 2, 4] vì hai phần tử đầu tiên là相同的, nhưng phần tử thứ ba của mảng đầu tiên (3) nhỏ hơn phần tử thứ ba của mảng thứ hai (4).
  2. [1, 2, 4] được coi là lớn hơn [1, 2, 3] vì cùng một lý do như trên, nhưng ngược lại.
  3. [1, 2, 3] bằng [1, 2, 3] vì tất cả các phần tử là相同的.

Nó giống như có một máy so sánh mảng siêu hiệu quả!

Ví dụ 4: Sắp xếp với Spaceship Operator

Một trong những ứng dụng thú vị nhất của Spaceship Operator là trong việc sắp xếp. Hãy xem chúng ta có thể sử dụng nó để sắp xếp một mảng số.

<?php
$numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3];

usort($numbers, function($a, $b) {
return $a <=> $b;
});

echo "Sorted numbers: " . implode(', ', $numbers) . "\n";

usort($numbers, function($a, $b) {
return $b <=> $a;
});

echo "Reverse sorted numbers: " . implode(', ', $numbers) . "\n";
?>

Kết quả:

Sorted numbers: 1, 1, 2, 3, 3, 4, 5, 5, 6, 9
Reverse sorted numbers: 9, 6, 5, 5, 4, 3, 3, 2, 1, 1

Trong ví dụ này, chúng ta đang sử dụng hàm usort cùng với Spaceship Operator để sắp xếp mảng. Hàm usort sử dụng một hàm so sánh để xác định thứ tự của các phần tử. Bằng cách sử dụng $a <=> $b, chúng ta sắp xếp theo thứ tự tăng dần, và bằng cách sử dụng $b <=> $a, chúng ta sắp xếp theo thứ tự giảm dần.

Nó giống như có một mũ sắp xếp từ Harry Potter, nhưng cho số!

Ví dụ 5: Sắp xếp các đối tượng phức tạp

Bây giờ, hãy nâng cấp thêm một bước và sử dụng Spaceship Operator để sắp xếp một mảng các đối tượng.

<?php
class Person {
public $name;
public $age;

public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}

$people = [
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 35),
new Person("David", 28)
];

usort($people, function($a, $b) {
return $a->age <=> $b->age;
});

echo "Sorted by age:\n";
foreach ($people as $person) {
echo $person->name . " - " . $person->age . "\n";
}

usort($people, function($a, $b) {
return $a->name <=> $b->name;
});

echo "\nSorted by name:\n";
foreach ($people as $person) {
echo $person->name . " - " . $person->age . "\n";
}
?>

Kết quả:

Sorted by age:
Bob - 25
David - 28
Alice - 30
Charlie - 35

Sorted by name:
Alice - 30
Bob - 25
Charlie - 35
David - 28

Trong ví dụ này, chúng ta đã tạo một lớp Person với các thuộc tính nameage. Sau đó, chúng ta sử dụng Spaceship Operator để sắp xếp một mảng các đối tượng Person, trước tiên theo tuổi và sau đó theo tên.

Nó giống như có một bộ phận nhân sự siêu hiệu quả có thể ngay lập tức tổ chức cơ sở dữ liệu nhân viên của bạn!

Spaceship Operator với các operand boolean

Cuối cùng, hãy xem Spaceship Operator hành xử như thế nào với các giá trị boolean.

<?php
$result1 = true <=> false;
echo "true <=> false = $result1\n";

$result2 = false <=> true;
echo "false <=> true = $result2\n";

$result3 = true <=> true;
echo "true <=> true = $result3\n";
?>

Kết quả:

true <=> false = 1
false <=> true = -1
true <=> true = 0

Khi so sánh các giá trị boolean:

  • true được coi là lớn hơn false
  • false được coi là nhỏ hơn true
  • true bằng true, và false bằng false

Nó giống như có một máy phát hiện sự thật trong mã của bạn!

Tóm tắt

Để kết thúc chuyến hành trình của chúng ta với Spaceship Operator, hãy tóm tắt các ứng dụng khác nhau của nó trong một bảng tiện lợi:

Use Case Example Result
Numbers 5 <=> 10 -1
Strings "apple" <=> "banana" -1
Arrays [1, 2, 3] <=> [1, 2, 4] -1
Sorting usort($array, fn($a, $b) => $a <=> $b) Sorts in ascending order
Objects $person1->age <=> $person2->age Compares object properties
Booleans true <=> false 1

Và thế là, các ngôi sao lập trình tương lai! Bạn đã thành thạoSpaceship Operator trong PHP. Nhớ rằng, như bất kỳ phi công tàu vũ trụ nào, việc thực hành sẽ làm cho bạn trở nên hoàn hảo. Vậy, đừng ngần ngại thử nghiệm với operato

Credits: Image by storyset