__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 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ó 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; 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 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; 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ó 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; 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 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; 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 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; 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ụ 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; 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 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; 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 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; 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 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; 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 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; 301Nế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; 310Phươ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; 315Phươ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ậ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 __ 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. |