Gợi ý kiểu trong php là gì?

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ụ 1
ví 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+example
declare[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ã [
    function getOptions[] : ?array 
    {
        ...
        if [...] {
            return null;
        }
        ...
    }
    
    $aOptions = getOptions[];
    foreach [$aOptions as $option] {
        ...
    }
    9] có thể được giảm xuống mức tối thiểu
  • 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.

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 

declare[strict_types=1];
1 được đặt trong cấu hình PHP

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

  1. 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.
      declare[strict_types=1];
      2]
    • Một đối số được khai báo có chủ ý để hỗ trợ nhiều loại giá trị, e. g. một hàm 
      declare[strict_types=1];
      3 chấp nhận dưới dạng 
      declare[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ệ
  2. Đố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ề null

Cả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ụng

Tuy 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];

declare[strict_types=1];
1

Do đó, đ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.
    function getOptions[] : ?array 
    {
        ...
        if [...] {
            return null;
        }
        ...
    }
    
    $aOptions = getOptions[];
    foreach [$aOptions as $option] {
        ...
    }
    0]

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
    declare[strict_types=1];
    4
  • 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.
    declare[strict_types=1];
    5

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ã

Loại gợi ý là gì?

Gợi ý loại là một giải pháp chính thức để chỉ định tĩnh loại giá trị trong mã Python của bạn . Nó được chỉ định trong PEP 484 và được giới thiệu trong Python 3. 5. Tên. cú pháp str cho biết đối số tên phải thuộc loại str. Cú pháp -> cho biết hàm hello[] sẽ trả về một chuỗi.

Gợi ý kiểu được thêm vào PHP khi nào?

Vào tháng 5 năm 2010 hỗ trợ cho gợi ý loại vô hướng đã được thêm vào thân PHP.

Gợi ý kiểu trong laravel là gì?

Nói một cách đơn giản, gợi ý kiểu có nghĩa là cung cấp gợi ý để hàm chỉ chấp nhận kiểu dữ liệu đã cho . Nói một cách kỹ thuật, chúng ta có thể nói rằng Gợi ý kiểu là phương pháp mà chúng ta có thể buộc chức năng chấp nhận kiểu dữ liệu mong muốn. Trong PHP, chúng ta có thể sử dụng gợi ý kiểu cho Đối tượng, Mảng và kiểu dữ liệu có thể gọi được.

Làm cách nào để sử dụng hàm loại trong PHP?

Hàm gettype[] là một hàm có sẵn trong PHP dùng để lấy kiểu của một biến. Nó được sử dụng để kiểm tra loại biến hiện có. .
boolean
số nguyên
double [vì lý do lịch sử, “double” được trả về trong trường hợp float]
chuỗi
mảng
vật
nguồn

Chủ Đề