Hàm PHP trả về kiểu đối tượng
Các mẫu phổ biến cho môi trường dữ liệu truyền trực tuyến phân tán (Hội thảo trên web trực tiếp ngày 9 tháng 2 năm 2023) - Tiết kiệm chỗ ngồi của bạn Show
PHP 8 - Cải tiến hệ thống loại Thích In Dấu trang Ngày 20 tháng 1 năm 2023 Đọc 20 phút qua
xét bởi
Viết cho InfoQTham gia cộng đồng chuyên gia. Tăng khả năng hiển thị của bạn.Phát triển sự nghiệp của bạn Tìm hiểu thêm Chìa khóa rút ra
Bài viết này là một phần của loạt bài viết "PHP 8. x". Bạn có thể đăng ký để nhận thông báo về các bài viết mới trong loạt bài này qua RSS PHP tiếp tục là một trong những ngôn ngữ kịch bản được sử dụng rộng rãi nhất trên web với 77. 3% của tất cả các trang web có ngôn ngữ lập trình phía máy chủ được biết là sử dụng nó theo w3tech. PHP 8 mang đến nhiều tính năng mới và những cải tiến khác mà chúng ta sẽ khám phá trong loạt bài viết này
Nội dung được tài trợ có liên quanNhà tài trợ liên quanĐiện toán đám mây Akamai dựa trên Linode. Một nền tảng phân phối rộng rãi và thân thiện với nhà phát triển để xây dựng, chạy và bảo mật khối lượng công việc trên đám mây. Bắt đầu dùng thử miễn phí ngay hôm nay Trong bài viết này, chúng ta sẽ thảo luận về các phần mở rộng cho hệ thống kiểu PHP được giới thiệu trong PHP 8, 8. 1 và 8. 2. Chúng bao gồm các loại liên kết, giao lộ và 9, cũng như các loại trả về 01 và 02Ngoài ra, PHP 8 cũng mang đến sự hỗ trợ cho các loại độc lập 04, 05 và 06Một số định nghĩaKhai báo kiểu trong PHP được sử dụng với thuộc tính lớp, tham số hàm và kiểu trả về của hàm. Các định nghĩa khác nhau thường được sử dụng để mô tả một ngôn ngữ liên quan đến hệ thống loại của nó. mạnh/yếu, động/tĩnh PHP là ngôn ngữ kiểu động. Nhập động ngụ ý rằng việc kiểm tra kiểu được thực hiện trong thời gian chạy, trái ngược với kiểm tra kiểu thời gian biên dịch tĩnh. Theo mặc định, PHP được gõ yếu, điều này có nghĩa là ít quy tắc gõ hơn hỗ trợ chuyển đổi ngầm trong thời gian chạy. Tuy nhiên, gõ nghiêm ngặt có thể được bật trong PHP. PHP sử dụng các loại trong các ngữ cảnh khác nhau
Bên cạnh các kiểu đơn giản, PHP 8 giới thiệu các kiểu phức hợp như kiểu liên kết và kiểu giao nhau. Một kiểu kết hợp là sự kết hợp của nhiều kiểu đơn giản. Một giá trị phải khớp với chỉ một trong các loại trong loại kết hợp. Một loại kết hợp có thể được sử dụng để chỉ định loại thuộc tính lớp, loại tham số hàm hoặc loại trả về hàm. Loại mới có tên là 9 là một loại công đoàn đặc biệt. PHP8. 1 cũng thêm các loại giao lộ để chỉ định các loại lớp thực sự là giao điểm của nhiều loại lớp. Hai loại trả lại mới đã được thêm vào. Kiểu trả về 02 được sử dụng nếu một hàm không trả về, điều này có thể xảy ra nếu hàm đưa ra một ngoại lệ hoặc gọi 19, chẳng hạn. Kiểu trả về 01 ngụ ý rằng giá trị trả về phải là một lớp 21 mà phương thức được gọi. Các loại liên minhNếu bạn đã quen thuộc với sơ đồ Venn, bạn có thể nhớ thiết lập hợp và giao. Các kiểu kết hợp được giới thiệu trong PHP 8 để hỗ trợ kết hợp các kiểu đơn giản. Cú pháp sử dụng cho kiểu kết hợp trong khai báo như sau
Để bắt đầu với một ví dụ, trong tập lệnh sau, 22 thuộc loại liên kết 23. Giá trị của nó được khởi tạo thành một giá trị số nguyên và sau đó giá trị này được đặt cho từng loại khác trong khai báo kiểu kết hợp.
Đầu ra từ tập lệnh như sau
Vì PHP là một ngôn ngữ được đánh máy yếu, nếu giá trị của 22 được đặt thành giá trị 25 26, thì một chuyển đổi ngầm được thực hiện. Đoạn script sau sẽ cho kết quả là 27.
Tuy nhiên, nếu tính năng nhập nghiêm ngặt được bật với khai báo 28, thì giá trị _______1_______29 sẽ không được đặt thành 26 và một thông báo lỗi sẽ hiển thị
Nhập yếu đôi khi có thể chuyển đổi các giá trị thành một loại có liên quan chặt chẽ, nhưng chuyển đổi loại không phải lúc nào cũng được thực hiện. Ví dụ: một biến kiểu kết hợp 31 không thể được gán một giá trị chuỗi, như trong tập lệnh
Một thông báo lỗi được hiển thị
Trong một ví dụ phức tạp hơn một chút, tập lệnh sau sử dụng các loại liên kết trong khai báo thuộc tính lớp, tham số hàm và hàm trả về 32
đầu ra là
Null trong các loại công đoànMột kiểu kết hợp có thể là null, trong trường hợp này, 05 là một trong các kiểu trong khai báo kiểu kết hợp. Trong tập lệnh sau, tất cả thuộc tính lớp, tham số hàm và kiểu trả về của hàm đều được khai báo bằng kiểu kết hợp nullable
Loại sai trong các loại công đoànLoại giả 06 có thể được sử dụng trong loại kết hợp. Trong ví dụ sau, kiểu 06 được sử dụng trong khai báo thuộc tính lớp, tham số hàm và kiểu trả về của hàm, tất cả đều là khai báo kiểu kết hợp 0đầu ra là
Nếu 36 được sử dụng trong một kiểu kết hợp, thì không thể sử dụng 06, vì nó được coi là khai báo trùng lặp. Hãy xem xét tập lệnh sau, trong đó một hàm khai báo một tham số hàm với kiểu kết hợp bao gồm cả 06 và 36 2Một thông báo lỗi được hiển thị 3Các loại lớp trong các loại công đoànMột loại lớp có thể được sử dụng trong một loại kết hợp. Loại lớp 40 được sử dụng trong loại kết hợp trong ví dụ sau 4đầu ra là 5Tuy nhiên, loại lớp không thể được sử dụng trong loại kết hợp nếu loại 41 cũng được sử dụng. Tập lệnh sau sử dụng cả loại lớp và 41 trong loại kết hợp 6Một thông báo lỗi được hiển thị 7Nếu 43 được sử dụng trong một loại liên kết, thì không thể sử dụng bổ sung 44 và 45. Tập lệnh sau sử dụng 43 với 44 trong một loại liên kết 8Một thông báo lỗi được hiển thị 9Các kiểu liên kết và kế thừa lớpNếu một lớp mở rộng một lớp khác, một loại kết hợp có thể khai báo cả hai lớp riêng lẻ hoặc chỉ khai báo lớp cha. Ví dụ, trong tập lệnh sau, lớp 48 mở rộng lớp 49, lớp này mở rộng lớp 40. Các lớp 51 và 48 sau đó được đưa vào khai báo kiểu kết hợp của các tham số chức năng. 0Đầu ra là 1Ngoài ra, 53 chỉ có thể khai báo lớp 40 làm loại tham số của hàm, với cùng một đầu ra 2Vô hiệu trong các loại công đoànLoại trả về 55 không thể được sử dụng trong loại kết hợp. Để chứng minh, hãy chạy đoạn script sau 3Một thông báo lỗi được hiển thị 4Chuyển đổi kiểu ẩn với các kiểu kết hợpTrước đó, chúng tôi đã đề cập rằng, nếu không bật tính năng nhập nghiêm ngặt, một giá trị không khớp với bất kỳ loại nào trong loại kết hợp sẽ được chuyển đổi thành loại có liên quan chặt chẽ. Nhưng, những loại liên quan chặt chẽ?
Ví dụ: giá trị chuỗi "1" được chuyển đổi thành số float trong tập lệnh sau 5đầu ra là 6Tuy nhiên, nếu 56 được bao gồm trong loại liên kết, đầu ra là 57. Trong tập lệnh sau, một biến kiểu kết hợp 58 được gán một giá trị chuỗi là "1. 0". 7đầu ra là 6Trong tập lệnh sau, giá trị chuỗi "true" được hiểu là giá trị 59 vì loại liên kết bao gồm 59 9Đầu ra là 0Tuy nhiên, trong tập lệnh sau, cùng một chuỗi "true" được chuyển đổi thành giá trị 36 vì 59 không thuộc loại kết hợp 1Đầu ra là; 2Trong một ví dụ khác, với đầu ra khá khó đoán, hãy xem xét tập lệnh gán giá trị chuỗi cho một biến thuộc loại liên hợp 63. 3Đầu ra là 2 59 được chuyển đổi thành 36 vì không thể thực hiện chuyển đổi thành 56 hoặc 25Loại hỗn hợp mớiPHP 8 giới thiệu một loại mới gọi là hỗn hợp, tương đương với loại kết hợp 00. Ví dụ, trong tập lệnh sau, 9 được sử dụng làm loại thuộc tính lớp, loại tham số hàm và loại trả về hàm. Tính năng nhập nghiêm ngặt được bật để chứng minh rằng 9 không bị ảnh hưởng bởi tính năng nhập nghiêm ngặt 5Tính linh hoạt của 9 rõ ràng với các loại đầu ra khác nhau 6Việc sử dụng các loại vô hướng khác trong một loại kết hợp cùng với hỗn hợp là không cần thiết vì 9 là một loại kết hợp của tất cả các loại vô hướng khác. Để chứng minh điều này, hãy xem xét kịch bản sử dụng 9 trong một kiểu kết hợp với 56 7Một thông báo lỗi được hiển thị 8Tương tự như vậy, 9 không thể được sử dụng với bất kỳ loại lớp nào. Tập lệnh sau tạo thông báo lỗi giống như trước 9Kiểu trả về 9 có thể được thu hẹp trong kiểu trả về của phương thức lớp con. Ví dụ, hàm 53 trong lớp mở rộng thu hẹp loại trả về 9 thành 44 0Các loại độc lập mới null, false và trueTrước PHP 8. 2, loại 05 là loại đơn vị của PHP, tôi. e. loại chứa một giá trị duy nhất. 05. Tương tự, loại 06 là một loại chữ của loại 36. Tuy nhiên, các loại 05 và 06 chỉ có thể được sử dụng trong loại liên kết và không phải là loại độc lập. Để chứng minh điều này, hãy chạy tập lệnh như sau trong PHP 8. 1 và sớm hơn. 1Tập lệnh xuất thông báo lỗi trong PHP 8. 1 2Tương tự, để chứng minh rằng loại 06 không thể được sử dụng như một loại độc lập trong PHP 8. 1 hoặc sớm hơn, hãy chạy tập lệnh sau 3Tập lệnh tạo thông báo lỗi với PHP 8. 1 4PHP8. 2 đã thêm hỗ trợ cho 05 và 06 dưới dạng các loại độc lập. Tập lệnh sau sử dụng 05 làm loại tham số phương thức và loại trả về phương thức 5 05 không thể được đánh dấu rõ ràng là nullable với 91. Để chứng minh, hãy chạy đoạn script sau 6Một thông báo lỗi được tạo ra 7Tập lệnh sau sử dụng 06 làm loại độc lập 8 05 và 06 có thể được sử dụng trong kiểu kết hợp, như trong kịch bản 9Ngoài ra, PHP8. 2 đã thêm 04 làm loại mới có thể được sử dụng làm loại độc lập. Tập lệnh sau sử dụng 04 làm loại thuộc tính lớp, loại tham số phương thức và loại trả về phương thức 0Loại 04 không thể được sử dụng trong loại kết hợp với 06, như trong tập lệnh 1Tập lệnh tạo thông báo lỗi 2Tương tự, 04 không thể được sử dụng trong kiểu kết hợp với 36, như trong tập lệnh 3Tập lệnh tạo thông báo lỗi 4các loại giao lộPHP8. 1 giới thiệu loại giao lộ là loại tổng hợp. Các loại giao lộ có thể được sử dụng với các loại giao diện và lớp. Một loại giao lộ được sử dụng cho một loại đại diện cho nhiều loại giao diện và lớp thay vì một loại giao diện hoặc một lớp duy nhất. Cú pháp cho một loại giao lộ như sau 5Khi nào sử dụng loại giao lộ và khi nào sử dụng loại liên kết? . Nếu một loại đại diện cho nhiều loại cùng một lúc, chúng tôi sử dụng loại giao nhau. Ví dụ tiếp theo minh họa rõ nhất sự khác biệt. Xem xét các lớp 40, 49 và 48 không có quan hệ. Nếu một loại đại diện cho bất kỳ loại nào trong số này, hãy sử dụng loại kết hợp, như trong tập lệnh 6đầu ra là 1Nếu chúng tôi đã sử dụng một loại giao lộ trong tập lệnh, thông báo lỗi sẽ xuất hiện. Sửa đổi chức năng để sử dụng các loại giao lộ 8Một thông báo lỗi được hiển thị 9Giao lộ sẽ phù hợp nếu lớp 48 mở rộng lớp 49 mở rộng lớp 40, như trong kịch bản 0đầu ra là 1Các loại vô hướng và các loại giao nhauCác loại giao lộ chỉ có thể được sử dụng với các loại lớp và giao diện, nhưng không thể được sử dụng với các loại vô hướng. Để chứng minh điều này, hãy sửa đổi hàm 53 trong kiểu vô hướng tập lệnh trước như sau 2Một thông báo lỗi được hiển thị 3Các loại giao lộ và các loại liên kếtCác loại giao lộ không thể được kết hợp với các loại liên kết. Cụ thể, ký hiệu loại giao nhau không thể được kết hợp với ký hiệu loại kết hợp trong cùng một khai báo loại. Để chứng minh, hãy sửa đổi hàm 53 như sau 4Một thông báo lỗi phân tích cú pháp được xuất ra 5Một loại giao nhau có thể được sử dụng với một loại liên kết trong cùng một khai báo hàm, như được minh họa bởi hàm 6Loại tĩnh và không bao giờ trả lạiPHP8. 0 giới thiệu 01 làm kiểu trả về mới và PHP 8. 1 giới thiệu 02 như một kiểu trả về mới. Kiểu trả về tĩnhNếu kiểu trả về được chỉ định là 01, thì giá trị trả về phải cùng kiểu với lớp mà phương thức được định nghĩa. Ví dụ, phương thức 53 trong lớp 40 khai báo kiểu trả về 01, và do đó phải trả về giá trị kiểu 40, là lớp mà hàm được khai báo 7Đầu ra là 8Hàm khai báo kiểu trả về 01 phải thuộc về một lớp. Để chứng minh điều này, hãy khai báo 02 là kiểu trả về trong hàm toàn cục 9Một thông báo lỗi được hiển thị 0Đối tượng lớp được trả về phải là lớp kèm theo. Tập lệnh sau sẽ tạo ra lỗi vì giá trị trả về thuộc loại lớp 49, trong khi loại trả về 01 yêu cầu nó thuộc loại 40 1Thông báo lỗi sau đây được tạo ra 2Nếu lớp 49 mở rộng lớp 40, tập lệnh trước đó sẽ chạy ok và xuất ra 27 3Loại trả về 01 có thể được sử dụng trong loại kết hợp. Nếu 01 được sử dụng trong kiểu kết hợp, giá trị trả về không nhất thiết phải là kiểu lớp. Ví dụ, 01 được sử dụng trong một kiểu kết hợp trong tập lệnh 4Đầu ra là 5Không thể sử dụng loại 01 trong loại giao lộ. Để chứng minh điều này, hãy xem xét kịch bản sau 6Một thông báo lỗi được tạo ra 7loại trả về không bao giờNếu kiểu trả về là 02, thì hàm không được trả về giá trị hoặc hoàn toàn không trả về, i. e, chức năng không chấm dứt. Kiểu trả về 02 là một kiểu con của mọi kiểu trả về khác. Điều này ngụ ý rằng 02 có thể thay thế bất kỳ loại trả về nào khác trong các phương thức bị ghi đè khi mở rộng một lớp. Hàm trả về 02 phải thực hiện một trong các thao tác sau
Nếu một hàm trả về 02 không bao giờ được gọi, thì hàm đó có thể trống, như một ví dụ 8Hàm 34 trong lớp 40 không thể được gọi vì nó có nghĩa là hàm trả về 36 ẩn. Để chứng minh, hãy sửa đổi tập lệnh trước thành 9Thông báo lỗi được tạo khi tập lệnh được chạy 0Tập lệnh sau sẽ tạo ra thông báo lỗi giống như điều kiện 37 không bao giờ được đáp ứng và hàm trả về ngầm định 36 1Không giống như kiểu trả về của 01, ví dụ như kiểu trả về của một hàm không thuộc phạm vi của một lớp, thì có thể sử dụng 02 2Hàm có kiểu trả về là 02 không được trả về giá trị. Để chứng minh điều này, đoạn script sau khai báo một hàm cố gắng trả về giá trị mặc dù giá trị trả về của nó là 02 3Một thông báo lỗi được tạo ra 4Nếu kiểu trả về là 02, thì hàm không được trả về mặc nhiên. Ví dụ: hàm 53 trong tập lệnh sau không trả về giá trị nhưng trả về hoàn toàn khi phạm vi của nó kết thúc 5Một thông báo lỗi được hiển thị 6Việc sử dụng hàm khai báo kiểu trả về không bao giờ và không kết thúc là gì? . Hàm trả về kiểu không bao giờ có thể thoát khi gọi tới ____1_______19. Một chức năng như vậy thậm chí có thể được gọi, như trong tập lệnh sau 7Ví dụ, một hàm trả về 02 có thể đưa ra một ngoại lệ 8Một hàm bao gồm vòng lặp vô hạn có thể khai báo kiểu trả về 02, như trong ví dụ 9Kiểu trả về 02 có thể ghi đè bất kỳ kiểu nào khác trong các lớp dẫn xuất, như trong ví dụ 0Loại trả về 02 không thể được sử dụng trong loại kết hợp. Để chứng minh điều này, đoạn script sau khai báo 02 trong một kiểu kết hợp 1Một thông báo lỗi được hiển thị 2Không thể sử dụng loại 02 trong loại giao lộ. Để chứng minh điều này, đoạn script sau sử dụng never với loại lớp 49 3Một thông báo lỗi được tạo ra 4Các loại vô hướng không hỗ trợ bí danhKể từ PHP 8, một thông báo cảnh báo được tạo nếu sử dụng bí danh loại vô hướng. Ví dụ: nếu 54 được sử dụng thay vì 36, một thông báo cho biết rằng 54 sẽ được hiểu là tên lớp. Để chứng minh điều này, hãy xem xét tập lệnh sau trong đó 57 được sử dụng làm loại tham số trong khai báo hàm 5Đầu ra từ tập lệnh bao gồm một thông báo cảnh báo như sau 6Trả về bằng tham chiếu từ hàm void không được dùng nữaKể từ PHP 8. 1, trả về theo tham chiếu từ hàm 55 không được dùng nữa, bởi vì chỉ các tham chiếu biến mới có thể được trả về theo tham chiếu trong khi kiểu trả về 55 không trả về giá trị. Để chứng minh điều này, hãy chạy đoạn script sau 7Đầu ra là một thông báo phản đối 8Tóm lượcTrong bài viết này, chúng ta đã thảo luận về các tính năng mới liên quan đến loại được giới thiệu trong PHP 8, bao gồm các loại liên kết, giao nhau và 9 cũng như các loại trả về 01 và 02. Trong bài viết tiếp theo, chúng tôi sẽ mô tả các tính năng mới liên quan đến mảng, biến, toán tử và xử lý ngoại lệ của PHP.
Bài viết này là một phần của loạt bài viết "PHP 8. x". Bạn có thể đăng ký để nhận thông báo về các bài viết mới trong loạt bài này qua RSS PHP tiếp tục là một trong những ngôn ngữ kịch bản được sử dụng rộng rãi nhất trên web với 77. 3% của tất cả các trang web có ngôn ngữ lập trình phía máy chủ được biết là sử dụng nó theo w3tech. PHP 8 mang đến nhiều tính năng mới và những cải tiến khác mà chúng ta sẽ khám phá trong loạt bài viết này Thông tin về các Tác giảDeepak VohraHiển thị thêmHiển thị ít hơn Lấy cảm hứng từ nội dung này?Trở thành biên tập viên cho InfoQ là một trong những quyết định sáng suốt nhất trong sự nghiệp của tôi. Nó đã thử thách tôi và giúp tôi trưởng thành theo nhiều cách. Chúng tôi muốn có nhiều người tham gia nhóm của chúng tôi Thomas Betts Trưởng ban biên tập, Thiết kế và kiến trúc phần mềm @InfoQ; Viết cho InfoQ Xếp hạng bài viết nàynhận con nuôi Phong cách Đã liên hệ với tác giả Nội dung này nằm trong chủ đề Đám mâychủ đề liên quan
Nội dung liên quan
Bản tin InfoQTổng hợp nội dung của tuần trước trên InfoQ được gửi vào thứ Ba hàng tuần. Tham gia cộng đồng hơn 250.000 nhà phát triển cấp cao. Xem một ví dụ Nhập địa chỉ email của bạn Chọn quốc gia của bạn Tôi đồng ý với InfoQ. com xử lý dữ liệu của tôi như được giải thích trong Thông báo về quyền riêng tư này. Chúng tôi bảo vệ quyền riêng tư của bạn xin chào người lạBạn cần Đăng ký tài khoản InfoQ hoặc Đăng nhập hoặc đăng nhập để gửi bình luận. Nhưng còn rất nhiều điều đằng sau việc đăng ký Kiểu trả về của hàm trong PHP là gì?Từ khóa return kết thúc một hàm và tùy ý sử dụng kết quả của một biểu thức làm giá trị trả về của hàm . Nếu return được sử dụng bên ngoài một hàm, nó sẽ dừng mã PHP trong tệp chạy.
Làm cách nào để trả về kiểu dữ liệu trong PHP?Hàm gettype() trả về loại biến.
Làm cách nào để đặt kiểu trả về của hàm trong PHP?Khai báo kiểu trả về PHP
. Để khai báo kiểu trả về của hàm, hãy thêm dấu hai chấm (. ) và nhập ngay trước dấu ngoặc nhọn ( { ) khi khai báo hàm .
Làm cách nào để trả về giá trị từ hàm PHP?Các giá trị được trả về bằng cách sử dụng câu lệnh trả về tùy chọn . Bất kỳ loại nào cũng có thể được trả về, bao gồm cả mảng và đối tượng. Điều này làm cho chức năng kết thúc thực thi ngay lập tức và chuyển quyền điều khiển trở lại dòng mà nó được gọi. |