Замена глобальных переменных
Привет. Есть Legacy-приложение, в котором вовсю используются глобальные переменные. Для этого приложения пишутся дополнения, как в процедурном, так и в ООП-стиле. В своих ООП-дополнениях для данного приложения я, чтобы не писать в каждом методе класса global $var1, $var2 и т. д., использовал трейт вида:
trait Helpers
{
public function &__get(string $name)
{
return $GLOBALS[$name];
}
}
Благодаря этому в своих дополнениях я могу использовать конструкцию $this->var1 вместо $var1 и т. д. Помимо очевидных (нужно следить, чтобы в классах не было свойств с такими же именами, как у этих глобальных переменных) какие ещё проблемы могут возникнуть?
Была ещё задумка вместо трейта использовать отдельный класс с тем же магическим методом &__get, но тогда конструкции вида $this->var1 удлинятся ($this->method()->var1 с получением new ClassName из $this->method()), что мне не очень нравится. Попытка использовать паттерн Registry также не увенчалась успехом.
Ответы (1)
Дурацкий вопрос: а чем плохо напрямую, через $GLOBALS ?
Зачем прогонять через магические методы? Из эстетических соображений?
По тем же самым причинам, почему для работы с $_POST, $_GET, $_REQUEST и т. д. используются отдельные классы, вместо использования этих массивов напрямую. Если уж применять ООП, то работать с объектами, а не с глобальными массивами.