Typed Properties sắp đến trong phiên bản PHP 7.4
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.
Ủng hộ Chung Nguyễn Blog
Chung Nguyễn Blog sử dụng FlashVPS - Dịch vụ quản trị máy chủ chuyên nghiệp để quản lý VPS
#FlashVPS là dịch vụ cloud panel trên nền tảng web hỗ trợ khách hàng:
- * Quản lý máy chủ số lượng nhiều
- * Không có kinh nghiệm quản lý máy chủ
- * Thích sử dụng giao diện web đơn giản, trực quan hơn terminal
- * Quá nhàm chán với việc ghi nhớ và lặp lại việc gõ các câu lệnh
- * Muốn tự động hóa mọi thao tác
- * Muốn tiết kiệm thời gian quản trị máy chủ
- * Muốn tiết kiệm tiền bạc, nhân lực quản trị máy chủ 👉 https://flashvps.dev
Các bài viết trên website thường xuyên được đăng tải và cập nhật trên trang Facebook Chung Nguyễn Blog hãy tặng cho Chung một LIKE nhé! Mãi yêu các bạn!
813 👍
Bình luận
Ngọc đẹp trai
Ghê ghê :))