J'ai une classe pour interagir avec un serveur memcache. J'ai différentes fonctions pour insérer, supprimer et récupérer des données. A l'origine chaque fonction fait appel à memcache_connect()
, mais qui était inutile, par exemple .:Partager des variables entre des fonctions en PHP sans utiliser de globales
mc->insert()
mc->get()
mc->delete()
ferait trois connexions memcache. Je CONTOURNÉS en créant une construction pour la classe:
function __construct() {
$this->mem = memcache_connect(...);
}
puis en utilisant $this->mem
chaque fois que la ressource était nécessaire, pour chacune des trois fonctions utilisent la même ressource memcache_connect
.
Ceci est bien, si j'appelle la classe à l'intérieur d'autres classes, par exemple .:
class abc
{
function __construct() {
$this->mc = new cache_class;
}
}
class def
{
function __construct() {
$this->mc = new cache_class;
}
}
alors il continue à faire deux appels memcache_connect
, quand il seulement besoins un.
Je peux le faire avec des globals mais je préférerais ne pas les utiliser si je n'ai pas à le faire.
Exemple GLOBALS mise en œuvre:
$resource = memcache_connect(...);
class cache_class
{
function insert() {
global $resource;
memcache_set($resource , ...);
}
function get() {
global $resource;
return memcache_get($resource , ...);
}
}
Alors, peu importe combien de fois la classe est appelée il n'y aura qu'un seul appel à memcache_connect
.
Existe-t-il un moyen de le faire ou devrais-je simplement utiliser globals?
C'est une solution raisonnable mais soyons réalistes, c'est un global. :) – cletus
C'est ce que je ferais. Vous ne pouvez pas le tester, mais soyons honnêtes, qui teste ce genre de chose de toute façon? –
La question est de savoir comment testable reste le reste du code entier si une petite partie n'est pas testable. Ou comment implémenteriez-vous un objet MemCache simulé pour d'autres tests? – okoman