Kiểu trả về của hàm PHP

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ọi

Kiể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ớp

Vớ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 cha

Bở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[];
    }
}
1

Mộ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[];
    }
}
1

Ví dụ, toàn bộ thừa kế sau đây là hợp lệ

Chuỗ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

________số 8

Đ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ề
      class Foo {
      -   /**
      -    * @return static
      -    */
      -   public static getInstance[] {
      +   public static getInstance[]: static {
              return new static[];
          }
      }
      41

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ỗi

class Foo {
-   /**
-    * @return static
-    */
-   public static getInstance[] {
+   public static getInstance[]: static {
        return new static[];
    }
}
4
class Foo {
-   /**
-    * @return static
-    */
-   public static getInstance[] {
+   public static getInstance[]: static {
        return new static[];
    }
}
8

Trê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ập

Khô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[];
    }
}
1

class Foo {
-   /**
-    * @return static
-    */
-   public static getInstance[] {
+   public static getInstance[]: static {
        return new static[];
    }
}
9
class Foo {
-   /**
-    * @return static
-    */
-   public static getInstance[] {
+   public static getInstance[]: static {
        return new static[];
    }
}
0

Tá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.

Chủ Đề