Các khai báo kiểu có thể được thêm vào các đối số hàm, giá trị trả về và kể từ PHP 7. 4. 0, thuộc tính lớp. Họ đảm bảo rằng giá trị thuộc loại được chỉ định tại thời điểm gọi, nếu không thì TypeError sẽ bị ném
Mọi loại đơn lẻ mà PHP hỗ trợ, ngoại trừ tài nguyên đều có thể được sử dụng trong khai báo loại đất của người dùng. Trang này chứa nhật ký thay đổi về tính khả dụng của các loại khác nhau và tài liệu về việc sử dụng chúng trong khai báo loại
Ghi chú
Khi một lớp triển khai một phương thức giao diện hoặc triển khai lại một phương thức đã được định nghĩa bởi lớp cha, thì nó phải tương thích với định nghĩa đã nói ở trên. Một phương pháp là tương thích nếu nó tuân theo các quy tắc phương sai
Nhật ký thay đổi
Phiên bảnMô tả8. 2. 0Hỗ trợ cho các loại DNF đã được thêm vào. 8. 2. 0Hỗ trợ cho kiểu chữ đúng đã được thêm vào. 8. 2. 0Các loại null và false hiện có thể được sử dụng độc lập. 8. 1. 0Hỗ trợ cho các loại giao lộ đã được thêm vào. 8. 1. 0Trở về theo tham chiếu từ hàm void hiện không được dùng nữa. 8. 1. 0Hỗ trợ cho loại chỉ trả lại chưa bao giờ được thêm vào. 8. 0. 0Hỗ trợ hỗn hợp đã được thêm vào. 8. 0. 0Hỗ trợ cho kiểu tĩnh chỉ trả lại đã được thêm vào. 8. 0. 0Hỗ trợ cho các loại công đoàn đã được thêm vào. 7. 2. 0Hỗ trợ cho đối tượng đã được thêm vào. 7. 1. 0Hỗ trợ cho iterable đã được thêm vào. 7. 1. 0Hỗ trợ cho khoảng trống đã được thêm vào. 7. 1. 0Hỗ trợ cho các loại nullable đã được thêm vàoCác loại cơ sở Ghi chú sử dụng
Các loại cơ sở có hành vi đơn giản với một số cảnh báo nhỏ được mô tả trong phần này
các loại vô hướng
Cảnh báo
Bí danh tên cho các loại vô hướng [bool, int, float, string] không được hỗ trợ. Thay vào đó, chúng được coi là tên lớp hoặc giao diện. Ví dụ: sử dụng
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 24 làm khai báo kiểu sẽ yêu cầu giá trị phải là lớp hoặc giao diện
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 25
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 24, thay vì kiểu bool
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 27
Đầu ra của ví dụ trên trong PHP 8
Warning: "boolean" will be interpreted as a class name. Did you mean "bool"? Write "\boolean" to suppress this warning in /in/9YrUX on line 2 Fatal error: Uncaught TypeError: test[]: Argument #1 [$param] must be of type boolean, bool given, called in - on line 3 and defined in -:2 Stack trace: #0 -[3]: test[true] #1 {main} thrown in - on line 2
khoảng trống
Ghi chú
Trả về bằng tham chiếu từ hàm void không được dùng kể từ PHP 8. 1. 0, bởi vì một chức năng như vậy là mâu thuẫn. Trước đây, nó đã phát ra
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 20 sau đây khi được gọi.int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 21int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 22
các loại có thể gọi
Loại này không thể được sử dụng làm khai báo loại thuộc tính lớp
Ghi chú. Không thể chỉ định chữ ký của chức năng
Loại khai báo trên các tham số truyền qua tham chiếu
Nếu tham số chuyển qua tham chiếu có khai báo kiểu, thì kiểu của biến chỉ được kiểm tra khi nhập hàm, khi bắt đầu gọi, chứ không phải khi hàm trả về. Điều này có nghĩa là một hàm có thể thay đổi kiểu tham chiếu của biến
Ví dụ #1 Tham số truyền qua tham chiếu đã nhập
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 23
Ví dụ trên sẽ xuất ra một cái gì đó tương tự như
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 2
Loại tổng hợp Ghi chú sử dụng
Các khai báo kiểu tổng hợp phải tuân theo một số hạn chế và sẽ thực hiện kiểm tra dự phòng tại thời điểm biên dịch để ngăn các lỗi đơn giản
thận trọng
Trước PHP 8. 2. 0 và việc giới thiệu các loại DNF, không thể kết hợp các loại giao nhau với các loại liên kết
các loại công đoàn
Cảnh báo
Không thể kết hợp hai loại chữ
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 24 và
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 25 với nhau trong một loại kết hợp. Sử dụng bool thay thế
thận trọng
Trước PHP 8. 2. 0, vì
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 24 và null không thể được sử dụng làm loại độc lập, loại hợp nhất chỉ bao gồm các loại này không được phép. Điều này bao gồm các loại sau.
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 24,
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 28 và
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 29
Nullable loại cú pháp đường
Một khai báo loại cơ sở duy nhất có thể được đánh dấu là vô giá trị bằng cách đặt trước loại có dấu chấm hỏi [
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 220]. Do đó,
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 221 và
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 222 giống hệt nhau
Ghi chú. Cú pháp này được hỗ trợ kể từ PHP 7. 1. 0 và có trước hỗ trợ các kiểu kết hợp tổng quát
Ghi chú
Cũng có thể đạt được các đối số nullable bằng cách đặt giá trị mặc định là
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 223. Điều này không được khuyến nghị vì nếu giá trị mặc định bị thay đổi trong một lớp con, một vi phạm tương thích kiểu sẽ được nêu ra vì kiểu null sẽ cần được thêm vào khai báo kiểuVí dụ #2 Cách cũ để biến các đối số thành null
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 224int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 225int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 226Ví dụ trên sẽ xuất ra
Các loại trùng lặp và dư thừa
Để bắt các lỗi đơn giản trong khai báo kiểu tổng hợp, các kiểu dư thừa có thể được phát hiện mà không thực hiện tải lớp sẽ dẫn đến lỗi thời gian biên dịch. Điêu nay bao gôm
- Mỗi loại giải quyết tên chỉ có thể xảy ra một lần. Các loại như
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 2
27 hoặcint[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 2
28 dẫn đến lỗi - Sử dụng kết quả hỗn hợp trong một lỗi
- Đối với các loại công đoàn
- Nếu bool được sử dụng, false hoặc true không thể được sử dụng bổ sung
- Nếu đối tượng được sử dụng, các loại lớp không thể được sử dụng bổ sung
- Nếu iterable được sử dụng, mảng và Traversable không thể được sử dụng bổ sung
- Đối với các loại giao lộ
- Sử dụng loại không phải là loại lớp dẫn đến lỗi
- Sử dụng bản thân, cha mẹ hoặc tĩnh dẫn đến lỗi
- Đối với các loại DNF
- Nếu một loại chung chung hơn được sử dụng, thì loại hạn chế hơn sẽ không cần thiết
- Sử dụng hai loại giao lộ giống hệt nhau
Ghi chú. Điều này không đảm bảo rằng loại là "tối thiểu", vì làm như vậy sẽ yêu cầu tải tất cả các loại lớp đã sử dụng
Ví dụ: nếu
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 229 và
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 220 là bí danh của lớp, thì
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 221 vẫn là một loại liên kết hợp pháp, mặc dù nó có thể được rút gọn thành
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 229 hoặc
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 220. Tương tự, nếu lớp
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 224, thì
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 221 cũng là một loại liên minh hợp pháp, mặc dù nó có thể được giảm xuống chỉ còn
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 229
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 227
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 228
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 229
ví dụ
Ví dụ #3 Khai báo kiểu lớp cơ bản
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 220
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 221
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 222
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 223
Đầu ra của ví dụ trên trong PHP 8
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 22
Ví dụ #4 Khai báo kiểu giao diện cơ bản
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 224
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 225
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 226
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 227
Đầu ra của ví dụ trên trong PHP 8
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 22
Ví dụ #5 Khai báo kiểu trả về cơ bản
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 228
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 229
Ví dụ trên sẽ xuất ra
Ví dụ #6 Trả về một đối tượng
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 224
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 251
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 252
Ví dụ trên sẽ xuất ra
Ví dụ #7 Khai báo kiểu đối số nullable
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 224
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 254
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 226
Ví dụ trên sẽ xuất ra
Ví dụ #8 Khai báo kiểu trả về Nullable
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 256
đánh máy nghiêm ngặt
Theo mặc định, PHP sẽ ép buộc các giá trị của loại sai vào khai báo loại vô hướng dự kiến nếu có thể. Ví dụ: một hàm được cung cấp một int cho một tham số mong đợi một chuỗi sẽ nhận được một biến kiểu chuỗi
Có thể bật chế độ nghiêm ngặt trên cơ sở từng tệp. Ở chế độ nghiêm ngặt, chỉ một giá trị tương ứng chính xác với khai báo kiểu mới được chấp nhận, nếu không TypeError sẽ bị ném. Ngoại lệ duy nhất cho quy tắc này là một giá trị int sẽ vượt qua một khai báo kiểu float
Cảnh báo
Các lời gọi hàm từ bên trong các hàm bên trong sẽ không bị ảnh hưởng bởi khai báo
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 257
Để kích hoạt chế độ nghiêm ngặt, câu lệnh
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 258 được sử dụng với khai báo
int[1] Fatal error: Uncaught TypeError: array_baz[]: Argument #1 [$param] must be of type array, int given, called in - on line 9 and defined in -:2 Stack trace: #0 -[9]: array_baz[1] #1 {main} thrown in - on line 257
Ghi chú
Nhập nghiêm ngặt áp dụng cho các lệnh gọi hàm được thực hiện từ bên trong tệp có bật tính năng nhập nghiêm ngặt, không áp dụng cho các hàm được khai báo trong tệp đó. Nếu một tệp không được kích hoạt kiểu gõ nghiêm ngặt thực hiện lệnh gọi đến một hàm được xác định trong tệp có kiểu gõ nghiêm ngặt, tùy chọn của người gọi [gõ cưỡng chế] sẽ được tôn trọng và giá trị sẽ bị ép buộc
Có bao nhiêu hàm PHP?
PHP có hơn 700 hàm được tích hợp để thực hiện các tác vụ khác nhauCác hàm đầu ra khác nhau trong PHP là gì?
Hàm kiểm soát đầu ra PHPTên hàm trong PHP là gì?
Tên hàm tuân theo các quy tắc giống như các nhãn khác trong PHP. Tên hàm hợp lệ bắt đầu bằng một chữ cái hoặc dấu gạch dưới, theo sau là một số chữ cái, số hoặc dấu gạch dưới bất kỳ . Là một biểu thức chính quy, nó sẽ được thể hiện như vậy. ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$.Tại sao các chức năng được sử dụng trong PHP?
Các chức năng của PHP tương tự như các ngôn ngữ lập trình khác. Hàm là một đoạn mã nhận thêm một đầu vào ở dạng tham số và thực hiện một số xử lý rồi trả về một giá trị