Tôi đã đấu tranh trong khu vực này trong nhiều ngày, và tôi đã đi đến kết luận, nhưng vì kết luận không phải là thứ tôi đang tìm kiếm, trước khi tôi từ bỏ, tôi sẽ cố gắng xem những người khác nói. Đức tin chết cuối cùng ...Mở rộng các lớp tĩnh PHP
Giả sử chúng ta có một siêu lớp (được gọi là "Siêu") và một lớp con (được gọi là "Phụ").
class Super {
protected static $title = 'super';
public static function get_class_name()
{
echo __CLASS__;
}
public static function get_title()
{
echo self::$title;
}
}
class Sub extends Super {
protected static $title = 'sub';
}
Bây giờ, có lẽ bạn sẽ thừa kế tất cả các phương thức của Super, tuy nhiên, dường như chỉ nhận được tham chiếu đến phương thức của Phụ.
Tôi nói điều này bởi vì nếu tôi gọi:
Sub::get_class_name();
đầu ra là "Super", và không phải là "con".
Và nếu tôi gọi:
Sub::get_title();
một lần nữa, kết quả là "siêu", và tôi thậm chí có tiêu đề $ khai báo trong Sub. Vì vậy, điều này có nghĩa là khi tôi gọi một hàm tĩnh kế thừa, phạm vi của hàm sẽ là lớp siêu, không phải là lớp được gọi (ngay cả khi bạn in backtrace, nó sẽ chỉ ra rằng cuộc gọi được thực hiện trên lớp cha! !!), và để có được phạm vi như lớp con mà cuộc gọi đang được thực hiện, tôi cần phải redeclare phương thức đó bên trong lớp con đó. Loại này đánh bại mục đích mở rộng lớp học, phải không?
Vì vậy, câu hỏi của tôi là, tôi có thể mở rộng một lớp tĩnh, gọi một trong các phương thức kế thừa và có phạm vi của lớp con không? hoặc ít nhất để có thể xác định tên lớp của nó? Và nếu không, tại sao tôi lại muốn mở rộng các lớp tĩnh?
Cảm ơn!
OK, giờ tôi đã hiểu. – treznik