__ được đặt trong PHP là gì?
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 Show
Các tên hàmprivate $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 PHPMụ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; 24Nế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ó 1
2 class Student { 3 private $name; 4 private $email; 5 6
0
1
2
3
4
5
6
7
8
920 21 22 23 24 25 26 27 28 29 class Student {0 class Student {1 class Student {2 class Student {3 class Student {4 Trong ví dụ trên, khi bạn khởi tạo một đối tượng mới với private $name;26 private $name;27 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 ta đã 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; 31Phươ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 1
2 class Student { 3 private $name; 4 private $email; 5 6
0
1
2
3
4
5
6
7
8
920 21 23 private $name;8 24
226 42 28 44 29 20 class Student {1 22 class Student {3 private $email;0 25 private $email;2 27 private $email;4 private $email;5 class Student {0 private $email;7 class Student {2 private $email;9 50 51 52 53 54 55 56 57 58 class Student {4 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; 33Phươ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ó 1
2 class Student { 3 65 4 5 68 6
2
1
02
320
522
7
9
0921 23
1224
1426 class Student {4 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 thức 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ị chúng tôi đang cố đặt Phương pháp private $name; 38Trong 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 1
2 class Student { 3 65 4 5 68 6
2
1
02
320
5
7
34
9
221
3823
4024
4226 20 28 22 29 class Student {1
09class Student {3 private $email;0
12private $email;2
54private $email;4 private $email;5
57private $email;7
59private $email;9
6150 class Student {4 Phương pháp private $name; 42 và private $name; 43Nế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 1
2 class Student { 3
69418_______2 518_______73 6
75
120
322
5
7
09_______18_______9_______18_______9_______18_______9_______1Như bạn có thể thấy, chúng ta đã 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 pháp private $name;38, private $name;33 và private $name;42, một số bạn đang suy nghĩ về việc sử dụng chúng để quản lý tất cả các thành viên và phương pháp 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; 56Phươ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ụ 1
2 class Student {___ 3 65 425_______18_______95 618_______2
1
99
320
522
7
9_______18_______19_______0_______19_______019_______ 48Trong 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; 62Phươ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 1
2 class Student { 3 private $name; 4 private $email; 5 6
0
1
2
3
6
5
8
720
921 232 23
224 236 26 238 28 240 29 20 class Student {1 22 class Student {3 private $email;0 247 private $email;2 249 private $email;4 class Student {4 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; 71Phươ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 1
2 class Student { 3 private $name; 4 private $email; 5 261 6 263
1
3266
5
2
7
6
9
821 274 23 20 24 26 279 28
229 283 class Student {1 20 class Student {3 private $email;0 288 private $email;2
2private $email;4 292 private $email;5 20 private $email;7 22 private $email;9 class Student {4 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 pháp 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; 84Hai 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 giống với 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ả 1
2 class Student { 3 private $name; 4 private $email; 5 261 6 263
1
3266
5
2
7
6
9
821 274 23 20 24 26 class Student {26 28
229 class Student {30 class Student {1 20 class Student {3 private $email;0 class Student {35 private $email;2
2private $email;4 class Student {39 private $email;5 class Student {41 private $email;7 class Student {43 private $email;9 class Student {45 50 292 52 20 54 22 56 class Student {4 Cũng cần lưu ý rằng chỉ private $name;83 được gọi khi bạn đã xác định cả private $name;83 và private $name;70 cho một đối tượng. 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; 96Phươ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 1
2 class Student { 3 private $name; 4 private $email; 5 6
0
1
2
3
6
5
8
720
921 class Student {75 23
224 class Student {79 26 20 28 22 29 class Student {1 247 class Student {3 class Student {88 private $email;0 class Student {4 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 401Nế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 402 để 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 401 trong lớp của mình 1
2 class Student {94 3 22 4 5 class Student { 6 private $name;
1private $email;
3305
5
7308
9
221 312 23 20 24 26 317 28
229 321 class Student {1 20 class Student {3 22 private $email;0 private $email;2 328 private $email;4 330 private $email;5 class Student {4 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 định nghĩa phương thức 401, thì đối tượng nhân bản, 405, vẫn sẽ trỏ đến cùng một đối tượng 406 được tham chiếu bởi đối tượng 407. Do đó, bằng cách triển khai phương thức 401, chúng tôi đảm bảo rằng đối tượng 406 được sao chép cùng với đối tượng chính Phương pháp 410Phương thức ma thuật 410 đượ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 412. 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 1
2 class Student { 3 338 4 private $email; 5 342 6
1345
3
2
5349
720
922 21 23
0924 358 26 360 28 class Student {4 Phương thức này sẽ trả về một mảng gồm các cặp khóa-giá trị sẽ được hiển thị khi hàm 412 đượ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 412 Phương pháp 415Phương thức 415 là một phương thức tĩnh được sử dụng cùng với hàm 417. Hàm 417 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 415 trong lớp của mình 1
2 class Student { 3 338 4 370 5 6
0
1
2
3
6
5
8
720
921 384 23
224 388 26 390 28 392 29 class Student {1 395 class Student {3 20 private $email;0 22 private $email;2 private $email;4 private $name;02 private $email;5 private $name;04 private $email;7 private $name;06 private $email;9 class Student {4 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ậnTrong 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 Việc sử dụng __ get trong PHP là gì?__get() được sử dụng để đọc dữ liệu từ các thuộc tính không thể truy cập .
Phương thức thiết lập trong PHP là gì?Hàm isset() trong PHP. Hàm isset() là một hàm có sẵn của PHP, dùng để xác định một biến có được đặt hay không. Nếu một biến được coi là set, nghĩa là biến đó được khai báo và có giá trị khác NULL
__ phương thức __ 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. |