Ho un set di metodi di classe statici. Ho anche una connessione al database esistente in uno script memorizzato in una variabile oggetto $ DB. Come posso chiamare quei metodi di classe statici e lasciare che usino quell'oggetto $ DB senza doverli passare ogni volta come parametro sul metodo di classe?PHP: come passare la connessione del database esistente ai metodi di classe statici?
Per esempio, adesso sto dover utilizzare un globale, purtroppo:
class Foo {
public static function Bar() {
global $DB;
return $DB->DSN_STRING;
}
}
E 'come ho bisogno della mia classe statica di chiamarsi con una routine che diventa in qualche modo il collegamento $ DB senza dover ristabilirlo. Nota Non posso inserirlo nella classe statica perché non è istanziata.
Naturalmente il problema è risolto se posso passare da una classe statica per una classe normale e creare un'istanza mio oggetto $ Foo. Potrei quindi iniettare la var $ DB come impostazione su una variabile pubblica. Oppure aggiungi un metodo pubblico per ricevere la variabile $ DB e poi imposta una var privata dell'oggetto $ Foo. Oppure, fai in modo che un costruttore di classi accetti la var $ DB e imposti una var privata dell'oggetto $ Foo. Ma tutte e 3 le tecniche richiedono che io passi da una classe statica a una classe regolare.
Alcune persone hanno detto qualcosa chiamato un modello di Registro di sistema o un pattern Singleton (penso che sia la stessa cosa? Non sono sicuro). È questo ciò di cui ho bisogno per risolvere questo problema in modo efficiente?
La cosa più di tutte è che evito di chiamare "$ DB globale" perché la gente fuori di testa per questo.
Questo era * ESATTAMENTE * ciò di cui avevo bisogno, e non mi ero reso conto che una classe statica potesse mantenere una persistenza dell'oggetto al suo interno. – Volomike
Buoni tempi con Singletons. :) Felice di essere di aiuto. – zombat