Nhập gợi ý trong tham số hàm PHP và trả về giá trị, thuộc tính và hằng số
Tham số hàm và kiểu trả về
mảng
declare[strict_types=1];
7PHP 5. 1+ví dụdeclare[strict_types=1];
8PHP 5. 1+ví dụdeclare[strict_types=1];
9PHP 7. 1+ví dụdeclare[strict_types=1];
0PHP 7. 0+ví dụdeclare[strict_types=1];
1PHP 7. 1+ví dụbool
declare[strict_types=1];
2PHP 7. 0+ví dụdeclare[strict_types=1];
3PHP 7. 0+ví dụdeclare[strict_types=1];
4PHP 7. 1+ví dụdeclare[strict_types=1];
5PHP 7. 0+ví dụdeclare[strict_types=1];
6PHP 7. 1+ví dụgọi được
declare[strict_types=1];
80PHP 5. 4+ví dụdeclare[strict_types=1];
81PHP 5. 4+ví dụdeclare[strict_types=1];
82PHP 7. 1+ví dụdeclare[strict_types=1];
83PHP 7. 0+ví dụdeclare[strict_types=1];
84PHP 7. 1+ví dụtrôi nổi
declare[strict_types=1];
85PHP 7. 0+ví dụdeclare[strict_types=1];
86PHP 7. 0+ví dụdeclare[strict_types=1];
87PHP 7. 1+ví dụdeclare[strict_types=1];
88PHP 7. 0+ví dụdeclare[strict_types=1];
89PHP 7. 1+ví dụint
declare[strict_types=1];
90PHP 7. 0+ví dụdeclare[strict_types=1];
91PHP 7. 0+ví dụdeclare[strict_types=1];
92PHP 7. 1+ví dụdeclare[strict_types=1];
93PHP 7. 0+ví dụdeclare[strict_types=1];
94PHP 7. 1+ví dụlặp đi lặp lại
declare[strict_types=1];
95PHP 7. 1+ví dụdeclare[strict_types=1];
96PHP 7. 1+ví dụdeclare[strict_types=1];
97PHP 7. 1+ví dụdeclare[strict_types=1];
98PHP 7. 1+ví dụdeclare[strict_types=1];
99PHP 7. 1+ví dụvật
declare[strict_types=1];
00PHP 7. 2+ví dụdeclare[strict_types=1];
01PHP 7. 2+ví dụdeclare[strict_types=1];
02PHP 7. 2+ví dụdeclare[strict_types=1];
03PHP 7. 2+ví dụdeclare[strict_types=1];
04PHP 7. 2+ ví dụbản thân
declare[strict_types=1];
05PHP 5. 0+ví dụdeclare[strict_types=1];
06PHP 5. 1+ví dụdeclare[strict_types=1];
07PHP 7. 1+ví dụdeclare[strict_types=1];
08PHP 7. 0+ví dụdeclare[strict_types=1];
09PHP 7. 1+ví dụchuỗi
declare[strict_types=1];
10PHP 7. 0+ví dụdeclare[strict_types=1];
11PHP 7. 0+ví dụdeclare[strict_types=1];
12PHP 7. 1+ví dụdeclare[strict_types=1];
13PHP 7. 0+ví dụdeclare[strict_types=1];
14PHP 7. 1+ví dụtên lớp
declare[strict_types=1];
15PHP 5. 0+ví dụdeclare[strict_types=1];
16PHP 5. 1+ví dụdeclare[strict_types=1];
17PHP 7. 1+ví dụdeclare[strict_types=1];
18PHP 7. 0+ví dụdeclare[strict_types=1];
19PHP 7. 1+ví dụkhoảng trống
declare[strict_types=1];
20PHP 7. 1+ví dụboolean, gấp đôi, số nguyên, tài nguyên, tĩnh
Chưa bao giờ được công nhận là hợp lệ cho gợi ý loạiví dụ 1ví dụ 2
ví dụ 3
Hằng số lớp
hiển thị
declare[strict_types=1];
21PHP 5. 0+ví dụdeclare[strict_types=1];
22PHP 7. 1+ví dụdeclare[strict_types=1];
23PHP 7. 1+ví dụdeclare[strict_types=1];
24PHP 7. 1+ví dụcác loại
declare[strict_types=1];
25không bao giờví dụThuộc tính lớp
hiển thị
declare[strict_types=1];
26PHP 4. 3+ví dụdeclare[strict_types=1];
27PHP 5. 0+ví dụdeclare[strict_types=1];
28PHP 5. 0+ví dụdeclare[strict_types=1];
29PHP 5. 0+ví dụcác loại
declare[strict_types=1];
30PHP 7.4+exampledeclare[strict_types=1];
31PHP 7.4+example Gợi ý kiểu có nghĩa là một kiểu giá trị nhất định có thể được gán cho một đối số của hàm, một biến lớp hoặc giá trị trả về của một hàm hoặc phương thức lớp. PHP chưa cung cấp hỗ trợ gợi ý kiểu cho các biến toàn cục và biến cục bộ, kể cả trong phiên bản 8
Gợi ý loại phục vụ hai mục đích cơ bản trong mã
- Cải thiện tính toàn vẹn của dữ liệu và mã. Với gợi ý kiểu, việc lạm dụng các chức năng bằng cách chuyển ore trả về các giá trị sai kiểu sẽ khó khăn hơn. Ngoài ra, nhu cầu sử dụng kiểm tra loại rõ ràng trong mã [
9] có thể được giảm xuống mức tối thiểufunction getOptions[] : ?array { ... if [...] { return null; } ... } $aOptions = getOptions[]; foreach [$aOptions as $option] { ... }
- Tăng khả năng đọc mã. Nó trở nên rõ ràng hơn về các loại giá trị mà một hàm chấp nhận và những gì nó trả về. Vì vậy, điều đó sẽ giúp bạn làm việc hiệu quả hơn khi làm việc theo nhóm, cũng như nó có thể làm cho mã cũ của bạn minh bạch hơn
Tại sao sử dụng gợi ý loại
Bản thân PHP là một ngôn ngữ lập trình không cần gõ, tôi. e. PHP xác định loại nào [văn bản, số, v.v. ] có một biến, thuộc tính lớp, đối số hoặc giá trị trả về của hàm và đặt giá trị này cho phù hợp
Bắt đầu với PHP phiên bản 5. 0, hỗ trợ gợi ý loại [tùy chọn] dần dần được giới thiệu.
Từ ngôn ngữ lập trình 'không cần gõ' của phiên bản 4, PHP đã phát triển từ phiên bản này sang phiên bản khác, từ ngôn ngữ 'được gõ yếu' cho đến ngôn ngữ lập trình được gõ gần như hoàn chỉnh được giới thiệu với phiên bản 8.
Loại gợi ý loại nào đã được giới thiệu với phiên bản PHP nào được tóm tắt trong phần
Ghi chú. Gợi ý loại vẫn là một phần tùy chọn của PHP, vì vậy chúng không thực sự cần thiết cho bất kỳ mã cụ thể nào được chạy
Ví dụ, hãy nghĩ về một hàm mong đợi một số nguyên làm đối số
Không có gợi ý kiểu, PHP cố gắng chuyển đổi bất kỳ giá trị nào được truyền thành số nguyên trước khi giá trị đó được sử dụng trong hàm, bất kể đó là chuỗi, giá trị boolean hay giá trị nào khác. Sau đó, nó thực thi mã chức năng mà không có thông báo lỗi
Tùy thuộc vào mức báo cáo lỗi được đặt trong cấu hình PHP, nhiều nhất bạn nhận được thông báo Thông báo hoặc Cảnh báo ở đầu ra, nhưng quá trình thực thi mã không bị dừng
Trong nhiều trường hợp, việc truyền các giá trị không phải số nguyên sẽ dẫn đến việc chuyển đổi thành giá trị số nguyên 0, trừ khi nó được truyền một chuỗi bắt đầu bằng các ký tự số. Nhưng ngay cả khi đó, kết quả có lẽ không như mong đợi
Vì các tùy chọn PHP báo cáo lỗi thường bị vô hiệu hóa trên các hệ thống sản xuất nên những lỗi như vậy thường không được chú ý. Thông thường, nó dẫn đến hành vi không thể đoán trước của ứng dụng PHP trong các phần khác của mã
Nếu gợi ý kiểu được sử dụng và nó chỉ ra rằng hàm này mong đợi một số nguyên, thì một thông báo lỗi sẽ được tạo khi hàm được gọi với một giá trị sai và nguồn gốc của lỗi sẽ bị lộ ngay lập tức. Thông báo lỗi đề cập đến dòng mã thực tế trong đó đối số sai được truyền vào
Nếu không có gợi ý loại, thông báo hoặc thông báo cảnh báo có thể được tạo ở nơi khác trong mã. Và mặc dù nguồn gốc của lỗi là đối số sai, điều này thường gây khó khăn cho việc xác định phần gốc của mã gây ra thông báo lỗi và/hoặc dòng mã mà thông báo được hiển thị
Ngoài ra, các lỗi như vậy có thể được phát hiện bởi các công cụ môi trường phát triển hiện đại, chẳng hạn như IDE [e. g. PHPStorm, Eclipse IDE, Zend Studio, v.v. ] và được hiển thị trong quá trình mã hóa
Điều này có thể dẫn đến chất lượng mã và độ tin cậy cao hơn đáng kể, đồng thời có thể giảm nỗ lực kiểm tra. Ngoài ra, điều này có thể dẫn đến ít chu kỳ 'viết mã - thử nghiệm - khắc phục sự cố' hơn, điều này trong hầu hết các trường hợp có nghĩa là thời gian thực hiện dự án nhanh hơn
Việc tăng nỗ lực viết mã với gợi ý loại được đền đáp bằng chất lượng mã cao hơn và đặc biệt là trong giai đoạn cuối của dự án, điều này có thể dẫn đến thời gian kiểm tra và sửa lỗi ngắn hơn
Thậm chí có thể thực hiện các thử nghiệm mở rộng hơn bằng các công cụ phân tích tĩnh [e. g. PHP CodeSniffer, PHPLint, PHPStan, Scrutinizer, v.v. ] để tránh lỗi, càng sớm càng tốt, trong giai đoạn viết mã
Tất nhiên, những công cụ này phụ thuộc vào sự hiện diện của gợi ý loại, vì vậy chúng đã báo cáo việc thiếu gợi ý loại khi bạn sử dụng chúng
Một ưu điểm khác của gợi ý kiểu là minh bạch hơn khi làm việc theo nhóm. Nó trở nên rõ ràng hơn đối với mọi lập trình viên trong nhóm, loại thuộc tính lớp nên chứa loại giá trị nào, loại đối số nào mà hàm mong đợi hoặc loại giá trị mà hàm trả về. Tất nhiên, điều này cũng áp dụng cho mã của riêng bạn mà bạn có thể đã viết trong quá khứ
Tóm lại, gợi ý kiểu giúp chúng ta
- để tìm lỗi thời gian chạy
- với việc phát hiện lỗi mã hóa nhanh hơn
- trong khi viết mã khi sử dụng môi trường phát triển hiện đại
- trong phân tích mã tĩnh - và do đó cải thiện mã với sự trợ giúp của các công cụ thích hợp
- để cải thiện tính minh bạch của mã
Những kiểu dữ liệu nào được hỗ trợ bởi PHP
Để sử dụng gợi ý kiểu chính xác, trước tiên chúng ta phải xem xét các loại giá trị mà PHP hỗ trợ
Các loại vô hướng
Biến vô hướng là biến lưu trữ một giá trị duy nhất. Thông thường, chúng còn được gọi là loại giá trị cơ bản.
PHP phân biệt giữa các loại sau.Các loại kết hợp
Ngược lại với các loại vô hướng, một biến thuộc loại giá trị kết hợp có thể chứa một số giá trị của loại dữ liệu vô hướng hoặc các loại dữ liệu hợp chất khác. PHP phân biệt giữa các loại sau.các loại đặc biệt
- tài nguyên.
Đây không phải là một loại dữ liệu theo đúng nghĩa mà là một biến thể đặc biệt của loại dữ liệu int.
Chú ý. Vì lý do kỹ thuật, loại này không được hỗ trợ cho gợi ý loại. - null.
Xin nhắc lại, đây không phải là một loại giá trị theo đúng nghĩa, mà là một giá trị đặc biệt có thể được gán cho mọi biến, tương đương với "không được gán giá trị". - chính mình.
Bản thân từ khóa cũng không phải là một loại giá trị riêng biệt. Tuy nhiên, điều này luôn biểu thị tên của lớp trong phạm vi mà nó được sử dụng. self được phép gán kiểu bên trong các lớp.
- tài nguyên.
Các loại gợi ý loại khác nhau
Để chỉ định một loại giá trị, bốn loại dữ liệu vô hướng, bốn loại dữ liệu hợp chất và tên của tất cả các lớp được biết trong tập lệnh hiện tại đều có sẵn
Nếu bạn muốn chỉ định một biến có thể thuộc một loại giá trị nhất định hoặc giữ giá trị không, thì loại dữ liệu tương ứng phải được sử dụng với tiền tố '?'. Gán một giá trị mặc định là null trên kiểu tham chiếu của các đối số hàm cũng có tác dụng tương tự
Nếu loại giá trị không phải là duy nhất, chẳng hạn như nếu cả chuỗi và số nguyên đều được phép, thì điều này không thể được biểu thị bằng gợi ý loại trong PHP trước phiên bản 8. 0
Để nhận được hỗ trợ từ IDE hoặc các công cụ phân tích cho những trường hợp này, bạn có thể đưa ra thông số kỹ thuật trong nhận xét [xem thêm phần ]
Như đã đề cập trong phần về các loại giá trị ở trên, tài nguyên loại giá trị có ý nghĩa đặc biệt liên quan đến gợi ý loại. Không thể chỉ định gợi ý loại cho các tham số hoặc giá trị trả về của loại giá trị này. Để đảm bảo an toàn cho loại,
declare[strict_types=1];
0 nên được sử dụng trong mãBiến cục bộ và biến toàn cục
Lên đến và bao gồm cả phiên bản PHP 8, không có gợi ý kiểu nào được cung cấp cho các biến cục bộ và biến toàn cục. Cả PHP và các công cụ phân tích và IDE khác nhau đều xác định loại biến theo giá trị được gán cuối cùng trong mã cho các biến đó
Đối số hàm / Đối số của phương thức lớp
Có lẽ loại gợi ý kiểu quan trọng nhất bao gồm việc chỉ định các loại giá trị của các đối số của một hàm hoặc phương thức lớp
Điều này giúp đảm bảo rằng các giá trị chính xác được thông qua. Khi các loại sai được truyền dưới dạng giá trị đối số, một lỗi sẽ được kích hoạt ở dòng mã sử dụng giá trị loại sai, bên cạnh dòng mã nơi giá trị được truyền cho hàm
Giá trị trả về
Kiểu dữ liệu được chỉ định sau định nghĩa hàm, được phân tách bằng dấu hai chấm. Hàm không có giá trị trả về được xác định bằng từ khóa void
Thuộc tính lớp
Để xác định loại giá trị của thuộc tính lớp, gợi ý kiểu được chỉ định trong phần khai báo trước tên và sau khả năng hiển thị của thuộc tính
Ngược lại với việc khai báo các đối số của hàm, một thuộc tính chỉ có thể được gán giá trị ban đầu là null nếu loại dữ liệu được đánh dấu là 'nullable' bởi phần trước '?'. Loại dữ liệu có thể gọi được không được phép cho thuộc tính lớp
Từ khóa self cũng có thể được sử dụng trong các lớp cho thuộc tính, đối số phương thức và giá trị trả về
class MyClass
{
protected self $oNextSibling;
public function setNextSibibling[self $oSibbling] : void
{
....
}
}
Nhập các loại gợi ý được sắp xếp theo phiên bản PHP khi chúng được giới thiệu
Phiên bản 5. 0
Kể từ phiên bản 5. 0, các hàm mong đợi một đối tượng của một lớp nhất định làm đối số có thể được đặt trước tên lớp tương ứng. Nếu hàm mong đợi một đối tượng thuộc lớp của chính nó, thì từ khóa self cũng được phép. Loại giá trị vô hướng chưa được hỗ trợ
Phiên bản 5. 1
- Có thể gán giá trị mặc định null
- Mảng loại giá trị đã được hỗ trợ
Phiên bản 5. 4
- Loại giá trị có thể gọi được hỗ trợ cho các đối số hàm
Phiên bản 7. 0
- Các loại giá trị vô hướng [chuỗi, int, float, bool] hiện được hỗ trợ
- Loại giá trị của giá trị trả về của hàm và phương thức lớp có thể được chỉ định
Phiên bản 7. 1
- Bằng cách thêm dấu '?' vào trước loại dữ liệu
- Các hàm không trả về bất kỳ giá trị nào có thể được đánh dấu bằng kiểu trả về void
- Giới thiệu về loại giá trị có thể lặp lại
Phiên bản 7. 2
- Giới thiệu loại giá trị đối tượng
Phiên bản 7. 4
- Hỗ trợ khai báo kiểu cho thuộc tính lớp
Phiên bản 8. 0
- Các loại liên minh
- Khuyến mãi bất động sản xây dựng
Gõ gợi ý trong thực tế
Kiểm tra loại nhất quán chỉ được thực hiện nếu điều này được kích hoạt trực tiếp trong mã PHP ở đầu tệp theo hướng dẫn sau
declare[strict_types=1];
Kiểm tra loại nghiêm ngặt phải được kích hoạt rõ ràng cho từng tệp PHP. Thật không may, không có tùy chọn cấu hình toàn cầu để đặt kiểm tra nghiêm ngặt ở cấp độ thư mục hoặc không gian web
Một ví dụ rất đơn giản sau đây để chỉ ra cách một đoạn mã hoạt động trong thời gian chạy dưới các điều kiện khác nhau
Thông báo 'thông báo' hoặc 'cảnh báo' được đưa ra hay không tùy thuộc vào cài đặt của cấp
1 được đặt trong cấu hình PHPdeclare[strict_types=1];
Không có gợi ý loại
Tất cả lệnh gọi hàm
declare[strict_types=1];
2 được chạy. Ba cuộc gọi đầu tiên đều tạo ra đầu ra là 6. Lệnh gọi thứ tư cũng xuất ra 6, vì PHP chuyển đổi các chuỗi bắt đầu bằng ký tự số cho đến lần xuất hiện đầu tiên của ký tự không phải số thành giá trị số của nó. Tuy nhiên, 'thông báo' sau được tạo.
Lưu ý. Gặp phải một giá trị số không được định dạng tốt trong Ví dụ. php trên dòng 4
Với cuộc gọi thứ năm, kết quả là 0 và gây ra 'cảnh báo'
Cảnh báo. Một giá trị không phải là số gặp phải trong Ví dụ. php trên dòng 4
Xin lưu ý rằng dòng 4, trong đó phép toán số học diễn ra, được xuất ra dưới dạng dòng mã kích hoạt
Để khoanh vùng 'thủ phạm' thực sự [i. e. các lệnh gọi hàm có đối số không hợp lệ ở dòng 9 hoặc 10], thì ngăn lệnh gọi của thông báo PHP cần được kiểm tra kỹ hơn
Sử dụng gợi ý loại mà không có cài đặt 'strict_types'
Kết quả của bốn cuộc gọi đầu tiên giống hệt với ví dụ trước mà không có gợi ý loại
Tuy nhiên, với lệnh gọi thứ năm, việc thực thi tập lệnh PHP bị tạm dừng do kích hoạt 'lỗi nghiêm trọng'
Lỗi nghiêm trọng. Lỗi loại chưa bắt được. Đối số 2 được chuyển đến myFunc[] phải thuộc loại int, chuỗi đã cho, được gọi trong Ví dụ. php trên dòng 11 và được định nghĩa trong Ví dụ. php trên dòng 2
Nhưng hãy nhìn kỹ hơn vào tin nhắn. Dòng mã gây ra lỗi không còn là dòng 4, mà là dòng 11. Đó là nơi diễn ra lệnh gọi hàm không hợp lệ. Dòng 2, từ đó chức năng được gọi là chức năng cũng được hiển thị để cung cấp thêm thông tin giúp tìm ra vấn đề tốt hơn
Gõ gợi ý với kiểm tra 'strict_types'
Kích hoạt kiểm tra
declare[strict_types=1];
0, tất cả lệnh gọi không hợp lệ của hàm declare[strict_types=1];
2 sẽ khiến trình kích hoạt PHP gặp 'lỗi nghiêm trọng'Trong trường hợp nào không thể sử dụng loại gợi ý?
Không thể sử dụng gợi ý loại nếu
- Một tham số hoặc giá trị trả về có thể có các loại giá trị khác nhau. Đây có thể là trường hợp khi
- Kiểu trả về thường là int , nhưng trong trường hợp có lỗi, hàm sẽ trả về giá trị bool false [e. g.
2]declare[strict_types=1];
- Một đối số được khai báo có chủ ý để hỗ trợ nhiều loại giá trị, e. g. một hàm
3 chấp nhận dưới dạngdeclare[strict_types=1];
4 tham số hoặc là dấu thời gian unix [i. e. một int], một đối tượng DateTime hoặc một chuỗi chứa ngày hợp lệdeclare[strict_types=1];
- Kiểu trả về thường là int , nhưng trong trường hợp có lỗi, hàm sẽ trả về giá trị bool false [e. g.
- Đối với các chức năng mong đợi hoặc trả lại tài nguyên
Trường hợp đầu tiên đã được giải quyết bằng việc giới thiệu Unions trong PHP 8. 0, trường hợp thứ hai vẫn phải được xử lý bằng cách sử dụng kiểm tra loại với mã cụ thể bằng cách sử dụng hàm
declare[strict_types=1];
5Điều gì cần được xem xét khi sử dụng các giá trị 'nullable'
Nói chung, mỗi phép gán loại có thể được đánh dấu là có giá trị rỗng, nghĩa là giá trị tương ứng có thể thuộc loại dữ liệu đã chỉ định hoặc có chứa không. Tuy nhiên, tùy chọn này nên được sử dụng một cách thận trọng, bởi vì nó có thể có nghĩa là một lợi thế quan trọng mà bạn sẽ đạt được bằng cách sử dụng gợi ý loại sẽ bị mất
Do gợi ý loại, đặc biệt là với mảng và đối tượng, không còn cần phải tốn thời gian kiểm tra loại mã trong mã, điều bắt buộc khi sử dụng giá trị nullable
Kiểm tra tình huống sau
function getOptions[] : ?array
{
...
if [...] {
return null;
}
...
}
$aOptions = getOptions[];
foreach [$aOptions as $option] {
...
}
Ví dụ mã này sẽ dẫn đến cảnh báo khi thực thi câu lệnh
declare[strict_types=1];
6 nếu getOptions[] trả về nullCảnh báo. Đối số không hợp lệ được cung cấp cho foreach[] trong Ví dụ. php
Để đảm bảo an toàn cho loại, chúng ta nên kiểm tra tính hợp lệ của
declare[strict_types=1];
7 trước khi sử dụngTuy nhiên, trong lần triển khai sau mà không có giá trị trả về 'không có giá trị', có thể bỏ qua việc kiểm tra tính hợp lệ của
declare[strict_types=1];
7 declare[strict_types=1];
1Do đó, điều quan trọng là phải cân nhắc đối với từng trường hợp liệu giá trị null có nên được mong đợi và xử lý tương ứng hay không
Ví dụ: trong đoạn mã ở trên, giá trị null có thể cho biết rằng các tùy chọn không được khởi tạo chính xác, trong khi một mảng trống chỉ có nghĩa là hiện tại không có tùy chọn nào. nhưng ngay cả khi đó, việc khởi tạo không chính xác sẽ dẫn đến lỗi hoặc cách xử lý thích hợp trong hàm
declare[strict_types=1];
9 chứ không phải bên ngoài khi xử lý giá trị trả vềTóm lược
Như có thể thấy trong ví dụ hiển thị ở trên, hành vi thay đổi ngay cả với mã chương trình rất đơn giản bằng cách sử dụng gợi ý loại và kích hoạt kiểm tra loại nghiêm ngặt
Để đảm bảo hành vi có thể dự đoán được của mã, kiểm tra loại nghiêm ngặt thường được bật và, bất cứ khi nào có thể, nên thực hiện khai báo loại rõ ràng
Mặc dù bài đăng khác này được viết ban đầu khi xem xét phiên bản PHP 7. 1, tôi nghĩ nó vẫn đáng để đọc và xử lý các tuyên bố được đưa ra
Các tính năng mới trong phiên bản PHP 8. 0 liên quan đến gợi ý loại
Liên minh loại 2. 0
Sự phát triển quan trọng nhất của PHP 8. 0 liên quan đến gợi ý loại là việc giới thiệu loại dữ liệu Union
Trước PHP 8, chỉ có thể chỉ định các loại liên kết trong nhận xét chú thích phpdoc. Giờ đây, điều này có thể được thực hiện trực tiếp dưới dạng gợi ý loại bằng cách chỉ định các loại giá trị được phép trong danh sách được phân tách bằng ký hiệu dấu gạch ngang '. '
Các loại liên kết hỗ trợ tất cả các loại giá trị có sẵn, theo đó các giới hạn sau phải được xem xét
- Từ khóa void không được là một phần của liên kết - hàm mang lại kết quả hoặc không
- Giá trị null chỉ được hỗ trợ như một phần của liên kết, không được phép sử dụng giá trị này như một loại độc lập
- Ký hiệu loại nullable ['?datatype'] vẫn được phép [tương ứng với 'datatype. vô giá trị']. Tuy nhiên, ký hiệu này có thể không được sử dụng trong một công đoàn. '?chuỗi. int' do đó không được phép - hãy khai báo các kết hợp đó là 'string. int. vô giá trị'
- Vì nhiều hàm trả về một loại dữ liệu nhất định và trả về giá trị boolean false trong trường hợp có lỗi hoặc một điều kiện đặc biệt khác nên loại giả này cũng được hỗ trợ. [e. g.
0]function getOptions[] : ?array { ... if [...] { return null; } ... } $aOptions = getOptions[]; foreach [$aOptions as $option] { ... }
Bạn có thể tìm thêm thông tin trên tài liệu PHP
Mặc dù sự thay đổi này không liên quan trực tiếp đến chủ đề gợi ý kiểu, nhưng nó không nên được đề cập ở đây, bởi vì nó có thể được sử dụng để đơn giản hóa việc khai báo các thuộc tính và hàm tạo của một lớp
Sự đổi mới này ảnh hưởng đến các thuộc tính lớp có giá trị sẽ được đặt khi hàm tạo được gọi
Thay vì phải viết từng thuộc tính bốn lần ở những nơi khác nhau, giờ đây có thể rút ngắn điều này trong PHP 8. 0 như sau
Các hạn chế sau phải được xem xét
- Tuyên bố lại tài sản bị cấm
4declare[strict_types=1];
- Không được sử dụng loại giá trị có thể gọi được vì đây không phải là loại hợp lệ cho một thuộc tính
- Giá trị mặc định của null không được gán cho một thuộc tính không thể null.
5declare[strict_types=1];
Bạn có thể tìm thấy mô tả chi tiết hơn trong tài liệu PHP
Lỗi loại nhất quán cho các chức năng nội bộ
Đôi khi, một loại kiểm tra khác cho các chức năng nội bộ và do người dùng xác định có thể được chỉ định nhất quán hơn bằng cách sử dụng PHP 8. 0. Xem tài liệu PHP để biết thêm thông tin
Tăng cường gợi ý loại bằng cách sử dụng Chú thích phpDoc
Không chỉ hầu hết các hướng dẫn về phong cách đều khuyến nghị sử dụng các nhận xét tương thích với phpDoc trong mã nguồn, hầu hết các IDE cũng hỗ trợ phpDoc và hiển thị các nhận xét được lưu trữ theo cách này khi sử dụng một chức năng, điều này thường rất hữu ích trong quá trình viết mã
Hầu hết các công cụ phân tích tĩnh cũng sử dụng chú thích phpDoc để thực hiện kiểm tra loại chi tiết hơn
Ghi chú. chú thích phpDoc KHÔNG ảnh hưởng đến việc kiểm tra kiểu PHP khi chạy
Tại thời điểm này, bạn sẽ không tìm thấy mô tả chi tiết về chú thích phpDoc mà chỉ có các tính năng đặc biệt cần lưu ý liên quan đến gợi ý kiểu được đề cập ở đây
Các loại giá trị không được hỗ trợ bởi PHP
Không nên sử dụng các loại giá trị Số nguyên, Số, Đôi và Boolean được phpDoc chấp nhận vì chúng không phải là loại giá trị PHP hợp lệ
Khai báo nếu có nhiều loại giá trị được phép
Nếu một đối số hoặc giá trị trả về chấp nhận các loại giá trị khác nhau, trước PHP 8. 0, chỉ có thể xác định các loại chính xác hơn bằng cách sử dụng chú thích phpDoc
Loại giá trị phía sau
function getOptions[] : ?array
{
...
if [...] {
return null;
}
...
}
$aOptions = getOptions[];
foreach [$aOptions as $option] {
...
}
1 chú thích có thể được khai báo là hỗn hợpĐiều này chỉ cho biết rằng một số loại dữ liệu khác nhau có thể xảy ra nhưng không tiến hành kiểm tra loại nào nữa. Nếu một số loại dữ liệu được chỉ định được phân tách bằng ký hiệu đường ống '. ', chỉ những loại này được phép. Ngoài ra còn có tùy chọn xác định null hoặc false là giá trị được phép
Giá trị của loại tài nguyên
Trong bản thân phpDoc, loại dữ liệu tài nguyên đã được biết, nhưng rất tiếc là việc xử lý các giá trị của loại này không thống nhất trong các IDE và công cụ phân tích khác nhau
Tài nguyên loại giá trị đôi khi được công nhận và các nỗ lực được thực hiện để thực hiện kiểm tra thích hợp
Trong mọi trường hợp, khía cạnh chính cần thấy ở đây là các giá trị tài nguyên được ghi lại chính xác để đảm bảo tính minh bạch của mã