Tìm thấy x bài viết trong xms.

Typed Properties - Kiểu dữ liệu cho thuộc tính

Typed Properties 2.0 RFC đã được chấp nhận với 70 phiếu bầu ủng hộ 70 và 1 phiếu bầu không ủng hộ. Cần hơn 2/3 số phiếu tán thành là điều bắt buộc, bởi vì sự xuất hiện của typed properties gần như là thay đổi ngôn ngữ PHP hiện tại và typed property được đề xuất thay đổi trong phiên bản PHP 7.4 sắp tới.

Với việc giới thiệu scalar types (loại vô hướng 🤔) và return types (kiểu trả về), PHP 7 đã tăng đáng kể sức mạnh cho PHP's type system (hệ thống kiểu của PHP). Tuy nhiên, hiện tại không thể khai báo các kiểu cho các thuộc tính trong lớp, buộc các nhà phát triển phải sử dụng các phương thức getter và setter để thực thi các type contracts (hợp đồng kiểu). Điều này đòi hỏi boilerplate (các đoạn code) không cần thiết, làm cho việc sử dụng ít gọn nhẹ hơn và làm giảm hiệu suất (xem code ví dụ ở dưới). RFC này giải quyết vấn đề này bằng cách giới thiệu sự hỗ trợ cho các first-class property type declarations (khai báo kiểu thuộc tính hạng nhất).

RFC cung cấp một ví dụ trong đó mục tiêu là thực thi an toàn kiểu (enforce type-safety):

class User {
    /** @var int $id */
    private $id;
    /** @var string $name */
    private $name;

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

    public function getId(): int {
        return $this->id;
    }
    public function setId(int $id): void {
        $this->id = $id;
    }

    public function getName(): string {
        return $this->name;
    }
    public function setName(string $name): void {
        $this->name = $name;
    }
}

Với RFC được chấp nhận mới, mã đó có thể có chức năng tương đương như sau "mà không bị mất an toàn kiểu":

class User {
    // 😝 wow type property
    public int $id;
    // 😱 awesome type property
    public string $name;

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

Cuối cùng, dưới đây là ví dụ về tất cả các kiểu hợp lệ được hỗ trợ trong chú thích được thực thi theo thời gian (runtime-enforced) cho typed properties:

class Example {
    // Toàn bộ các kiểu đều được hỗ trợ, ngoại trừ "void" và"callable" 
    public int $scalarType;
    protected ClassName $classType;
    private ?ClassName $nullableClassType;

    // Kiểu cũng hợp lệ trên các thuộc tính tĩnh
    public static iterable $staticProp;

    // Kiểu cũng có thể được sử dụng với ký hiệu/từ khóa "var"
    var bool $flag;

    // Typed properties có thể có các giá trị mặc định
    public string $str = "foo";
    public ?string $nullableStr = null;

    // Kiểu áp dụng cho tất cả các thuộc tính trong một lần khai báo
    public float $x, $y;
    // tương đương với:
    public float $x;
    public float $y;
}

Rõ ràng với 70 phiếu ủng hộ và 1 phiếu không ủng hộ nói lên rằng, nội bộ PHP muốn tiếp tục giới thiệu các tính năng kiểu (type features), chẳng hạn như an toàn kiểu (type-safety) vào ngôn ngữ PHP.

Để tìm hiểu thêm về Typed Properties thì các bạn vào trang này PHP RFC: Typed Properties 2.0 là nguồn thông tin chính xác nhất tại thời điểm này.

Tham khảo

Đánh giá bài viết

Thích thì like
Typed Properties sắp đến trong phiên bản PHP 7.4
5/5 1 votes

Bình luận

Ngọc đẹp trai avatar
Ngọc đẹp trai

Ghê ghê :))

Hiển thị bình luận Facebook