Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> PHP

Kiểu Union (Union Type) trong PHP 8

Sử dụng Union Type trong PHP 8, có thể dùng giá trị của hai hoặc nhiều kiểu, thay vì một kiểu đơn. Để chỉ định nhiều kiểu, dùng dấu gạch dọc (|) để nối.

Union type hỗ trợ tham số, kiểu trả về, và thuộc tính.

Cú pháp

type1|type2|...|type_n

Ví dụ 1: Union Type

<?php 
class Number {
    private int | float $num;
    public function getNum(): float | int {
        return $this->num;
    }
    public function setNum(float | int): void {
        $this->num = $num;
    }
}
?>

Ví dụ 2: Chương trình PHP 8 dùng Union Type

<?php 
class Number {
    private int|float $number;
    public function setNumber(int|float $number): void {
        $this->number = $number;
    }
    public function getNumber(): int|float {
        return $this->number;
    }
}
$number = new Number();
$number->setNumber(5);
print_r($number->getNumber());
$number->setNumber(11.54);
print_r($number->getNumber());
?>

Kết quả

5
11.54

Kiểu Nullable trong Union Type

Trong PHP 7.1, nullable type dùng dấu hỏi ?type. Trong PHP 8, khai báo nullable type là type|null. Ví dụ: float|int|null, nhưng không khai báo được ?float|int.

Cú pháp Nullable Types

type1|type2|null

Không nên khai báo như ?type1|type2 vì gây mơ hồ.

  • Kiểm tra lỗi tại compile-time - Trong PHP, union type trùng lặp hoặc dư thừa trong khai báo kiểu không được phép. Kiểm tra xảy ra lúc compile-time mà không cần autoload class/interface.

  • Không cho phép kiểu trùng lặp - Không khai báo trùng như int|int và int|?int cũng không được. Sẽ báo syntax error: "Fatal error: Duplicate type... is redundant in ... on line."

  • Kiểu void không được phép - Trong PHP 8, union type void không được kết hợp với kiểu khác.

Ví dụ

Function foo(): void|null{}

Kiểu False trong PHP 8

Kiểu False là một phần của Union type trong PHP 8. Thường dùng null làm giá trị trả về để chỉ sự vắng mặt của giá trị hoặc lỗi. Ví dụ: phương thức lớp tìm sinh viên theo ID. Nếu ID không có, có thể trả null. Nhưng PHP dùng false nếu Student ID không tìm thấy.

  • Kiểu False dùng cho thất bại thay vì null.

  • Không dùng false làm kiểu độc lập và nullable độc lập cũng không được. Nghĩa là không dùng false, false|null, ?false.

  • Có thể dùng false ở mọi nơi chấp nhận kiểu: tham số, thuộc tính, giá trị trả về.

  • Không có kiểu true literal, chỉ dùng bool.

Ví dụ

<?php 
class Student {
    public function find(int $id): User|false {
        // ...
    }
}
?>