Per quanto riguarda $GLOBALS dimenticati che esista, usare variabili globali nel 99% dei casi ti porta ad avere codice incasinato, imprevedibile e difficilmente debuggabile. Usare variabili globali è considerata una bad practice da evitare sempre.
Probabilmente il tuo codice è un po' strutturato male, solitamente dovresti avere:
Un router che in base all'url che richiedi ti richiama un controller e tale controller richiama la vista passandole dei dati.
Nel tuo caso invece sembri partire dalle vista, e quindi dalla fine della catena, inoltre hai dei problemi a passarti i dati tra i vari oggetti e vorresti usare delle variabili globali, ma come ho già detto non devi. Per risolvere questi due problemi dovresti:
- Leggerti bene come funziona il paradigma mvc e magari dare un'occhiata a come sono strutturati framework tipo Symfony e Laravel, all'inizio ti sembrerà un gran casino ma secondo me è un ottimo modo per capire i flussi di mvc e come model view e controller devono rimanere separati tra loro.
- Per passare i dati tra i vari oggetti che compongono la tua app usa la dependency injection, in rete trovi tutto quello che ti serve per capire cosa è e come implementarla.
Scusa se ti do dei consigli molto generici, ma per fare diversamente dovrei poter vedere il codice, se riesci a metterlo su github vedo di essere più specifico.
In ogni caso spero di esserti stato utile, e ovviamente se hai bisogno di una mano chiedi pure.