Các phương thức lớp PHP có thể trả về
class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
0 và class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1 trong các phiên bản trước, nhưng class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1 không được phép trong các phiên bản PHP trước 8. 0. Loại trả về class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1 mới được phép cho phép thu hẹp loại trả về cho lớp được gọiKiểu trả về
class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1 giúp các lớp có các phương thức trôi chảy [i. e những cái có class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
5], các lớp bất biến [i. e class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
6] hoặc các phương thức tĩnh trả về một thể hiện của chính lớp đóNếu không có loại
class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1 được phép trong các loại trả về, người ta sẽ phải sử dụng class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
0 làm loại trả về, đây có thể không phải là loại lý tưởng. PHP DocBlock đã cho phép class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
9 trong DocBlocks của nó để chỉ ra rằng các phương thức trả về chính đối tượng hoặc một thể hiện của cùng một lớpVới PHP8. Hỗ trợ kiểu trả về
class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1 của 0, giờ đây có thể thay thế các câu lệnh DocBlock class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
9 bằng một khai báo kiểu trả vềclass Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
phương sai
Kiểu trả về
class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1 tuân theo Nguyên tắc thay thế Liskov. Một phương thức lớp con có thể trả về một đối tượng lớp hẹp hơn kiểu trả về của phương thức chaBởi vì
class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1 luôn tham chiếu đến tên lớp của đối tượng được gọi [i. e. giống như class Foo {
public function getInstance[]: mixed {}
}
class Bar extends Foo {
public function getInstance[]: object|null {}
}
class Baz extends Bar {
public function getInstance[]: object {}
}
class Qux extends Baz {
public function getInstance[]: parent {}
}
class Quux extends Qux {
public function getInstance[]: self {}
}
class Corge extends Quux {
public function getInstance[]: static {}
}
4], class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1 là tập con của class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
0, đến lượt nó là tập con của class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1Một lớp con có thể trả về
class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1, ngay cả khi kiểu trả về của phương thức cha là class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
0 hoặc class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1Ví dụ, toàn bộ thừa kế sau đây là hợp lệ
________số 8Chuỗi thừa kế quá mức hầu như luôn là một ý tưởng tồi và dẫn đến mã không thể quản lý được. Đoạn trích dưới đây chỉ để minh họa
Đoạn mã trên sử dụng PHP 8 khác. 0 tính năng
- Các loại liên minh
- loại trả về
41class Foo { - /** - * @return static - */ - public static getInstance[] { + public static getInstance[]: static { return new static[]; } }
Cố gắng "mở rộng" phạm vi loại trả về bằng
class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
0, class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1 hoặc bất kỳ loại trả về nào khác sẽ gây ra lỗiclass Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
4class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
8Trên thực tế, cũng không được phép thay thế kiểu trả về
class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1 bằng tên lớp của lớp con hoặc lớp cha.chỉ trả lại loại
Loại trả về
class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1 chỉ được phép làm loại trả về. Nó không được phép làm loại thuộc tính hoặc loại tham sốĐiều này là do loại trả về
class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1 luôn thu hẹp phạm vi, điều này không được phép trong các loại thuộc tính và tham số đã nhậpKhông được phép bên ngoài bối cảnh lớp học
Chỉ các phương thức của lớp mới có thể khai báo kiểu trả về
class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1. Các hàm hoặc bao đóng tiêu chuẩn không được phép khai báo kiểu trả về class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
9class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
0Tác động tương thích ngược
Mã có kiểu trả về
class Foo {
- /**
- * @return static
- */
- public static getInstance[] {
+ public static getInstance[]: static {
return new static[];
}
}
1 sẽ không tương thích ngược với các phiên bản PHP cũ hơn trước 8. 0. Làm như vậy sẽ dẫn đến lỗi phân tích cú pháp
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ề một hàm trong PHP?
Một hàm có thể trả về một giá trị bằng cách sử dụng câu lệnh trả về kết hợp với một giá trị hoặc đối tượng . return dừng việc thực thi hàm và gửi giá trị trở lại mã gọi. Bạn có thể trả về nhiều hơn một giá trị từ một hàm bằng cách sử dụng mảng trả về[1,2,3,4].
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 để nhận giá trị trả về từ hàm trong PHP?
Trả về giá trị ¶
. 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. by using the optional return statement. Any type may be returned, including arrays and objects. This causes the function to end its execution immediately and pass control back to the line from which it was called.