Вступ
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()
для статичних класів, все-таки було б корисно мати цю функціональність для класичних класів. Чи знаєте ви про якісь рухи в цьому напрямку?