Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Destruir Objeto y Recolocar Contenido

Estas en el tema de Destruir Objeto y Recolocar Contenido en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas.. Estoy programando un grupo de classes que forman una capa de acceso a base de datos. En esta capa cargo en memoria las tablas ...
  #1 (permalink)  
Antiguo 18/11/2008, 07:23
 
Fecha de Ingreso: septiembre-2008
Mensajes: 33
Antigüedad: 15 años, 7 meses
Puntos: 0
Exclamación Destruir Objeto y Recolocar Contenido

Buenas..

Estoy programando un grupo de classes que forman una capa de acceso a base de datos. En esta capa cargo en memoria las tablas / registros / celdas que me conviene trabajar en forma de array.

Ej: $this->tablas(1)->registros(3)->campos(5)->valor()

Cuando quiero destruir un objeto de tipo registro que esta en la posicion 2, tengo que actualizar la memoria y mover los registros posteriores para ocupar su lugar, de manera que no queden espacios vacios en memoria, y asi evito recargar el constructor de la clase.

Mi pregunta es la siguiente:

¿Como puedo hacer para destruir un objeto y mover el contenido posterior una posición adelante?

Ej:

---------------------------------------

Pepe Sanchez 0
Jose Casillas 1
Gemma Arteaga 2

Destruimos el registro 1:

Pepe Sanchez 0
Gemma Arteaga 1

---------------------------------------

Gracias por adelantado.

Como siempre un placer.
  #2 (permalink)  
Antiguo 18/11/2008, 09:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Destruir Objeto y Recolocar Contenido

Como lo guardas internamente? Si es en un array es facilmente, usas unset, y luego puedes usar array_values para obtener un nuevo array con los indices númericos correctos.

Saludos.
  #3 (permalink)  
Antiguo 18/11/2008, 09:57
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 7 meses
Puntos: 55
Respuesta: Destruir Objeto y Recolocar Contenido

bueno yo hace un tiempo hice algunas pruebas pero directamente con el objeto

$obj=new AlgunaClase();

$obj->metodo1()->metodo2()->metodo3();

para lograr esta sintaxis (simil javascript) la unica forma q logre fue retornando $this, en cada metodo, y no me gusto, asi q lo abandone

alguien sabe como se puede lograr esto?
__________________
Degiovanni Emilio
developtus.com
  #4 (permalink)  
Antiguo 18/11/2008, 10:20
 
Fecha de Ingreso: septiembre-2008
Mensajes: 33
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Destruir Objeto y Recolocar Contenido

GatorV:

Si, lo guardo todo en arrays, pero lo que guardo son objetos, no valores. Tengo el problema al mover los objetos una posicion atras del array, porque li lo tengo bien entendido, tengo que mover tambien sus mètodos y propiedades no?

emiliodeg:

No entendi cual es tu pregunta, si es de como usar los metodos anidados tipo:
$this->pepe->metodo1()->metodo2()->valor() entonces asi lo estoy usando yo y la verdad a mi me funciona muy bien. Espero tu aclaracion.
  #5 (permalink)  
Antiguo 18/11/2008, 10:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Destruir Objeto y Recolocar Contenido

No es necesario mover todo si lo tienes como un array de objetos internamente solo haz algo asi:
Código php:
Ver original
  1. public function borraPosicion($pos) {
  2.         unset($this->storage[$pos]);
  3.         $this->storage = array_values($this->storage); // Con esto reseteas los indices
  4. }

@emiliodeg,

Si, necesitas regresar $this si vas a llamar al mismo objeto (chaining) pero si estas leyendo otros objetos por ejemplo:
Código php:
Ver original
  1. $biblioteca->findUser(1)->setName("Pedro");

Tienes que regresar en cada función el objeto al que hace el llamado, en este caso ya no es $this, si no es el objeto que crees (y solo funciona en PHP5).

Saludos.
  #6 (permalink)  
Antiguo 18/11/2008, 10:32
 
Fecha de Ingreso: septiembre-2008
Mensajes: 33
Antigüedad: 15 años, 7 meses
Puntos: 0
Thanks por la respuesta. Me voy a provar-lo. Luego os cuento.

Hola de nuevo.

Con eso no soluciono el problema.

Ha sido fallo mio que no he explicado una cosa.

Tengo en los arrays una copia exacta de la base de datos, Pero cuado introduzco un nuevo registro, lo modifico o lo borro lo hago en la BBDD. Lo que quisiera conseguir es sin tener que recargar la BBDD insertar en los arrays lo que inserto en la base de datos. Es decir, cambiar la memoria y la base de datos al mismo tiempo, pero sin recargar la base de datos, ya que el rendimiento de recargar toda la BBDD comparada con actualizar la memoria es muy bestia.

Gracias!

Última edición por GatorV; 18/11/2008 a las 11:02
  #7 (permalink)  
Antiguo 18/11/2008, 11:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Destruir Objeto y Recolocar Contenido

Pues es lo mismo, si tu por decir insertas en la base de datos seguramente tienes un array con los datos, entonces creas un nuevo objeto y lo insertas a tu array:
Código php:
Ver original
  1. $this->storage[] = $nuevoObjeto;

Saludos.
  #8 (permalink)  
Antiguo 18/11/2008, 11:31
 
Fecha de Ingreso: septiembre-2008
Mensajes: 33
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Destruir Objeto y Recolocar Contenido

El caso de añadir ya lo tengo resuelto, ya que solo hay que aumentar el array en 1 valor mas.
Pero en el caso de borrar un registro, como ocupas el hueco que deja al borrarlo sin perder el orden de los objetos que le siguen en el array? El problema que veo yo es que hay que mover todos los objetos una posicion adelante, borrando asi el ultimo lugar que quedara vacio o duplicado. He estado mirandome el __clone, pero la verdad, tengo que profundizar-lo un poco mas.

Gracias por las respuestas. Hasta un ratico.
  #9 (permalink)  
Antiguo 18/11/2008, 12:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Destruir Objeto y Recolocar Contenido

Si no quieres perder el orden entonces solamente usa unset() sobre el indice que quieres borrar con eso se respeta el orden que ya tenian los objetos, ya no es necesario usar array_values.

Saludos.
  #10 (permalink)  
Antiguo 18/11/2008, 12:08
 
Fecha de Ingreso: septiembre-2008
Mensajes: 33
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Destruir Objeto y Recolocar Contenido

Pero entonces me queda el ultimo registro en blanco no? Es decir, me lo coloca a NULL pero no elimina verdad?
  #11 (permalink)  
Antiguo 18/11/2008, 12:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Destruir Objeto y Recolocar Contenido

Mmmm lee en el Manual lo que hace unset() ese borra el indice, por lo que ya no existe en el arreglo y este decrementa su longitud en 1, por eso es mas recomendable usar unset() directamente.

Saludos.
  #12 (permalink)  
Antiguo 18/11/2008, 12:42
 
Fecha de Ingreso: septiembre-2008
Mensajes: 33
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Destruir Objeto y Recolocar Contenido

Thaks voy a ello.
  #13 (permalink)  
Antiguo 18/11/2008, 20:47
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Destruir Objeto y Recolocar Contenido

"La mejor arquitectura es la sencillez", te estás complicando por cosas que deben resolver de forma más simple.

¿No te parece menos costo actualizar la base y volver a cargar los datos, hasta por un tema de integridad?

¿En qué contexto y con PHP podrías llegar a tener problemas de tal magnitud que tienes que actualizar ambas cosas en paralelo para no recargar con los datos reales? ¿No buscaste por otro lado la solución?

Me da la impresión que el problema es de raiz.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #14 (permalink)  
Antiguo 19/11/2008, 02:39
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Destruir Objeto y Recolocar Contenido

Iba a comentar algo similar. En mi opinión, la justificación de la "velocidad" podría tener sentido si esas operaciones no requieren actuar sobre la base de datos, pero una vez que has comentado que necesitas actualizar en la tabla... ya se desmorona la justificación, ¿no?

Por otro lado, el consumo de recursos hay que colocarlo también en la balanza. ¿Que problema hay por manejar como convenga el recurso devuelto por la consulta sin crear un array para copiar en memoria toda esa información?

Aunque igual es que no he entendido el proceso que estáis comentando.
  #15 (permalink)  
Antiguo 19/11/2008, 07:31
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Respuesta: Destruir Objeto y Recolocar Contenido

Otra opción es hacer un splice sobre el array (http://ar2.php.net/manual/es/functio...y-splice.php):

$indice = 1;
array_splice($arr,$indice,1);

Esto te borra un elemento (3º parámetro) a partir del índice 1, o sea, sólo el elemento en la segunda posición.

Saludos
Juan Pablo Califano
  #16 (permalink)  
Antiguo 19/11/2008, 07:50
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Respuesta: Destruir Objeto y Recolocar Contenido

Si el rendimiento es un tema a tener en cuenta, dudo que cargar una tabla entera en memoria sea una buena idea en primer lugar. Lo más probable es que sólo accedas a algunos pocos registros. Además, si la tabla en algún punto tiene, pongamos, 500.000 registros, seguramente vas a tener problemas de rendimiento y de memoria.

Me parece que más que una capa sobre una base de datos estás haciendo una base de datos paralela, en php, y tratando de sincronizarla con la base de datos real. El tema es que para eso ya existe la base de datos, que está diseñada justamente para guardar y manejar datos en forma rápida y eficiente (se puede filtrar u ordenar datos con php, por ejemplo, pero un WHERE o un ORDER BY van a ser mucho más rápidos y ya están disponibles sin escribir una línea adicional de código). Para mí, duplicar la funcionalidad elemental de una base de datos es buscarse un problema gratuitamente.


Saludos
Juan Pablo Califano
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:42.