Ich habe eine Klasse für die Interaktion mit einem Memcache-Server. Ich habe verschiedene Funktionen zum Einfügen, Löschen und Abrufen von Daten. Ursprünglich hat jede Funktion einen Aufruf an memcache_connect()
jedoch die unnötig war, z.B .:Share Variablen zwischen Funktionen in PHP ohne Verwendung von globalen
mc->insert()
mc->get()
mc->delete()
drei memcache Verbindungen machen würde. Ich arbeite, um diesen durch ein Konstrukt für die Klasse zu erstellen:
function __construct() {
$this->mem = memcache_connect(...);
}
und dann $this->mem
, wo immer die Ressource benötigt wurde, so dass jede der drei Funktionen verwendet die gleiche memcache_connect
Ressource.
Das ist in Ordnung, aber wenn ich die Klasse in anderen Klassen nennen, z.B .:
class abc
{
function __construct() {
$this->mc = new cache_class;
}
}
class def
{
function __construct() {
$this->mc = new cache_class;
}
}
dann ist es immer noch zwei memcache_connect
Anrufe tätigen, wenn es nur Bedürfnisse ein.
Ich kann dies mit Globals tun, aber ich würde es vorziehen, sie nicht zu verwenden, wenn ich nicht muss.
Beispiel Globals Umsetzung:
$resource = memcache_connect(...);
class cache_class
{
function insert() {
global $resource;
memcache_set($resource , ...);
}
function get() {
global $resource;
return memcache_get($resource , ...);
}
}
Dann egal wie oft die Klasse dort genannt wird, wird nur ein Aufruf an memcache_connect
sein.
Gibt es eine Möglichkeit, dies zu tun oder sollte ich nur Globals verwenden?
Es ist eine vernünftige Lösung, aber seien wir ehrlich, es ist eine globale. :) – cletus
Das ist, was ich tun würde. Du kannst es nicht testen, aber lass uns ehrlich sein, wer testet sowas überhaupt? –
Die Frage ist, wie testbar der Rest des gesamten Codes bleibt, wenn ein kleiner Teil nicht testbar ist. Oder wie würden Sie ein simuliertes MemCache-Objekt für andere Tests implementieren? – okoman