__toString PHP

Cho dù bạn là nhà phát triển PHP dày dạn kinh nghiệm hay người mới làm quen với việc phát triển PHP, nếu bạn đã làm việc với OOP trong PHP, thì bạn đã sử dụng ít nhất một vài phương thức kỳ diệu của PHP rồi. Tuy nhiên, nếu bạn chưa nghe nói về các phương thức ma thuật PHP, hãy để tôi giới thiệu chúng

Các tên hàm
    private $name;
09,
    private $name;
10,
    private $name;
11,
    private $name;
12,
    private $name;
13,
    private $name;
14,
    private $name;
15,
    private $name;
16,
    private $name;
17,
    private $name;
18,
    private $name;
19,
    private $name;
20,
    private $name;
21,
    private $name;
22 và
    private $name;
23 thật kỳ diệu trong các lớp học PHP. Bạn không thể có các chức năng với những tên này trong bất kỳ lớp nào của mình trừ khi bạn muốn chức năng kỳ diệu được liên kết với chúng. Tất cả các phương thức ma thuật PHẢI được khai báo là công khai

Nếu bạn thắc mắc tại sao các phương thức này được gọi là phương thức ma thuật, thì đó là bởi vì nếu bạn định nghĩa một trong các phương thức này trong lớp của mình, thì nó sẽ được gọi tự động và bạn chỉ cần xác định điều gì sẽ xảy ra bên trong nó. Ví dụ tốt nhất về một phương thức ma thuật là hàm

    private $name;
24, được gọi tự động khi đối tượng được khởi tạo

Nói chung, các phương thức ma thuật trong PHP cho phép bạn thực hiện nhiều loại thao tác khác nhau với các đối tượng. Chúng cũng cho phép bạn xử lý một số loại tình huống bằng cách điều khiển các đối tượng

Phương pháp ma thuật PHP

Mục đích của bài viết này là đi qua tất cả các phương thức kỳ diệu trong PHP và giải thích ngắn gọn từng phương thức

Phương pháp
    private $name;
24

Nếu bạn định nghĩa phương thức này trong lớp của mình, nó sẽ tự động được gọi khi một đối tượng được khởi tạo. Mục đích của phương thức này là gán một số giá trị mặc định cho thuộc tính đối tượng. Phương thức này còn được gọi là hàm tạo

Hãy xem một ví dụ nhanh để hiểu cách thức hoạt động của nó

    private $name;
7
    private $name;
8
    private $name;
9
    private $name;
0
    private $name;
1
    private $name;
    private $name;
3
    private $name;
4
    private $name;
5
    private $name;
6
    private $name;
80
    private $name;
81
    private $name;
82
    private $name;
83
    private $name;
84
    private $name;
85
    private $name;
86
    private $name;
87
    private $name;
88
    private $name;
89
    private $name;
90
    private $name;
91
    private $name;
92
    private $name;
93
    private $name;
94
    private $name;
95
    private $name;
96
    private $name;
97
    private $name;
98
    private $name;
99
    private $name;
00
    private $name;
01
    private $name;
02
    private $name;
03
    private $name;
04

Trong ví dụ trên, khi bạn khởi tạo một đối tượng mới với

    private $name;
26____027
    private $name;
28, nó sẽ gọi phương thức
    private $name;
24 ngay từ đầu. Trong phương thức
    private $name;
24, chúng tôi đã gán các giá trị được truyền trong các đối số cho các thuộc tính của đối tượng

Hãy nhớ rằng hàm tạo của lớp cha sẽ không được gọi ngầm nếu lớp con đã định nghĩa hàm tạo của chính nó

Phương pháp
    private $name;
31

Phương thức

    private $name;
31 được gọi là hàm hủy và nó được gọi khi đối tượng bị hủy. Nói chung, nó cũng được gọi khi tập lệnh bị dừng hoặc thoát. Mục đích của phương pháp này là tạo cơ hội lưu trạng thái đối tượng hoặc bất kỳ hoạt động dọn dẹp nào khác mà bạn muốn thực hiện

Hãy cùng xem ví dụ sau

    private $name;
7
    private $name;
8
    private $name;
9
    private $name;
0
    private $name;
1
    private $name;
    private $name;
3
    private $name;
4
    private $name;
5
    private $name;
6
    private $name;
80
    private $name;
81
    private $name;
82
    private $name;
83
    private $name;
84
    private $name;
85
    private $name;
86
    private $name;
87
    private $name;
88
    private $name;
89
    private $name;
90
    private $name;
91
    private $name;
93
    private $name;
8
    private $name;
94
    private $name;
82
    private $name;
96
    private $name;
32
    private $name;
98
    private $name;
34
    private $name;
99
    private $name;
90
    private $name;
01
    private $name;
92
    private $name;
03
    private $name;
40
    private $name;
95
    private $name;
42
    private $name;
97
    private $name;
44
    private $name;
45
    private $name;
00
    private $name;
47
    private $name;
02
    private $name;
49
    private $name;
50
    private $name;
51
    private $name;
52
    private $name;
53
    private $name;
54
    private $name;
55
    private $name;
56
    private $name;
57
    private $name;
58
    private $name;
04

Cũng giống như các hàm tạo, một phần tử con cũng có thể kế thừa hàm hủy của cha mẹ nếu nó không có phần triển khai của riêng nó.

Phương pháp
    private $name;
33

Phương thức ma thuật

    private $name;
33 được gọi khi bạn cố gắng đặt dữ liệu thành các thuộc tính đối tượng không thể truy cập hoặc không tồn tại. Mục đích của phương pháp này là thiết lập dữ liệu đối tượng bổ sung mà bạn chưa xác định rõ ràng các thuộc tính đối tượng

Hãy quay lại ví dụ của chúng tôi để hiểu cách thức hoạt động của nó

    private $name;
7__
    private $name;
8
    private $name;
9
    private $name;
0
    private $name;
1
    private $name;
65
    private $name;
3
    private $name;
5
    private $name;
68
    private $name;
6
    private $name;
82
    private $name;
81
    private $name;
802
    private $name;
83
    private $name;
90
    private $name;
85
    private $name;
92
    private $name;
87
    private $name;
89
    private $name;
809
    private $name;
91
    private $name;
93
    private $name;
812
    private $name;
94
    private $name;
814
    private $name;
019

Như bạn có thể thấy trong ví dụ trên, chúng tôi đang cố gắng đặt thuộc tính

    private $name;
35 không tồn tại. Và do đó, phương pháp
    private $name;
33 được gọi là. Đối số đầu tiên của phương thức
    private $name;
33 là tên của thuộc tính đang được truy cập và đối số thứ hai là giá trị mà chúng tôi đang cố gắng đặt

Phương pháp
    private $name;
38

Trong trường hợp ví dụ về phương thức

    private $name;
33 trong phần trước, chúng ta đã thảo luận cách đặt giá trị cho các thuộc tính không tồn tại. Phương pháp
    private $name;
38 hoàn toàn ngược lại với nó. Phương thức ma thuật
    private $name;
38 được gọi khi bạn cố đọc dữ liệu từ các thuộc tính đối tượng không thể truy cập hoặc không tồn tại. Mục đích của phương pháp này là cung cấp các giá trị cho các thuộc tính đó

Hãy xem nó hoạt động như thế nào

    private $name;
7
    private $name;
8
    private $name;
9
    private $name;
0
    private $name;
1
    private $name;
65
    private $name;
3
    private $name;
5
    private $name;
68
    private $name;
6
    private $name;
82
    private $name;
81
    private $name;
802
    private $name;
83
    private $name;
90
    private $name;
85
    private $name;
87
    private $name;
834
    private $name;
89
    private $name;
82
    private $name;
91
    private $name;
838
    private $name;
93
    private $name;
840
    private $name;
94
    private $name;
842
    private $name;
96
    private $name;
90
    private $name;
98
    private $name;
92
    private $name;
99
    private $name;
01
    private $name;
809
    private $name;
03
    private $name;
40
    private $name;
812
    private $name;
42
    private $name;
854
    private $name;
44
    private $name;
45
    private $name;
857
    private $name;
47
    private $name;
859
    private $name;
49
    private $name;
861
    private $name;
50
    private $name;
04

Phương pháp
    private $name;
42 và
    private $name;
43

Nếu các phương thức

    private $name;
38 và
    private $name;
33 được gọi khi bạn đang xử lý các thuộc tính không tồn tại, thì phương thức
    private $name;
42 được gọi khi bạn đang cố gọi các phương thức không thể truy cập, các phương thức mà bạn chưa định nghĩa trong lớp của mình

    private $name;
7__
    private $name;
8
    private $name;
9
    private $name;
0
    private $name;
1
    private $name;
869
    private $name;
3
    private $name;
82
    private $name;
5
    private $name;
873
    private $name;
6
    private $name;
875
    private $name;
81
    private $name;
90
    private $name;
83
    private $name;
92
    private $name;
85
    private $name;
87
    private $name;
809
    private $name;
89
    private $name;
884
    private $name;
91
    private $name;
04

Như bạn có thể thấy, chúng tôi đã gọi phương thức là

    private $name;
47, phương thức này không được định nghĩa và do đó, phương thức ma thuật
    private $name;
42 được gọi là. Đối số đầu tiên là tên của phương thức được gọi và đối số thứ hai là một mảng các đối số được truyền trong phương thức đó

Phương thức

    private $name;
43 rất giống với phương thức
    private $name;
42. Ngoại lệ duy nhất là nó được gọi khi bạn đang cố gọi các phương thức không thể truy cập trong ngữ cảnh tĩnh. Vì vậy, nếu bạn đang cố truy cập bất kỳ phương thức tĩnh nào chưa được xác định, thì hàm
    private $name;
43 sẽ được gọi

Sau khi đọc về các phương thức

    private $name;
38,
    private $name;
33 và
    private $name;
42, một số bạn đang nghĩ đến việc sử dụng chúng để quản lý tất cả các thành viên và phương thức của lớp học. Chỉ cần cố gắng tránh đặt nhiều mã của bạn vào chúng. Việc có các định nghĩa phương thức rõ ràng để nhận và thiết lập các thành viên hoặc định nghĩa các phương thức lớp thường tốt hơn cho khả năng đọc và bảo trì.

Phương pháp
    private $name;
55 và
    private $name;
56

Phương thức ma thuật

    private $name;
55 được gọi khi bạn gọi phương thức
    private $name;
58 trên các thuộc tính đối tượng không thể truy cập hoặc không tồn tại. Hãy xem cách nó hoạt động thông qua một ví dụ

    private $name;
7__
    private $name;
8
    private $name;
9
    private $name;
0
    private $name;
1
    private $name;
65
    private $name;
3
    private $name;
5
    private $name;
895
    private $name;
6
    private $name;
82
    private $name;
81
    private $name;
899
    private $name;
83
    private $name;
90
    private $name;
85
    private $name;
92
    private $name;
87
    private $name;
89
    private $name;
809
    private $name;
91
    private $name;
908
    private $name;
93
    private $name;
04

Trong ví dụ trên, thuộc tính phone không được định nghĩa trong lớp và do đó, nó sẽ gọi phương thức

    private $name;
55

Mặt khác,

    private $name;
56 là một phương thức được gọi khi bạn gọi phương thức
    private $name;
61 trên các thuộc tính đối tượng không thể truy cập hoặc không tồn tại

Phương pháp
    private $name;
62

Phương thức ma thuật

    private $name;
62 cho phép bạn xác định những gì bạn muốn hiển thị khi một đối tượng của lớp được xử lý như một chuỗi. Nếu bạn sử dụng
    private $name;
64 hoặc
    private $name;
65 trên đối tượng của mình và bạn chưa xác định phương thức
    private $name;
62, nó sẽ báo lỗi

Hãy cố gắng hiểu nó với ví dụ sau

    private $name;
7
    private $name;
8
    private $name;
9
    private $name;
0
    private $name;
1
    private $name;
    private $name;
3
    private $name;
4
    private $name;
5
    private $name;
6
    private $name;
80
    private $name;
81
    private $name;
82
    private $name;
83
    private $name;
86
    private $name;
85
    private $name;
88
    private $name;
87
    private $name;
90
    private $name;
89
    private $name;
91
    private $name;
932
    private $name;
93
    private $name;
82
    private $name;
94
    private $name;
936
    private $name;
96
    private $name;
938
    private $name;
98
    private $name;
940
    private $name;
99
    private $name;
90
    private $name;
01
    private $name;
92
    private $name;
03
    private $name;
40
    private $name;
947
    private $name;
42
    private $name;
949
    private $name;
44
    private $name;
04

Trong ví dụ trên, khi bạn lặp lại đối tượng

    private $name;
67, nó sẽ gọi phương thức
    private $name;
62. Trong phương pháp đó, bạn có thể quyết định những gì bạn muốn hiển thị. Nếu bạn chưa định nghĩa phương thức
    private $name;
62, điều này sẽ dẫn đến lỗi

Phương pháp
    private $name;
70 và
    private $name;
71

Phương pháp ma thuật

    private $name;
70 khác so với các phương pháp mà chúng ta đã thảo luận cho đến nay. Nó được gọi khi bạn gọi hàm
    private $name;
73 trên đối tượng. Trong trường hợp đối tượng rất lớn, bạn chỉ muốn lưu các thuộc tính đã chọn trong quá trình tuần tự hóa và dọn dẹp đối tượng. Phương thức
    private $name;
70 phải trả về một mảng có tên của tất cả các thuộc tính của đối tượng sẽ được tuần tự hóa

Một lần nữa, hãy sửa lại ví dụ của chúng tôi để xem nó hoạt động như thế nào

    private $name;
7
    private $name;
8
    private $name;
9
    private $name;
0
    private $name;
1
    private $name;
    private $name;
3
    private $name;
4
    private $name;
5
    private $name;
961
    private $name;
6
    private $name;
963
    private $name;
81
    private $name;
83
    private $name;
966
    private $name;
85
    private $name;
82
    private $name;
87
    private $name;
86
    private $name;
89
    private $name;
88
    private $name;
91
    private $name;
974
    private $name;
93
    private $name;
90
    private $name;
94
    private $name;
96
    private $name;
979
    private $name;
98
    private $name;
82
    private $name;
99
    private $name;
983
    private $name;
01
    private $name;
90
    private $name;
03
    private $name;
40
    private $name;
988
    private $name;
42
    private $name;
82
    private $name;
44
    private $name;
992
    private $name;
45
    private $name;
90
    private $name;
47
    private $name;
92
    private $name;
49
    private $name;
04

Trong ví dụ trên, khi bạn

    private $name;
73 đối tượng
    private $name;
76, nó sẽ gọi phương thức
    private $name;
70 và nó sẽ chỉ bảo toàn các giá trị của các biến
    private $name;
78,
    private $name;
79 và
    private $name;
35

Mặt khác, việc sử dụng phương thức ma thuật

    private $name;
71 là để thiết lập lại bất kỳ kết nối nào và khởi động các tác vụ khi hàm
    private $name;
82 được gọi trên đối tượng

Phương pháp
    private $name;
83 và
    private $name;
84

Hai phương thức ma thuật mới có tên là

    private $name;
83 và
    private $name;
84 đã được giới thiệu trong PHP 7. 4. Về nhiều mặt, chúng tương tự như phương pháp
    private $name;
70 và
    private $name;
71, nhưng chúng giúp chúng ta khắc phục một số hạn chế của cả hai phương pháp này. Chẳng hạn, việc tạo một biểu diễn được tuần tự hóa của một đối tượng khác với dạng trong bộ nhớ của đối tượng sẽ khó khăn với
    private $name;
70 và yêu cầu sử dụng các thuộc tính giả

    private $name;
7
    private $name;
8
    private $name;
9
    private $name;
0
    private $name;
1
    private $name;
    private $name;
3
    private $name;
4
    private $name;
5
    private $name;
961
    private $name;
6
    private $name;
963
    private $name;
81
    private $name;
83
    private $name;
966
    private $name;
85
    private $name;
82
    private $name;
87
    private $name;
86
    private $name;
89
    private $name;
88
    private $name;
91
    private $name;
974
    private $name;
93
    private $name;
90
    private $name;
94
    private $name;
96
    private $name;
026
    private $name;
98
    private $name;
82
    private $name;
99
    private $name;
030
    private $name;
01
    private $name;
90
    private $name;
03
    private $name;
40
    private $name;
035
    private $name;
42
    private $name;
82
    private $name;
44
    private $name;
039
    private $name;
45
    private $name;
041
    private $name;
47
    private $name;
043
    private $name;
49
    private $name;
045
    private $name;
50
    private $name;
992
    private $name;
52
    private $name;
90
    private $name;
54
    private $name;
92
    private $name;
56
    private $name;
04

Cũng cần lưu ý rằng chỉ có _____

    private $name;
83 được gọi khi bạn đã xác định cả _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _. Tương tự, chỉ
    private $name;
84 được gọi khi bạn đã xác định cả
    private $name;
84 và
    private $name;
71 cho một đối tượng

Phương pháp
    private $name;
96

Phương thức ma thuật

    private $name;
96 là một phương thức đặc biệt được gọi khi bạn cố gắng gọi một đối tượng như thể nó là một hàm. Đầu tiên, hãy xem nó hoạt động như thế nào, sau đó chúng ta sẽ xem mục đích của phương pháp kỳ diệu này

    private $name;
7
    private $name;
8
    private $name;
9
    private $name;
0
    private $name;
1
    private $name;
    private $name;
3
    private $name;
4
    private $name;
5
    private $name;
6
    private $name;
80
    private $name;
81
    private $name;
82
    private $name;
83
    private $name;
86
    private $name;
85
    private $name;
88
    private $name;
87
    private $name;
90
    private $name;
89
    private $name;
91
    private $name;
075
    private $name;
93
    private $name;
82
    private $name;
94
    private $name;
079
    private $name;
96
    private $name;
90
    private $name;
98
    private $name;
92
    private $name;
99
    private $name;
01
    private $name;
947
    private $name;
03
    private $name;
088
    private $name;
40
    private $name;
04

Như bạn có thể thấy, đối tượng

    private $name;
67 được xử lý như thể nó là một hàm và như chúng ta đã định nghĩa phương thức
    private $name;
96, nó sẽ được gọi thay vì báo lỗi cho bạn. Mục đích chính của phương thức
    private $name;
96 là nếu bạn muốn coi các đối tượng của mình là có thể gọi được, bạn có thể triển khai phương thức này

Phương pháp
    private $name;
301

Nếu bạn muốn sao chép một đối tượng hiện có, bạn có thể sử dụng từ khóa

    private $name;
302 để làm điều đó. Nhưng sau khi sao chép, nếu bạn muốn sửa đổi các thuộc tính của đối tượng được sao chép, bạn có thể định nghĩa phương thức ma thuật
    private $name;
301 trong lớp của mình

    private $name;
7
    private $name;
8
    private $name;
9
    private $name;
094
    private $name;
1
    private $name;
92
    private $name;
3
    private $name;
5
    private $name;
0
    private $name;
6
    private $name;
    private $name;
81
    private $name;
4
    private $name;
83
    private $name;
105
    private $name;
85
    private $name;
87
    private $name;
108
    private $name;
89
    private $name;
82
    private $name;
91
    private $name;
112
    private $name;
93
    private $name;
90
    private $name;
94
    private $name;
96
    private $name;
117
    private $name;
98
    private $name;
82
    private $name;
99
    private $name;
121
    private $name;
01
    private $name;
90
    private $name;
03
    private $name;
92
    private $name;
40
    private $name;
42
    private $name;
128
    private $name;
44
    private $name;
130
    private $name;
45
    private $name;
04

Vấn đề với cách tiếp cận trên là nó tạo một bản sao nông của đối tượng trong khi sao chép và do đó các đối tượng bên trong của đối tượng được sao chép sẽ không được sao chép

Trong ngữ cảnh của ví dụ trên, nếu bạn chưa xác định phương thức

    private $name;
301, đối tượng nhân bản,
    private $name;
305, vẫn sẽ trỏ đến cùng một đối tượng
    private $name;
306 được tham chiếu bởi đối tượng
    private $name;
307. Do đó, bằng cách triển khai phương thức
    private $name;
301, chúng tôi đảm bảo rằng đối tượng
    private $name;
306 được sao chép cùng với đối tượng chính

Phương pháp
    private $name;
310

Phương thức ma thuật

    private $name;
310 được gọi khi bạn cố kết xuất một đối tượng bằng cách sử dụng hàm
    private $name;
312. Nếu bạn chưa định nghĩa phương thức này trong lớp của mình, nó sẽ kết xuất tất cả các thuộc tính công khai, riêng tư và được bảo vệ. Vì vậy, nếu bạn muốn hạn chế thông tin được hiển thị trong khi kết xuất, bạn có thể sử dụng phương pháp này

    private $name;
7__
    private $name;
8_______19
    private $name;
0
    private $name;
1
    private $name;
138
    private $name;
3
    private $name;
4
    private $name;
5
    private $name;
142
    private $name;
6
    private $name;
81
    private $name;
145
    private $name;
83
    private $name;
82
    private $name;
85
    private $name;
149
    private $name;
87
    private $name;
90
    private $name;
89
    private $name;
92
    private $name;
91
    private $name;
93
    private $name;
809_______1949
    private $name;
94
    private $name;
215___1

Phương thức này sẽ trả về một mảng các cặp khóa-giá trị sẽ được hiển thị khi hàm

    private $name;
312 được gọi trên đối tượng. Như bạn có thể thấy, bạn hoàn toàn có thể kiểm soát những gì bạn muốn hiển thị khi đổ đối tượng bằng hàm
    private $name;
312

Phương pháp
    private $name;
315

Phương thức

    private $name;
315 là một phương thức tĩnh được sử dụng cùng với hàm
    private $name;
317. Hàm
    private $name;
317 xuất thông tin có cấu trúc về một biến. Khi bạn sử dụng chức năng này để xuất các lớp, bạn cần xác định phương thức
    private $name;
315 trong lớp của mình

    private $name;
7
    private $name;
8
    private $name;
9
    private $name;
0
    private $name;
1
    private $name;
138
    private $name;
3
    private $name;
170
    private $name;
5
    private $name;
6
    private $name;
80
    private $name;
81
    private $name;
82
    private $name;
83
    private $name;
86
    private $name;
85
    private $name;
88
    private $name;
87
    private $name;
90
    private $name;
89
    private $name;
91
    private $name;
184
    private $name;
93
    private $name;
82
    private $name;
94
    private $name;
188
    private $name;
96
    private $name;
190
    private $name;
98
    private $name;
192
    private $name;
99
    private $name;
01
    private $name;
195
    private $name;
03
    private $name;
90
    private $name;
40
    private $name;
92
    private $name;
42
    private $name;
44
    private $name;
02
    private $name;
45
    private $name;
04
    private $name;
47
    private $name;
06
    private $name;
49
    private $name;
04

Như bạn có thể thấy, chuỗi đã xuất là mã PHP hợp lệ và bạn có thể sử dụng nó để khôi phục đối tượng ban đầu

Phần kết luận

Trong bài viết này, chúng ta đã đi qua tất cả các phương thức kỳ diệu có sẵn trong PHP. Đối với mọi phương pháp, tôi đã cung cấp một ví dụ ngắn nhưng có ý nghĩa để giúp bạn hiểu mục đích của nó. Và tôi hy vọng bạn có thể sử dụng bài viết này như một tài liệu tham khảo nhanh hoặc một bảng hướng dẫn trong quá trình phát triển PHP hàng ngày của bạn

Bài đăng này đã được cập nhật với sự đóng góp từ Monty Shokeen. Monty là một nhà phát triển full-stack, người cũng thích viết hướng dẫn và tìm hiểu về các thư viện JavaScript mới

__ Tostring trong PHP là gì?

Phương thức __toString[] cho phép một lớp quyết định nó sẽ phản ứng như thế nào khi nó được xử lý như một chuỗi . Ví dụ: what echo $obj; . Cảnh báo. Kể từ PHP 8. 0.

Hàm __ trong PHP là gì?

__FUNCTION__ và __METHOD__ như trong PHP 5. 0. 4 là vậy. __FUNCTION__ chỉ trả về tên của hàm . trong khi __METHOD__ trả về tên của lớp cùng với tên của hàm.

__ cuộc gọi [] trong PHP là gì?

__call[] được kích hoạt khi gọi các phương thức không thể truy cập trong ngữ cảnh đối tượng . __callStatic[] được kích hoạt khi gọi các phương thức không thể truy cập trong ngữ cảnh tĩnh. Đối số $name là tên của phương thức được gọi.

Chủ Đề