PHP - Return Type Declarations

Xin chào các bạn đang theo đuổi 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 của PHP và khám phá một khái niệm tuyệt vời gọi là Return Type Declarations. Đừng lo lắng nếu bạn mới bắt đầu lập trình; tôi sẽ hướng dẫn bạn từng bước, giống như tôi đã làm cho học sinh của mình trong nhiều năm qua. Vậy, hãy lấy một tách cà phê và cùng nhau bắt đầu!

PHP - Return Type Declarations

Return Type Declarations là gì?

Trước khi chúng ta đi vào chi tiết, hãy hiểu qua về Return Type Declarations là gì. Nói đơn giản, nó là cách để thông báo cho PHP biết một hàm sẽ trả về loại dữ liệu nào. Nó giống như dán nhãn vào một hộp, nói "Hộp này chứa đồ chơi" hoặc "Hộp này chứa sách." Điều này giúp PHP (và các lập trình viên khác) biết họ có thể kỳ vọng điều gì khi sử dụng hàm của bạn.

Tại sao chúng lại quan trọng?

  1. Sự rõ ràng: Nó làm cho mã của bạn dễ hiểu hơn.
  2. Ngăn ngừa lỗi: PHP có thể phát hiện lỗi sớm nếu bạn cố gắng trả về loại dữ liệu sai.
  3. Tài liệu hóa tốt hơn: Nó giống như để lại một lời nhắc cho tương lai bạn (hoặc các nhà phát triển khác).

Bây giờ, hãy xem một số ví dụ để thấy cách này hoạt động trong thực tế.

Ví dụ cơ bản: Trả về một số nguyên

Hãy bắt đầu với một hàm đơn giản để cộng hai số:

function addNumbers(int $a, int $b): int
{
    return $a + $b;
}

$result = addNumbers(5, 3);
echo $result; // Output: 8

Trong ví dụ này, : int sau dấu phẩy kép của hàm là khai báo kiểu trả về. Nó thông báo cho PHP biết rằng hàm này sẽ luôn trả về một số nguyên.

Phân tích:

  1. function addNumbers(int $a, int $b): Đây là khai báo của một hàm nhận hai tham số nguyên.
  2. : int: Đây là khai báo kiểu trả về, hứa rằng hàm sẽ trả về một số nguyên.
  3. return $a + $b: Hàm cộng hai số và trả về kết quả.

Nếu chúng ta cố gắng trả về một thứ không phải là số nguyên, PHP sẽ ném ra một lỗi. Điều này giúp phát hiện lỗi sớm!

Ví dụ: Trả về một chuỗi

Hãy thử một ví dụ khác, lần này trả về một chuỗi:

function greet(string $name): string
{
    return "Hello, $name!";
}

$greeting = greet("Alice");
echo $greeting; // Output: Hello, Alice!

Ở đây, : string thông báo cho PHP biết rằng hàm của chúng ta sẽ luôn trả về một chuỗi.

Ví dụ: Trả về một mảng

Mảng rất hữu ích trong PHP. Dưới đây là cách chúng ta có thể sử dụng khai báo kiểu trả về với một mảng:

function getFavoriteColors(): array
{
    return ["blue", "green", "purple"];
}

$colors = getFavoriteColors();
print_r($colors);
// Output:
// Array
// (
//     [0] => blue
//     [1] => green
//     [2] => purple
// )

Khai báo : array đảm bảo rằng hàm này sẽ luôn trả về một mảng.

Ví dụ: Trả về một boolean

Boolean rất hữu ích cho các hàm kiểm tra điều kiện. Dưới đây là một ví dụ:

function isEven(int $number): bool
{
    return $number % 2 === 0;
}

$checkEven = isEven(4);
var_dump($checkEven); // Output: bool(true)

$checkOdd = isEven(7);
var_dump($checkOdd); // Output: bool(false)

Khai báo : bool thông báo cho PHP biết rằng hàm này sẽ luôn trả về true hoặc false.

Ví dụ: Trả về một đối tượng

Đối tượng là một chút phức tạp hơn, nhưng chúng rất mạnh mẽ. Dưới đây là một ví dụ đơn giản:

class Person {
    public $name;
    public $age;

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

function createPerson(string $name, int $age): Person
{
    return new Person($name, $age);
}

$alice = createPerson("Alice", 30);
echo $alice->name; // Output: Alice
echo $alice->age;  // Output: 30

Ở đây, : Person thông báo cho PHP biết rằng hàm này sẽ luôn trả về một đối tượng của lớp Person.

Kiểu trả về có thể null

Đôi khi, một hàm có thể không luôn trả về một giá trị. Trong những trường hợp như vậy, chúng ta có thể sử dụng kiểu trả về có thể null:

function findUser(int $id): ?string
{
    $users = ["1" => "Alice", "2" => "Bob", "3" => "Charlie"];
    return $users[$id] ?? null;
}

$user = findUser(2);
echo $user; // Output: Bob

$nonExistentUser = findUser(4);
var_dump($nonExistentUser); // Output: NULL

Kiểu ?string có nghĩa là hàm này sẽ trả về hoặc một chuỗi hoặc null.

Kiểu hợp nhất (PHP 8.0+)

Trong PHP 8.0 và sau, bạn có thể chỉ định nhiều kiểu trả về khả thi:

function processInput(string $input): int|float
{
    if (strpos($input, '.') !== false) {
        return floatval($input);
    }
    return intval($input);
}

$intResult = processInput("42");
var_dump($intResult); // Output: int(42)

$floatResult = processInput("3.14");
var_dump($floatResult); // Output: float(3.14)

Kiểu int|float có nghĩa là hàm này có thể trả về hoặc một số nguyên hoặc một số float.

Kết luận

Return Type Declarations giống như đặt các biển chỉ đường trong mã của bạn. Chúng hướng dẫn bạn và những người khác, làm rõ ý định của bạn và giúp ngăn ngừa lỗi. Khi bạn tiếp tục hành trình với PHP, bạn sẽ thấy chúng vô cùng hữu ích cho việc viết mã sạch sẽ và đáng tin cậy hơn.

Nhớ rằng, lập trình là một kỹ năng phát triển qua thực hành. Đừng nản lòng nếu nó không ngay lập tức hiểu được. Hãy tiếp tục lập trình, tiếp tục thử nghiệm, và quan trọng nhất, hãy tiếp tục vui vẻ!

Dưới đây là bảng tóm tắt các kiểu trả về chúng ta đã xem xét:

Kiểu Trả Về Mô Tả Ví Dụ
int Số nguyên : int
float Số dấu phẩy động : float
string Chuỗi : string
bool Boolean : bool
array Mảng : array
object Đối tượng (ví dụ: : Person) : ClassName
?type Kiểu có thể null : ?string
type1|type2 Kiểu hợp nhất (PHP 8.0+) : int\|float

Chúc các bạn lập trình vui vẻ, những nhà vô địch PHP tương lai!

Credits: Image by storyset