вступление
PHP позволяет перегружать вызовы методов и доступ к свойствам , объявляя магические методы в классах. Это включает код, такой как:
class Foo {
public function __get($name) { return 42; }
}
$foo = new Foo;
echo $foo->missingProperty; // prints "42"
Помимо перегрузки свойств и методов экземпляра, начиная с PHP 5.3.0, мы также можем перегружать static
вызовы методов, переопределяя магический метод __callStatic
.
Что-то пропало
Чего явно не хватает в доступной функциональности, так это возможности перегрузки статических свойств , например:
echo Foo::$missingProperty; // fatal error: access to undeclared static property
Это ограничение четко задокументировано :
Перегрузка свойств работает только в контексте объекта. Эти магические методы не будут запускаться в статическом контексте. Поэтому эти методы не должны быть объявлены
static
. Начиная с PHP 5.3.0, выдается предупреждение, если объявлен один из магических методов перегрузкиstatic
.
Но почему?
Мои вопросы:
- Есть ли техническая причина, по которой эта функция в настоящее время не поддерживается? Или, может быть, (дрожь) политическая причина?
- Были ли какие-либо прерванные попытки добавить эту функцию в прошлом?
Самое главное, вопрос не в том, «как я могу иметь динамические статические свойства в пользовательском PHP?». Тем не менее, если вы знаете об очень симпатичной реализации, основанной на __callStatic
том, что вы хотите поделиться, то обязательно сделайте это.
__getStatic()
и__setStatic()
на статических классах, все равно было бы полезно иметь эту функцию для инстанциируемых классов. Вам известны какие-либо шаги в этом направлении?