Il problema è un errore di logica di base.

Tu parli di "seconda volta che si chiama la getIstance()" ma invece dovresti parlare di "alla successiva richiesta HTTP".

In PHP non esiste un Application server che mantiene un oggetto istanziato tra una richiesta e quella successiva a meno di salvarlo esplicitamente in sessione e comunque resterebbe a livello di utente e non funzionerebbe con proprietà tipo le risorse (es. connessioni a DB non persistenti).

Prova a salvare in sessione i dati di accesso al DB (i parametri di getIstance()) e richiamare getIstance() con tutti i parametri all'inzio di ogni richiesta HTTP e vedrai che funziona correttamente.