J'ai un ensemble de méthodes de classe statique. J'ai également une connexion de base de données existante dans un script stocké dans une variable d'objet $ DB. Comment puis-je appeler ces méthodes de classe statique et les laisser utiliser cet objet $ DB sans avoir à leur passer cette variable à chaque fois comme un paramètre sur la méthode de classe?PHP: Comment passer une connexion de base de données existante à des méthodes de classe statiques?
Par exemple, en ce moment, je vais avoir à utiliser un malheureusement global,:
class Foo {
public static function Bar() {
global $DB;
return $DB->DSN_STRING;
}
}
Il est comme je l'ai besoin de ma classe statique pour appeler lui-même avec une routine qui obtient en quelque sorte la connexion DB $ sans avoir à le rétablir. Remarque: je ne peux pas l'injecter dans la classe statique car elle n'est pas instanciée.
Bien sûr, le problème est résolu si je passe d'une classe statique à une classe normale et instancie mon objet $ Foo. Je pourrais alors injecter le $ DB var comme paramètre sur une variable publique. Ou ajoutez une méthode publique pour recevoir la variable $ DB, puis définissez une variable privée de l'objet $ Foo. Ou, faites en sorte qu'un constructeur de classe accepte la variable $ DB et définisse une variable privée de l'objet $ Foo. Mais toutes les 3 techniques exigent que je passe d'une classe statique à une classe régulière.
Certaines personnes ont mentionné quelque chose appelé un motif de registre ou un motif Singleton (je pense que c'est la même chose? Pas sûr). Est-ce ce dont j'ai besoin pour résoudre ce problème efficacement? La chose la plus importante est que j'évite d'appeler "global $ DB" parce que les gens paniquent à ce sujet.
C'était exactement ce dont j'avais besoin, et je n'avais pas réalisé qu'une classe statique pouvait maintenir une persistance d'objet à l'intérieur. – Volomike
Bons moments avec Singletons. :) Heureux d'avoir pu aider. – zombat