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

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

  • Deepak Vohra

xét bởi

  • Sergio De Simone

Viết cho InfoQ

Tham 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

  • PHP 8 thêm hỗ trợ cho các loại kết hợp. Loại kết hợp là kết hợp của nhiều loại đơn giản, vô hướng. Một giá trị của kiểu kết hợp có thể thuộc về bất kỳ kiểu đơn giản nào được khai báo trong kiểu kết hợp.  
  • PHP8. 1 giới thiệu các loại giao lộ. Một loại giao lộ là giao điểm của nhiều lớp và loại giao diện. Giá trị của loại giao lộ phải thuộc về tất cả các loại giao diện hoặc lớp được khai báo trong loại giao lộ.  
  • PHP 8 giới thiệu loại
    var1;
    echo $a->fn1(); 
    9 tương đương với loại liên kết
    var1;
    $a->var1="hello";
    echo $a->var1;
    $a->var1=array(
        "1" => "a",
        "2" => "b",
    );
    var_dump($a->var1);
    
    
    00.  
  • PHP 8 giới thiệu kiểu trả về của phương thức
    var1;
    $a->var1="hello";
    echo $a->var1;
    $a->var1=array(
        "1" => "a",
        "2" => "b",
    );
    var_dump($a->var1);
    
    
    01, yêu cầu giá trị trả về phải thuộc kiểu của lớp kèm theo.   
  • PHP8. 1 giới thiệu kiểu trả về
    var1;
    $a->var1="hello";
    echo $a->var1;
    $a->var1=array(
        "1" => "a",
        "2" => "b",
    );
    var_dump($a->var1);
    
    
    02. Một hàm trả về
    var1;
    $a->var1="hello";
    echo $a->var1;
    $a->var1=array(
        "1" => "a",
        "2" => "b",
    );
    var_dump($a->var1);
    
    
    02 không được trả về một giá trị, thậm chí không được trả về hoàn toàn khi gọi hàm.    
  • PHP8. 2 thêm hỗ trợ cho
    var1;
    $a->var1="hello";
    echo $a->var1;
    $a->var1=array(
        "1" => "a",
        "2" => "b",
    );
    var_dump($a->var1);
    
    
    04,
    var1;
    $a->var1="hello";
    echo $a->var1;
    $a->var1=array(
        "1" => "a",
        "2" => "b",
    );
    var_dump($a->var1);
    
    
    05 và
    var1;
    $a->var1="hello";
    echo $a->var1;
    $a->var1=array(
        "1" => "a",
        "2" => "b",
    );
    var_dump($a->var1);
    
    
    06 dưới dạng các loại độc lập.  

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 quan

  • [eBook] Hiểu về Kubernetes (Phiên bản cập nhật)

Nhà tài trợ liên quan

Hàm PHP trả về kiểu đối tượng

Đ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à

var1;
echo $a->fn1(); 
9, cũng như các loại trả về
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

01 và
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

02

Ngoài ra, PHP 8 cũng mang đến sự hỗ trợ cho các loại độc lập

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

04,
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

05 và
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

06

Một số định nghĩa

Khai 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

  • loại độc lập. Loại có thể được sử dụng trong khai báo loại, ví dụ là
    var1;
    $a->var1="hello";
    echo $a->var1;
    $a->var1=array(
        "1" => "a",
        "2" => "b",
    );
    var_dump($a->var1);
    
    
    13
  • loại chữ. Một loại cũng tự kiểm tra giá trị ngoài loại giá trị. PHP hỗ trợ hai loại chữ
    var1;
    $a->var1="hello";
    echo $a->var1;
    $a->var1=array(
        "1" => "a",
        "2" => "b",
    );
    var_dump($a->var1);
    
    
    14 và
    var1;
    $a->var1="hello";
    echo $a->var1;
    $a->var1=array(
        "1" => "a",
        "2" => "b",
    );
    var_dump($a->var1);
    
    
    06
  • loại đơn vị. Loại chứa một giá trị duy nhất, ví dụ như
    var1;
    $a->var1="hello";
    echo $a->var1;
    $a->var1=array(
        "1" => "a",
        "2" => "b",
    );
    var_dump($a->var1);
    
    
    05

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à

var1;
echo $a->fn1(); 
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ề

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

19, chẳng hạn. Kiểu trả về
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

01 ngụ ý rằng giá trị trả về phải là một lớp
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

21 mà phương thức được gọi.    

Các loại liên minh

Nế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

Type1|Type2|....|TypeN

Để bắt đầu với một ví dụ, trong tập lệnh sau,

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

22 thuộc loại liên kết
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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.  

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

Đầu ra từ tập lệnh như sau

1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }

Vì PHP là một ngôn ngữ được đánh máy yếu, nếu giá trị của

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

22 được đặt thành giá trị
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

25
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

26, thì một chuyển đổi ngầm được thực hiện. Đoạn script sau sẽ cho kết quả là
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

27.  

var1=1.0;
echo $a->var1;

Tuy nhiên, nếu tính năng nhập nghiêm ngặt được bật với khai báo

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

28, thì giá trị _______1_______29 sẽ không được đặt thành
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

26 và một thông báo lỗi sẽ hiển thị

Uncaught TypeError: Cannot assign float to property A::$var1 of type array|string|int

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

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

31 không thể được gán một giá trị chuỗi, như trong tập lệnh

var1="hello";
echo $a->var1;

Một thông báo lỗi được hiển thị

Uncaught TypeError: Cannot assign string to property A::$var1 of type array|int

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ề

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

32

var1;
echo $a->fn1("hello","php"); 

đầu ra là

1
hello

Null trong các loại công đoàn

Một kiểu kết hợp có thể là null, trong trường hợp này,

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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

var1;
echo $a->fn1(); 

Loại sai trong các loại công đoàn

Loại giả

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

06 có thể được sử dụng trong loại kết hợp. Trong ví dụ sau, kiểu
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

0

đầu ra là

1
hello

Nếu

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

36 được sử dụng trong một kiểu kết hợp, thì không thể sử dụng
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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ả
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

06 và
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

36

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

2

Một thông báo lỗi được hiển thị

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

3

Các loại lớp trong các loại công đoàn

Một loại lớp có thể được sử dụng trong một loại kết hợp. Loại lớp

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

40 được sử dụng trong loại kết hợp trong ví dụ sau

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

4

đầu ra là

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

5

Tuy nhiên, loại lớp không thể được sử dụng trong loại kết hợp nếu loại

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

41 cũng được sử dụng. Tập lệnh sau sử dụng cả loại lớp và
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

41 trong loại kết hợp

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

6

Một thông báo lỗi được hiển thị

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

7

Nếu

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

43 được sử dụng trong một loại liên kết, thì không thể sử dụng bổ sung
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

44 và
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

45. Tập lệnh sau sử dụng
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

43 với
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

44 trong một loại liên kết

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

8

Một thông báo lỗi được hiển thị

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

9

Các kiểu liên kết và kế thừa lớp

Nế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

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

48 mở rộng lớp
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

49, lớp này mở rộng lớp
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

40. Các lớp
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

51 và
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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.  

1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
0

Đầu ra là

1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
1

Ngoài ra,

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

53 chỉ có thể khai báo lớp
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

40 làm loại tham số của hàm, với cùng một đầu ra

1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
2

Vô hiệu trong các loại công đoàn

Loại trả về

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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

1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
3

Một thông báo lỗi được hiển thị

1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
4

Chuyển đổi kiểu ẩn với các kiểu kết hợp

Trướ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ẽ?

  1. int
  2. trôi nổi
  3. chuỗi
  4. bool

Ví dụ: giá trị chuỗi "1" được chuyển đổi thành số float trong tập lệnh sau

1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
5

đầu ra là

1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
6

Tuy nhiên, nếu

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

56 được bao gồm trong loại liên kết, đầu ra là
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

57. Trong tập lệnh sau, một biến kiểu kết hợp
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

58 được gán một giá trị chuỗi là "1. 0".  

1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
7

đầu ra là

1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
6

Trong tập lệnh sau, giá trị chuỗi "true" được hiểu là giá trị

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

59 vì loại liên kết bao gồm
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

59

1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
9

Đầu ra là

var1=1.0;
echo $a->var1;
0

Tuy nhiên, trong tập lệnh sau, cùng một chuỗi "true" được chuyển đổi thành giá trị

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

36 vì
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

59 không thuộc loại kết hợp

var1=1.0;
echo $a->var1;
1

Đầu ra là;

var1=1.0;
echo $a->var1;
2

Trong 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

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

63.  

var1=1.0;
echo $a->var1;
3

Đầu ra là

var1=1.0;
echo $a->var1;
2

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

59 được chuyển đổi thành
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

36 vì không thể thực hiện chuyển đổi thành
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

56 hoặc
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

25

Loại hỗn hợp mới

PHP 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

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

00. Ví dụ, trong tập lệnh sau,
var1;
echo $a->fn1(); 
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
var1;
echo $a->fn1(); 
9 không bị ảnh hưởng bởi tính năng nhập nghiêm ngặt

var1=1.0;
echo $a->var1;
5

Tính linh hoạt của

var1;
echo $a->fn1(); 
9 rõ ràng với các loại đầu ra khác nhau

var1=1.0;
echo $a->var1;
6

Việ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ì

var1;
echo $a->fn1(); 
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
var1;
echo $a->fn1(); 
9 trong một kiểu kết hợp với
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

56

var1=1.0;
echo $a->var1;
7

Một thông báo lỗi được hiển thị

var1=1.0;
echo $a->var1;
8

Tương tự như vậy,

var1;
echo $a->fn1(); 
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

var1=1.0;
echo $a->var1;
9

Kiểu trả về

var1;
echo $a->fn1(); 
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
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

53 trong lớp mở rộng thu hẹp loại trả về
var1;
echo $a->fn1(); 
9 thành
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

44

Uncaught TypeError: Cannot assign float to property A::$var1 of type array|string|int
0

Các loại độc lập mới null, false và true

Trước PHP 8. 2, loại

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

05 là loại đơn vị của PHP, tôi. e. loại chứa một giá trị duy nhất.
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

05. Tương tự, loại
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

06 là một loại chữ của loại
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

36. Tuy nhiên, các loại
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

05 và
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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.  

Uncaught TypeError: Cannot assign float to property A::$var1 of type array|string|int
1

Tập lệnh xuất thông báo lỗi trong PHP 8. 1

Uncaught TypeError: Cannot assign float to property A::$var1 of type array|string|int
2

Tương tự, để chứng minh rằng loại

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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

Uncaught TypeError: Cannot assign float to property A::$var1 of type array|string|int
3

Tập lệnh tạo thông báo lỗi với PHP 8. 1

Uncaught TypeError: Cannot assign float to property A::$var1 of type array|string|int
4

PHP8. 2 đã thêm hỗ trợ cho

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

05 và
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

06 dưới dạng các loại độc lập. Tập lệnh sau sử dụng
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

05 làm loại tham số phương thức và loại trả về phương thức

Uncaught TypeError: Cannot assign float to property A::$var1 of type array|string|int
5

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

05 không thể được đánh dấu rõ ràng là nullable với
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

91. Để chứng minh, hãy chạy đoạn script sau

Uncaught TypeError: Cannot assign float to property A::$var1 of type array|string|int
6

Một thông báo lỗi được tạo ra

Uncaught TypeError: Cannot assign float to property A::$var1 of type array|string|int
7

Tập lệnh sau sử dụng

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

06 làm loại độc lập

Uncaught TypeError: Cannot assign float to property A::$var1 of type array|string|int
8

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

05 và
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

06 có thể được sử dụng trong kiểu kết hợp, như trong kịch bản

Uncaught TypeError: Cannot assign float to property A::$var1 of type array|string|int
9

Ngoài ra, PHP8. 2 đã thêm

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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

var1="hello";
echo $a->var1;
0

Loại

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

04 không thể được sử dụng trong loại kết hợp với
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

06, như trong tập lệnh

var1="hello";
echo $a->var1;
1

Tập lệnh tạo thông báo lỗi

var1="hello";
echo $a->var1;
2

Tương tự,

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

04 không thể được sử dụng trong kiểu kết hợp với
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

36, như trong tập lệnh

var1="hello";
echo $a->var1;
3

Tập lệnh tạo thông báo lỗi

var1="hello";
echo $a->var1;
4

cá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

var1="hello";
echo $a->var1;
5

Khi 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

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

40,
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

49 và
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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

var1="hello";
echo $a->var1;
6

đầu ra là

1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
1

Nế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ộ

var1="hello";
echo $a->var1;
8

Một thông báo lỗi được hiển thị

var1="hello";
echo $a->var1;
9

Giao lộ sẽ phù hợp nếu lớp

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

48 mở rộng lớp
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

49 mở rộng lớp
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

40, như trong kịch bản

Uncaught TypeError: Cannot assign string to property A::$var1 of type array|int
0

đầu ra là

1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
1

Các loại vô hướng và các loại giao nhau

Cá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

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

53 trong kiểu vô hướng tập lệnh trước như sau

Uncaught TypeError: Cannot assign string to property A::$var1 of type array|int
2

Một thông báo lỗi được hiển thị

Uncaught TypeError: Cannot assign string to property A::$var1 of type array|int
3

Các loại giao lộ và các loại liên kết

Cá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

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

53 như sau

Uncaught TypeError: Cannot assign string to property A::$var1 of type array|int
4

Một thông báo lỗi phân tích cú pháp được xuất ra

Uncaught TypeError: Cannot assign string to property A::$var1 of type array|int
5

Mộ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

Uncaught TypeError: Cannot assign string to property A::$var1 of type array|int
6

Loại tĩnh và không bao giờ trả lại

PHP8. 0 giới thiệu

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

01 làm kiểu trả về mới và PHP 8. 1 giới thiệu
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

02 như một kiểu trả về mới.    

Kiểu trả về tĩnh

Nếu kiểu trả về được chỉ định là

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

53 trong lớp
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

40 khai báo kiểu trả về
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

01, và do đó phải trả về giá trị kiểu
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

40, là lớp mà hàm được khai báo

Uncaught TypeError: Cannot assign string to property A::$var1 of type array|int
7

Đầu ra là

Uncaught TypeError: Cannot assign string to property A::$var1 of type array|int
8

Hàm khai báo kiểu trả về

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

01 phải thuộc về một lớp. Để chứng minh điều này, hãy khai báo
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

02 là kiểu trả về trong hàm toàn cục

Uncaught TypeError: Cannot assign string to property A::$var1 of type array|int
9

Một thông báo lỗi được hiển thị

var1;
echo $a->fn1("hello","php"); 
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

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

49, trong khi loại trả về
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

01 yêu cầu nó thuộc loại
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

40

var1;
echo $a->fn1("hello","php"); 
1

Thông báo lỗi sau đây được tạo ra

var1;
echo $a->fn1("hello","php"); 
2

Nếu lớp

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

49 mở rộng lớp
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

40, tập lệnh trước đó sẽ chạy ok và xuất ra
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

27

var1;
echo $a->fn1("hello","php"); 
3

Loại trả về

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

01 có thể được sử dụng trong loại kết hợp. Nếu
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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ụ,
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

01 được sử dụng trong một kiểu kết hợp trong tập lệnh

var1;
echo $a->fn1("hello","php"); 
4

Đầu ra là

var1;
echo $a->fn1("hello","php"); 
5

Không thể sử dụng loại

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

01 trong loại giao lộ. Để chứng minh điều này, hãy xem xét kịch bản sau

var1;
echo $a->fn1("hello","php"); 
6

Một thông báo lỗi được tạo ra

var1;
echo $a->fn1("hello","php"); 
7

loại trả về không bao giờ

Nếu kiểu trả về là

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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ề
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

02 là một kiểu con của mọi kiểu trả về khác. Điều này ngụ ý rằng
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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ề
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

02 phải thực hiện một trong các thao tác sau

  1. Ném một ngoại lệ
  2. Gọi
    var1;
    $a->var1="hello";
    echo $a->var1;
    $a->var1=array(
        "1" => "a",
        "2" => "b",
    );
    var_dump($a->var1);
    
    
    19
  3. Bắt đầu một vòng lặp vô hạn

Nếu một hàm trả về

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

02 không bao giờ được gọi, thì hàm đó có thể trống, như  một ví dụ

var1;
echo $a->fn1("hello","php"); 
8

Hàm

1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
34 trong lớp
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

40 không thể được gọi vì nó có nghĩa là hàm trả về
1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
36 ẩn. Để chứng minh, hãy sửa đổi tập lệnh trước thành

var1;
echo $a->fn1("hello","php"); 
9

Thông báo lỗi được tạo khi tập lệnh được chạy

1
hello
0

Tập lệnh sau sẽ tạo ra thông báo lỗi giống như điều kiện

1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
37 không bao giờ được đáp ứng và hàm trả về ngầm định
1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
36

1
hello
1

Không giống như kiểu trả về của

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

02

1
hello
2

Hàm có kiểu trả về là

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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à
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

02

1
hello
3

Một thông báo lỗi được tạo ra

1
hello
4

Nếu kiểu trả về là

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

02, thì hàm không được trả về mặc nhiên. Ví dụ: hàm
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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

1
hello
5

Một thông báo lỗi được hiển thị

1
hello
6

Việ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

1
hello
7

Ví dụ, một hàm trả về

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

02 có thể đưa ra một ngoại lệ

1
hello
8

Một hàm bao gồm vòng lặp vô hạn có thể khai báo kiểu trả về

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

02, như trong ví dụ

1
hello
9

Kiểu trả về

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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ụ

var1;
echo $a->fn1(); 
0

Loại trả về

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

02 trong một kiểu kết hợp

var1;
echo $a->fn1(); 
1

Một thông báo lỗi được hiển thị

var1;
echo $a->fn1(); 
2

Không thể sử dụng loại

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

49

var1;
echo $a->fn1(); 
3

Một thông báo lỗi được tạo ra

var1;
echo $a->fn1(); 
4

Các loại vô hướng không hỗ trợ bí danh

Kể 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

1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
54 được sử dụng thay vì
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

36, một thông báo cho biết rằng
1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
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 đó
1
hello
array(2) { [1]=> string(1) "a" [2]=> string(1) "b" }
57 được sử dụng làm loại tham số trong khai báo hàm

var1;
echo $a->fn1(); 
5

Đầu ra từ tập lệnh bao gồm một thông báo cảnh báo như sau

var1;
echo $a->fn1(); 
6

Trả về bằng tham chiếu từ hàm void không được dùng nữa

Kể từ PHP 8. 1, trả về theo tham chiếu từ hàm

var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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ề
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

55 không trả về giá trị. Để chứng minh điều này, hãy chạy đoạn script sau

var1;
echo $a->fn1(); 
7

Đầu ra là một thông báo phản đối

var1;
echo $a->fn1(); 
8

Tóm lược

Trong 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à

var1;
echo $a->fn1(); 
9 cũng như các loại trả về
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

01 và
var1;
$a->var1="hello";
echo $a->var1;
$a->var1=array(
    "1" => "a",
    "2" => "b",
);
var_dump($a->var1);

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 Vohra

Hiể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

Hàm PHP trả về kiểu đối tượng

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ày

nhậ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ây

chủ đề liên quan
  • Phát triển
  • Ngôn ngữ lập trình
  • Lập trình hệ thống
  • lập trình mệnh lệnh
  • NGUỒN SÁNG
  • Đám mây
  • PHP8. x Loạt bài báo

  • biên tập liên quan

  • Phổ biến trên InfoQ

    • Microsoft ra mắt VALL-E, Mô hình ngôn ngữ TTS thay đổi cuộc chơi
    • Các nhà phát triển AI phát hành triển khai mã nguồn mở của thuật toán đào tạo ChatGPT
    • Google cung cấp hướng dẫn toàn diện về độ tin cậy của cơ sở hạ tầng đám mây
    • Tìm kiếm các phép đo đầy đủ cho chất lượng bên ngoài, bên trong và quy trình trong phát triển phần mềm
    • Báo cáo Kubernetes cho thấy khối lượng công việc được định cấu hình kém đang gia tăng
    • Trao quyền cho phụ nữ trong lĩnh vực STEM & Xây dựng các nhóm hòa nhập thông qua nấu ăn

Nội dung liên quan

  • PHP 8 – Hàm và Phương thức

    Hàm PHP trả về kiểu đối tượng

  • PHP 8 - Các lớp và Enum

    Hàm PHP trả về kiểu đối tượng

  • PHP 8 — Thuộc tính, Biểu thức khớp và các cải tiến khác

    Hàm PHP trả về kiểu đối tượng

  • Báo cáo xu hướng InfoQ về AI, ML và Kỹ thuật dữ liệu—Tháng 8 năm 2022

    Hàm PHP trả về kiểu đối tượng

  • AWS Lambda hiện hỗ trợ đồng thời tối đa cho SQS dưới dạng nguồn sự kiện

  • Sáu cách tối ưu hóa WebAssembly

    Hàm PHP trả về kiểu đối tượng

  • Google cung cấp hướng dẫn toàn diện về độ tin cậy của cơ sở hạ tầng đám mây

  • Tính năng phân tích nhật ký trong nhật ký đám mây hiện có sẵn rộng rãi

  • Amazon Athena hiện hỗ trợ Apache Spark Engine

  • API xác thực địa chỉ của Google thường có sẵn để cải thiện độ chính xác của địa chỉ

  • Cách kiểm tra ranh giới cách ly lỗi của bạn trong đám mây

    Hàm PHP trả về kiểu đối tượng

  • AWS phát hành SimSpace Weaver cho mô phỏng không gian thời gian thực

  • Dịch vụ chuyển bộ nhớ của Google hiện hỗ trợ khả năng sao chép thời gian thực không cần máy chủ

  • Amazon S3 mã hóa tất cả các đối tượng mới bằng AES-256

  • AWS giới thiệu Bản đồ phân tán chức năng bước để xử lý dữ liệu song song quy mô lớn

  • Microfrontends chống mẫu. Bảy năm trong chiến hào

    Hàm PHP trả về kiểu đối tượng

  • Truy cập Zero Trust vào các ứng dụng doanh nghiệp với AWS Verified Access

  • Google Cloud giới thiệu các hành động nhạy cảm để cải thiện bảo mật cho tài khoản trả phí

  • Sử dụng công cụ mã để chèn lỗi ở cấp ứng dụng tại eBay

  • Kích thước máy ảo Ebsv5 được tối ưu hóa bộ nhớ mới của Microsoft trong Bản xem trước mang lại hiệu suất cao hơn

  • AWS công bố GA của cụm đàn hồi DocumentDB

  • Cách Starling xây dựng bộ xử lý thẻ của riêng họ

    Hàm PHP trả về kiểu đối tượng

  • InfoQ eMag - Báo cáo xu hướng InfoQ 2022

    Hàm PHP trả về kiểu đối tượng

  • Bơm nó lên. Thực sự thu được lợi ích từ Cloud Native Microservices

    Hàm PHP trả về kiểu đối tượng

  • Các tiêu chuẩn cộng đồng xung đột, bản địa đám mây và viễn thông

    Hàm PHP trả về kiểu đối tượng

  • Sử dụng Serverless WebSockets để kích hoạt tính năng nhắn tin theo thời gian thực

    Hàm PHP trả về kiểu đối tượng

  • Các bản phát hành mang tính quyết định, có thể tái sản xuất, không gây ngạc nhiên trong Kỷ nguyên không có máy chủ

    Hàm PHP trả về kiểu đối tượng

  • CloudFormation hoặc Terraform. Nền tảng Iac nào phù hợp nhất với bạn?

    Hàm PHP trả về kiểu đối tượng

  • Hành trình đến với quản lý API trên đám mây

    Hàm PHP trả về kiểu đối tượng

  • Bảo mật API và microservice trong đám mây

    Hàm PHP trả về kiểu đối tượng

  • Xây dựng, thử nghiệm và triển khai API REST có thể mở rộng trong Go

    Hàm PHP trả về kiểu đối tượng

  • Giao tiếp vi dịch vụ Polyglot bằng Dapr trên AKS

    Hàm PHP trả về kiểu đối tượng

  • Chuyển sang phương pháp tiếp cận trái để chuẩn hóa API

    Hàm PHP trả về kiểu đối tượng

  • Xây dựng hệ thống giao thông hiện đại với KubeEdge. Làm thế nào chúng tôi thực hiện nó

    Hàm PHP trả về kiểu đối tượng

  • Trò chuyện bên lò sưởi với Docker CTO

    Hàm PHP trả về kiểu đối tượng

  • Chọn cơ sở hạ tầng đám mây phù hợp cho khởi nghiệp SaaS của bạn

    Hàm PHP trả về kiểu đối tượng

  • Xây dựng quy trình làm việc với AWS Step Functions

    Hàm PHP trả về kiểu đối tượng

  • Xây dựng ứng dụng từ Edge đến Cloud

    Hàm PHP trả về kiểu đối tượng

  • Zero Trust có ý nghĩa gì đối với Kubernetes?

    Hàm PHP trả về kiểu đối tượng

  • Chức năng mạng gốc trên đám mây có ở đây

    Hàm PHP trả về kiểu đối tượng

Bản tin InfoQ

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