Вам вряд ли когда-нибудь понадобится global
.Просто не создавайте глобалы.
Первый.Есть такая вещь, как параметры, например:
function __construct($user)
{ ... }
Теперь вы можете позвонить:
$controller = new MyController($user);
.. и вам не нужен «глобальный».
Еще лучше, если ваш контроллер - это контроллер, который управляет потоком всего вашего приложения.В этом случае вам нужно будет передать ему только несколько классов, например, класс базы данных и, возможно, анализатор для ввода.Если вас это не волнует, вы можете заставить контроллер создавать экземпляр класса базы данных и сам синтаксический анализатор.Вы всегда можете выполнить рефакторинг этой части, если вам нужно поддерживать несколько типов баз данных и несколько видов ввода.
Затем эти базы данных можно установить как свойство контроллера.Каждый следующий класс будет знать об этом контроллере.Вы можете установить экземпляр контроллера в глобальном или, что еще лучше, передать его в конструктор других классов, чтобы они вообще не зависели от глобальных.
Если этим классам не нужен контроллер,но просто нужна база данных, вы можете передать только класс базы данных.Это сделает эти классы еще более независимыми от контроллера и от любых глобальных переменных, так что вы сможете очень легко использовать их в других приложениях при условии, что сама база данных не зависит (прямо или косвенно) от контроллера.
Взгляните на такие рамки, как Kohana.Они решают эти проблемы довольно хорошо, хотя всегда есть возможности для улучшения.