Tengo una clase para interactuar con un servidor de memcache. Tengo diferentes funciones para insertar, eliminar y recuperar datos. Originalmente cada función realiza una llamada a memcache_connect()
, sin embargo, que no era necesaria, por ejemplo .:Compartir variables entre funciones en PHP sin usar globales
mc->insert()
mc->get()
mc->delete()
haría tres conexiones memcache. He trabajado en torno a este mediante la creación de una construcción para la clase:
function __construct() {
$this->mem = memcache_connect(...);
}
y luego usando $this->mem
donde se necesita el recurso, por lo que cada una de las tres funciones utilizan el mismo recurso memcache_connect
.
Esto está bien, sin embargo si llamo a la clase dentro de otras clases, por ejemplo .:
class abc
{
function __construct() {
$this->mc = new cache_class;
}
}
class def
{
function __construct() {
$this->mc = new cache_class;
}
}
entonces todavía está haciendo dos memcache_connect
llamadas, cuando sólo necesidades uno.
Puedo hacer esto con globales, pero preferiría no utilizarlos si no fuera necesario.
Ejemplo globales aplicación:
$resource = memcache_connect(...);
class cache_class
{
function insert() {
global $resource;
memcache_set($resource , ...);
}
function get() {
global $resource;
return memcache_get($resource , ...);
}
}
Entonces no importa cuántas veces se llama la clase no sólo será una llamada a memcache_connect
.
¿Hay alguna manera de hacer esto o debería simplemente usar globales?
Es una solución razonable pero, seamos sinceros, es un proceso global. :) – cletus
Esto es lo que haría. No puedes probarlo, pero seamos honestos, ¿quién prueba este tipo de cosas de todos modos? –
La pregunta es cómo se puede verificar el resto del código si una parte pequeña no se puede probar. ¿O cómo implementaría un objeto MemCache simulado para otras pruebas? – okoman