Ver Mensaje Individual
  #3 (permalink)  
Antiguo 23/09/2015, 15:56
rumari
 
Fecha de Ingreso: junio-2009
Mensajes: 23
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: objeto creado con singleton que no se modifique por referencia

Bueno, lo explico de otra manera a ver si se entiende:

Quiero hacer lo siguiente, teniendo el identificador de un usuario, hago la consulta en la base de datos para traerme todos sus datos y obtener el objeto usuario.
Es el método obteneterUsuario($idUsuario).

Cualquiera que llama a este método obtendrá el objeto con los datos del usuario. Entonces, como se llama varias veces para obtener ese objeto, cada vez que se llama realiza una consulta a base de datos.

Yo quiero que sólo haga una vez esa consulta en la primera llamada, pues los datos del usuario serán siempre los mismos, y el resto de veces que llame al método obtenerUsuario($idUsuario) devuelva el objeto que ya previamente antes se había creado en su primera llamada.

Entonces, lo he hecho con singleton o con una variable global estática, pero esta hace referencia al objeto tanto cuando se llama como cuando se modifica (si tengo que dar la posibilidad) peeero el hecho de que en un punto del código se modifique no debería afectar al siguiente que lo llame y obtener el objeto que se obtuvo sin la última modificación.

Ejemplo:
//primera llamada, hace consulta y mete en una variable estática el objeto para ese usuario
$usuario = $user->obtenerUsuario($idUsuario);
echo $usuario->esActivo; //devuelve true
$usuario->esActivo = false;
...

//segunda llamada en otro lugar, no realiza consulta bbdd y lo obtiene de la variable estática
$usuario = $user->obtenerUsuario($idUsuario);
echo $usuario->esActivo; //devuelve false
...

Pues bien, esa segunda llamada es la que quiero que me devuelva el objeto de nuevas, sin modificaciones anteriores.

Mi pregunta es como hacer de otra forma para que no lance tanta consulta a base de datos sin necesidad?, pues en este caso la llamada $usuario = $user->obtenerUsuario($idUsuario); estaría por 1400 sitios o más.

un saludo, y gracias