Giới thiệu
PHP cho phép bạn quá tải các cuộc gọi phương thức và truy cập thuộc tính bằng cách khai báo các phương thức ma thuật trong các lớp. Điều này cho phép mã như:
class Foo {
public function __get($name) { return 42; }
}
$foo = new Foo;
echo $foo->missingProperty; // prints "42"
Ngoài việc nạp chồng các thuộc tính và phương thức cá thể, vì PHP 5.3.0, chúng ta cũng có thể nạp chồng static
các phương thức gọi bằng cách ghi đè phương thức ma thuật __callStatic
.
Một cái gì đó mất tích
Điều còn thiếu rõ ràng từ chức năng có sẵn là khả năng quá tải các thuộc tính tĩnh , ví dụ:
echo Foo::$missingProperty; // fatal error: access to undeclared static property
Hạn chế này rõ ràng là tài liệu :
Quá tải tài sản chỉ hoạt động trong bối cảnh đối tượng. Những phương thức 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 khai báo
static
. Kể từ PHP 5.3.0, một cảnh báo được đưa ra nếu một trong những phương thức nạp chồng ma thuật được khai báostatic
.
Nhưng tại sao?
Câu hỏi của tôi là:
- Có một lý do kỹ thuật mà chức năng này hiện không được hỗ trợ? Hoặc có lẽ là một lý do chính trị (rùng mình)?
- Đã có bất kỳ nỗ lực bị hủy bỏ để thêm chức năng này trong quá khứ?
Quan trọng nhất, câu hỏi không phải là "làm thế nào tôi có thể có các thuộc tính tĩnh động trong PHP của người dùng?". Điều đó nói rằng, nếu bạn biết về một triển khai đặc biệt dễ thương dựa trên __callStatic
điều bạn muốn chia sẻ thì bằng mọi cách hãy làm như vậy.
__getStatic()
và__setStatic()
trên các lớp tĩnh , nhưng vẫn có ích khi có chức năng này cho các lớp khả thi. Bạn có biết bất kỳ động thái theo hướng này?