Hướng dẫn php override parent property - php ghi đè thuộc tính mẹ
Vấn đề là bạn đang cố gắng làm điều gì đó theo cách mà nó hoàn toàn không phải là phải thực hiện. Có một chút khó khăn để nói những gì bạn đang cố gắng làm nhưng hy vọng nếu bạn nhìn vào mẫu của tôi, nó sẽ cho bạn thấy những gì đang xảy ra:
Các lớp đưa ra nhiều cách để kiểm soát hơn nữa những gì có thể được nhìn thấy bởi các lớp đó có nguồn gốc từ lớp hiện tại và bên ngoài. Điều này được thực hiện bằng cách sử dụng các từ khóa công khai, được bảo vệ và riêng tư. Khi được đặt thành công khai, các phương thức và thuộc tính có thể nhìn thấy cho mọi thứ nhưng chúng vẫn có thể nằm ngoài phạm vi. Nói tóm lại, vấn đề duy nhất bạn gặp phải là phương pháp B: AA () của bạn đã nằm ngoài phạm vi trong A :: BB (). Hãy nhớ rằng trong thực tế Baseclass có thể không nằm trong cùng một tệp như DerivingClass và một số dự án có thể không cần DerivingClass. Nếu bạn ghi nhớ điều đó, điều đó có ý nghĩa rằng bạn không thể sử dụng các phương thức thậm chí không được tải vào dự án. Trong mã của bạn, bạn đang thực hiện một ví dụ hoàn toàn mới của B trong phương thức A :: BB (). Đây là một mẫu thiết kế mà bạn gần như sẽ không bao giờ thấy ngoại trừ trong một vài loại chức năng cụ thể (được gọi là chức năng nhà máy vì chúng có nghĩa là để tạo các lớp có nguồn gốc từ trong một lớp cơ sở có mục đích). Tôi khá chắc chắn rằng đó không phải là những gì bạn đang làm ở đây vì đó không phải là điều bạn làm trong PHP rất thường xuyên vì PHP thường không đọc dữ liệu lớp nhị phân từ các tệp và trong các tình huống khác thường có những cách tốt hơn để hoàn thành công việc. Ẩn danh ¶ 6 năm trước Egingell tại Sisna Dot Com ¶
Quá tải tài sảnpublic__set (Chuỗi public__get (chuỗi public__isset (chuỗi công khai__unset (chuỗi __set () được chạy khi viết dữ liệu thành các thuộc tính không thể truy cập (được bảo vệ hoặc riêng tư) hoặc không tồn tại. __get () được sử dụng để đọc dữ liệu từ các thuộc tính không thể truy cập (được bảo vệ hoặc riêng tư) hoặc không tồn tại. __isset () được kích hoạt bằng cách gọi isset () hoặc trống () trên các thuộc tính không thể truy cập (được bảo vệ hoặc riêng tư) hoặc không tồn tại.isset() or empty() on inaccessible (protected or private) or non-existing properties. __unset () được gọi khi unset () được sử dụng trên các thuộc tính không thể tiếp cận (được bảo vệ hoặc riêng tư) hoặc không tồn tại.unset() is used on inaccessible (protected or private) or non-existing properties. Đối số $ name là tên của tài sản đang được tương tác. Đối số giá trị $ của phương thức __set () Chỉ định giá trị thuộc tính $ name'ed phải được đặt thành. Thuộc tính quá tải chỉ hoạt động trong bối cảnh đối tượng. Các phương pháp ma thuật này sẽ không được kích hoạt trong bối cảnh tĩnh. Do đó, các phương pháp này không nên được tuyên bố tĩnh. Một cảnh báo được đưa ra nếu một trong những phương pháp quá tải ma thuật được khai báo 0.
PHP sẽ không gọi một phương thức quá tải từ trong cùng một phương thức quá tải. Điều đó có nghĩa là, ví dụ, viết 6 7 8Ví dụ #1 Thuộc tính quá tải thông qua các phương thức __get (), __set (), __isset () và __unset () Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in Ví dụ trên sẽ xuất ra:Phương pháp quá tải __call(string
public__call (chuỗi public static__callstatic (chuỗi Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in0): hỗn hợp __call () được kích hoạt khi gọi các phương thức không thể truy cập trong bối 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 bối cảnh tĩnh. Đối số $ name là tên của phương thức được gọi. Đối số đối số $ là một mảng được liệt kê chứa các tham số được truyền đến phương thức $ name. Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in3 Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in4 Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in5 Ví dụ #1 Thuộc tính quá tải thông qua các phương thức __get (), __set (), __isset () và __unset () Calling object method 'runTest' in object context Calling static method 'runTest' in static context Ví dụ trên sẽ xuất ra: ¶ Phương pháp quá tải Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in6 Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in7 Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in8 Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in9 public__call (chuỗi public static__callstatic (chuỗi Calling object method 'runTest' in object context Calling static method 'runTest' in static context0 Calling object method 'runTest' in object context Calling static method 'runTest' in static context1 Calling object method 'runTest' in object context Calling static method 'runTest' in static context2 Calling object method 'runTest' in object context Calling static method 'runTest' in static context3 Calling object method 'runTest' in object context Calling static method 'runTest' in static context4 Calling object method 'runTest' in object context Calling static method 'runTest' in static context5 __call () được kích hoạt khi gọi các phương thức không thể truy cập trong bối 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 bối cảnh tĩnh. Calling object method 'runTest' in object context Calling static method 'runTest' in static context6 Calling object method 'runTest' in object context Calling static method 'runTest' in static context7 Calling object method 'runTest' in object context Calling static method 'runTest' in static context8 Calling object method 'runTest' in object context Calling static method 'runTest' in static context9 Đối số $ name là tên của phương thức được gọi. Đối số đối số $ là một mảng được liệt kê chứa các tham số được truyền đến phương thức $ name. ¶ public static__callstatic (chuỗi
Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in9
public__call (chuỗi public static__callstatic (chuỗi
Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in9 __call () được kích hoạt khi gọi các phương thức không thể truy cập trong bối 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 bối cảnh tĩnh.
Đối số $ name là tên của phương thức được gọi. Đối số đối số $ là một mảng được liệt kê chứa các tham số được truyền đến phương thức $ name. ¶ Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic ()
Theaceofthespade tại gmail dot com ¶ ¶ public static__callstatic (chuỗi
$name 8__call () được kích hoạt khi gọi các phương thức không thể truy cập trong bối 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 bối cảnh tĩnh.
Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in9 Đối số $ name là tên của phương thức được gọi. Đối số đối số $ là một mảng được liệt kê chứa các tham số được truyền đến phương thức $ name. ¶ Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic ()
Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in9 Theaceofthespade tại gmail dot com ¶ ¶ 10 năm trước
Ẩn danh ¶ ¶ Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic ()
$name 2Theaceofthespade tại gmail dot com ¶ ¶ __callstatic () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh tĩnh.
Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in9 Đối số $ name là tên của phương thức được gọi. Đối số đối số $ là một mảng được liệt kê chứa các tham số được truyền đến phương thức $ name. ¶ Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic ()
$name 0Theaceofthespade tại gmail dot com ¶ ¶ __callstatic () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh tĩnh.
Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in9 Đối số $ name là tên của phương thức được gọi. Đối số đối số $ là một mảng được liệt kê chứa các tham số được truyền đến phương thức $ name. ¶ Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic ()
Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in9 Theaceofthespade tại gmail dot com ¶ ¶ __callstatic () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh tĩnh.
$name 0Đối số $ name là tên của phương thức được gọi. Đối số đối số $ là một mảng được liệt kê chứa các tham số được truyền đến phương thức $ name. ¶ __callstatic () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh tĩnh.
Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic () ¶ Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic ()
00 01Theaceofthespade tại gmail dot com ¶ ¶ 10 năm trước 02 03 04 05Ẩn danh ¶ ¶ 10 năm trước 06 07 08 09 10Ẩn danh ¶ ¶ 6 năm trước 11 12Setting 'a' to '1' Getting 'a' 1 Is 'a' set? bool(true) Unsetting 'a' Is 'a' set? bool(false) 1 Let's experiment with the private property named 'hidden': Privates are visible inside the class, so __get() not used... 2 Privates not visible outside of class, so __get() is used... Getting 'hidden' Notice: Undefined property via __get(): hidden in9 Egingell tại Sisna Dot Com ¶ ¶ Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic () 14 15 16 17 18 19Theaceofthespade tại gmail dot com ¶ ¶ __callstatic () được kích hoạt khi gọi các phương thức không thể truy cập trong bối cảnh tĩnh. 20 21 22 23
25Đối số $ name là tên của phương thức được gọi. Đối số đối số $ là một mảng được liệt kê chứa các tham số được truyền đến phương thức $ name. ¶ Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic () 26 27 04 29Theaceofthespade tại gmail dot com ¶ ¶ Ví dụ #2 Phương thức quá tải thông qua các phương thức __call () và __callstatic () 30 31 32 33 34Devildude tại Darkmaker dot com ¶ ¶ 18 năm trước 35 |