PHP 8: kiểu chữ hỗn hợp

Tram Ho

Trước khi PHP 8 ra đời, những khi bạn không chắc chắn về kiểu của thuộc tính hay giá trị trả về, chúng ta sẽ bỏ qua, không chỉ định kiểu cho chúng. Nếu bạn sử dụng một IDE như PHPStorm, dockBlock sẽ đánh dấu các thuộc tính đó với kiểu dữ liệu mixed.

Kiểu dữ liệu mixed

Điều này cũng có một vài lợi ích. Nhưng về cơ bản, nó không thực sự được kiểm tra kiểu bằng trình biên dịch của PHP.

Để giảm bớt vấn đề này, PHP 8 đã giới thiệu kiểu dữ liệu mixed, có thể sử dụng để gán cho thuộc tính hoặc giá trị trả về.

Về cơ bản, kiểu dữ liệu mixed sẽ tương đương với: array hoặc bool hoặc callable hoặc int hoặc float hoặc null hoặc object hoặc resource hoặc string. Vì vậy, bất cứ khi nào bạn không chắc chắn về kiểu dữ liệu, hãy sử dụng mixed.

Ví dụ bên trên có thể viết lại thành:

Và bây giờ, mọi thứ sẽ rõ ràng hơn. Và trình biên dịch của PHP biết sẽ phải làm gì với những thuộc tính/giá trị này.

Các quy tắc

Kiểu mixed không thể nullable

Bình thường khi muốn định kiểu dữ liệu hoặc null, chúng ta phải thêm dấu ? trước kiểu dữ liệu. Ví dụ:

Nhưng đối với kiểu mixed chúng ta không thể sử dụng như vậy. Bởi vì kiểu mixed đã bao gồm null.

Phải có giá trị trả về cho return kiểu mixed

Khi sử dụng kiểu return là mixed, một giá trị phải được trả về.

Kiểu của thuộc tính có thể mở rộng khi kế thừa

Một thuộc tính có kiểu dữ liệu bất kỳ trong class cha có thể mở rộng thành mixed trong class con.

Nhưng ngược lại thì không được.

Kiểu của return có thể thu hẹp khi kế thừa

Ngược lại với kiểu thuộc tính, một method có kiểu trả về là mixed trong class cha có thể thu hẹp thành kiểu bất kỳ trong class con.

Ngược lại thì không hợp lệ.

Giả định kiểu dữ liệu mixed nếu không có kiểu dữ liệu nào được chỉ định

Khi không có kiểu nào được chỉ định, việc kiểm tra kiểu khi kế thừa được thực hiện giống với kiểu mixed.

Kiểm tra kiểu return nếu không được chỉ định

Khi không có kiểu return nào được chỉ định, việc kiểm tra kiểu khi kế thừa được thực hiện giống với kiểu mixed hoặc void.

Tham khảo:

https://wiki.php.net/rfc/mixed_type_v2

https://wiki.php.net/rfc/mixed-typehint

Cảm ơn các bạn đã đọc bài viết!

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo