Ghi đè phương thức trong PHP W3schools
Các phương thức ma thuật là các phương thức đặc biệt ghi đè hành động mặc định của PHP khi một số hành động nhất định được thực hiện trên một đối tượng Show thận trọng Tất cả các tên phương thức bắt đầu bằng Các tên phương thức sau đây được coi là ma thuật. , , , , , , , , , , , , , , , , Và Cảnh báo Nếu các khai báo kiểu được sử dụng trong định nghĩa của một phương thức ma thuật, thì chúng phải giống với chữ ký được mô tả trong tài liệu này. Nếu không, một lỗi nghiêm trọng được phát ra. Trước PHP 8. 0. 0, không có chẩn đoán nào được phát ra. Tuy nhiên, và không được khai báo kiểu trả về; serialize() kiểm tra xem lớp có chức năng với tên ma thuật không. Nếu vậy, chức năng đó được thực thi trước bất kỳ tuần tự hóa nào. Nó có thể dọn sạch đối tượng và được cho là trả về một mảng có tên của tất cả các biến của đối tượng đó sẽ được tuần tự hóa. Nếu phương thức không trả về bất cứ thứ gì thì
Mục đích sử dụng của là chuyển giao dữ liệu đang chờ xử lý hoặc thực hiện các tác vụ dọn dẹp tương tự. Ngoài ra, chức năng này rất hữu ích nếu một đối tượng rất lớn không cần phải lưu hoàn toàn Ngược lại, unserialize() kiểm tra sự hiện diện của một hàm có tên ma thuật. Nếu có, chức năng này có thể tái tạo lại bất kỳ tài nguyên nào mà đối tượng có thể có Mục đích sử dụng của là để thiết lập lại bất kỳ kết nối cơ sở dữ liệu nào có thể đã bị mất trong quá trình tuần tự hóa và thực hiện các tác vụ khởi tạo lại khác Ví dụ #1 Ngủ và thức dậy
string(60) "A::__set_state(array( 'var1' => 5, 'var2' => 'foo', ))" object(A)#2 (2) { ["var1"]=> int(5) ["var2"]=> string(3) "foo" }0 string(60) "A::__set_state(array( 'var1' => 5, 'var2' => 'foo', ))" object(A)#2 (2) { ["var1"]=> int(5) ["var2"]=> string(3) "foo" }1 công khai __serialize(). mảng công khai __unserialize(mảng string(60) "A::__set_state(array( 'var1' => 5, 'var2' => 'foo', ))" object(A)#2 (2) { ["var1"]=> int(5) ["var2"]=> string(3) "foo" }2). khoảng trống serialize() kiểm tra xem lớp có chức năng với tên ma thuật không. Nếu vậy, chức năng đó được thực thi trước bất kỳ tuần tự hóa nào. Nó phải xây dựng và trả về một mảng kết hợp gồm các cặp khóa/giá trị đại diện cho dạng tuần tự hóa của đối tượng. Nếu không có mảng nào được trả về, TypeError sẽ bị ném
Mục đích sử dụng của là để xác định một biểu diễn tùy ý thân thiện với tuần tự hóa của đối tượng. Các phần tử của mảng có thể tương ứng với thuộc tính của đối tượng nhưng không bắt buộc Ngược lại, unserialize() kiểm tra sự hiện diện của một hàm có tên ma thuật. Nếu có, chức năng này sẽ được thông qua mảng khôi phục đã được trả về từ. Sau đó, nó có thể khôi phục các thuộc tính của đối tượng từ mảng đó khi thích hợp
Ví dụ #2 Tuần tự hóa và hủy tuần tự hóa
string(60) "A::__set_state(array( 'var1' => 5, 'var2' => 'foo', ))" object(A)#2 (2) { ["var1"]=> int(5) ["var2"]=> string(3) "foo" }7 string(60) "A::__set_state(array( 'var1' => 5, 'var2' => 'foo', ))" object(A)#2 (2) { ["var1"]=> int(5) ["var2"]=> string(3) "foo" }8 string(60) "A::__set_state(array( 'var1' => 5, 'var2' => 'foo', ))" object(A)#2 (2) { ["var1"]=> int(5) ["var2"]=> string(3) "foo" }9 công khai __toString(). sợi dây Phương thức này cho phép một lớp quyết định nó sẽ phản ứng như thế nào khi nó được coi như một chuỗi. Ví dụ, những gì object(C)#1 (1) { ["propSquared"]=> int(1764) }0 sẽ in Cảnh báo Kể từ PHP 8. 0. 0, giá trị trả về tuân theo ngữ nghĩa kiểu PHP tiêu chuẩn, nghĩa là nó sẽ bị ép buộc thành một chuỗi nếu có thể và nếu bị tắt Kể từ PHP 8. 0. 0, bất kỳ lớp nào chứa một phương thức cũng sẽ triển khai ngầm giao diện Stringable và do đó sẽ vượt qua kiểm tra kiểu cho giao diện đó. Nên triển khai giao diện một cách rõ ràng Trong PHP7. 4, giá trị được trả về phải là một chuỗi, nếu không sẽ xảy ra Lỗi Trước PHP 7. 4. 0, giá trị được trả về phải là một chuỗi, nếu không thì sẽ phát ra một lỗi nghiêm trọng object(C)#1 (1) { ["propSquared"]=> int(1764) }1 Cảnh báo Không thể đưa ra một ngoại lệ từ bên trong một phương thức trước PHP 7. 4. 0. Làm như vậy sẽ dẫn đến một lỗi nghiêm trọng Ví dụ #3 Ví dụ đơn giản object(C)#1 (1) { ["propSquared"]=> int(1764) }2 object(C)#1 (1) { ["propSquared"]=> int(1764) }3 object(C)#1 (1) { ["propSquared"]=> int(1764) }4 object(C)#1 (1) { ["propSquared"]=> int(1764) }5 Ví dụ trên sẽ xuất ra __gọi( object(C)#1 (1) { ["propSquared"]=> int(1764) }6). Phương thức được gọi khi tập lệnh cố gọi một đối tượng dưới dạng hàm Ví dụ #4 Sử dụng object(C)#1 (1) { ["propSquared"]=> int(1764) }7 Ví dụ trên sẽ xuất ra Ví dụ #5 Sử dụng object(C)#1 (1) { ["propSquared"]=> int(1764) }8 object(C)#1 (1) { ["propSquared"]=> int(1764) }9
Ví dụ trên sẽ xuất ra Array ( [0] => Array ( [id] => 3 [first_name] => Alice [last_name] => Gustav ) [1] => Array ( [id] => 2 [first_name] => Bob [last_name] => Filipe ) [2] => Array ( [id] => 1 [first_name] => John [last_name] => Do ) ) Array ( [0] => Array ( [id] => 1 [first_name] => John [last_name] => Do ) [1] => Array ( [id] => 2 [first_name] => Bob [last_name] => Filipe ) [2] => Array ( [id] => 3 [first_name] => Alice [last_name] => Gustav ) ) tĩnh __set_state (mảng Phương thức tĩnh này được gọi cho các lớp được xuất bởi var_export() Tham số duy nhất của phương thức này là một mảng chứa các thuộc tính đã xuất ở dạng Ví dụ #6 Sử dụng
Ví dụ trên sẽ xuất ra string(60) "A::__set_state(array( 'var1' => 5, 'var2' => 'foo', ))" object(A)#2 (2) { ["var1"]=> int(5) ["var2"]=> string(3) "foo" }
Phương thức này được gọi bởi var_dump() khi kết xuất một đối tượng để lấy các thuộc tính sẽ được hiển thị. Nếu phương thức không được xác định trên một đối tượng, thì tất cả các thuộc tính công khai, được bảo vệ và riêng tư sẽ được hiển thị Tính đa hình trong PHP w3schools là gì?Tính đa hình về cơ bản là một mẫu OOP cho phép nhiều lớp có các chức năng khác nhau thực thi hoặc chia sẻ một Giao diện chung . Tính hữu ích của tính đa hình là mã được viết trong các lớp khác nhau không có bất kỳ ảnh hưởng nào đến việc nó thuộc về lớp nào vì chúng được sử dụng theo cùng một cách.
Tại sao PHP không hỗ trợ đa kế thừa?Ngôn ngữ lập trình PHP thậm chí không hỗ trợ đa thừa kế/kế thừa. PHP chỉ hỗ trợ nhiều kế thừa bằng cách sử dụng các giao diện hoặc Đặc điểm trong PHP thay vì các lớp để chúng tôi có thể triển khai nó . Đặc điểm là một loại lớp cho phép nhiều lớp trường hợp, đối tượng, lớp và đặc điểm.
Làm cách nào để sử dụng đa kế thừa trong PHP?PHP không hỗ trợ đa kế thừa nhưng bằng cách sử dụng Giao diện trong PHP hoặc sử dụng Đặc điểm trong PHP thay vì lớp , chúng tôi có thể triển khai nó. Đặc điểm (Sử dụng Lớp cùng với Đặc điểm). Đặc điểm là một loại lớp cho phép đa kế thừa.
Quá tải và ghi đè trong PHP w3schools là gì?Nạp chồng và ghi đè hàm là tính năng OOP trong PHP. Trong nạp chồng hàm, nhiều hàm có thể có cùng chữ ký phương thức nhưng số lượng đối số khác nhau. Nhưng trong trường hợp ghi đè hàm, nhiều hàm sẽ có cùng chữ ký phương thức và số lượng đối số |