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

Inconveniente con modelo-vista-iterador

Estas en el tema de Inconveniente con modelo-vista-iterador en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Codifique tres clases, digamos Modelo, Vista e Iterador. La clase Modelo tiene una instancia de la clase Vista. La clase Vista tiene una instancia de ...
  #1 (permalink)  
Antiguo 07/12/2004, 08:06
Avatar de wolverine4277  
Fecha de Ingreso: septiembre-2004
Ubicación: Necochea
Mensajes: 19
Antigüedad: 19 años, 8 meses
Puntos: 0
Inconveniente con modelo-vista-iterador

Codifique tres clases, digamos Modelo, Vista e Iterador.

La clase Modelo tiene una instancia de la clase Vista.
La clase Vista tiene una instancia de la clase Modelo.
La clase Modelo tiene un método que devuelve un iterador sobre el mismo.
El problema que tengo es el siguiente, cuando modifico los datos del modelo no me muestra nada. Si no utilizo una vista y directamente obtengo el iterador y muestro los datos funciona bien.
No se donde está el problema. Si alguien se da cuenta de cual es se lo agradecería mucho.
A grandes rasgos, el código sería el siguiente:


class Modelo {

...
var $vista;

function Modelo(...) {

...
$this->vista = new Vista($this);
}


function modificar(...) {

...
$this->vista->actualizar();
}


function obtener_iterador() {

return new Iterador($this);
}
}



class Vista {

var $modelo;


function Vista($modelo_nuevo) {

$this->modelo = $modelo_nuevo;
}


function actualizar() {

$iterador = $this->modelo->obtener_iterador();
while($iterador->tiene_mas_elementos()) {
print_r($iterador->proximo());
echo "<BR>";
}
}
}


.:: wolverine4277 ::.
  #2 (permalink)  
Antiguo 07/12/2004, 08:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Estaría bueno que indicases si trabajas con PHP 4.x o 5.x pues el modelo de datos para POO ha cambiado "a mejor" (soporta más standares de la POO tradicional).

Un saludo,
  #3 (permalink)  
Antiguo 07/12/2004, 10:03
Avatar de wolverine4277  
Fecha de Ingreso: septiembre-2004
Ubicación: Necochea
Mensajes: 19
Antigüedad: 19 años, 8 meses
Puntos: 0
Respuesta

Utilizo PHP 4.x
  #4 (permalink)  
Antiguo 07/12/2004, 10:52
Avatar de vitxo  
Fecha de Ingreso: septiembre-2003
Ubicación: Valencia
Mensajes: 219
Antigüedad: 20 años, 7 meses
Puntos: 0
No estoy completamente seguro de que ésta sea la solución a tu problema: preocúpate de devolver el objeto por referencia. (con el operador &)
Código PHP:
function &obtener_iterador() {
  return new 
Iterador($this);

Y cuando la llames mantén la referencia:
Código PHP:
 $iterador =& $this->modelo->obtener_iterador(); 
De la otra forma, el objeto $iterador no es el mismo que el que devuelves, sino una copia. Y eso a veces te lleva a comportamientos inesperados e indeterminados.

Sigue posteando por aquí. :)
  #5 (permalink)  
Antiguo 08/12/2004, 06:35
Avatar de wolverine4277  
Fecha de Ingreso: septiembre-2004
Ubicación: Necochea
Mensajes: 19
Antigüedad: 19 años, 8 meses
Puntos: 0
Problema

Gracias por tu ayuda, pero no he podido resolver mi problema, así que sigo investigando

.:: wolverine4277 ::.
  #6 (permalink)  
Antiguo 22/12/2004, 13:45
 
Fecha de Ingreso: agosto-2003
Mensajes: 47
Antigüedad: 20 años, 8 meses
Puntos: 0
podrias probar a usar

class clase extends otraClase

*NOTA: creo k era extends :p
__________________
:borracho:http://ringoweb.war4.org:neurotico:
  #7 (permalink)  
Antiguo 23/12/2004, 01:47
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Esto no me suena muy bien
Cita:
La clase Modelo tiene una instancia de la clase Vista.
La clase Vista tiene una instancia de la clase Modelo.
, sobre todo si haces
Código PHP:
 function Modelo(...) {

...
$this->vista = new Vista($this);

y
Código PHP:
 function Vista($modelo_nuevo) {

$this->modelo $modelo_nuevo;

Prueba a aplicar los operadores de referencias a ambas funciones. Quizas el problema es que inicializas la vista con una copia del modelo, en lugar de con una referencia. Y por eso el modelo que maneja la vista esta sin datos.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 24/12/2004, 16:12
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Prueba lo que te dice josemi y pon aquí el código que utilizas... yo también creo que el problema está por el tema de las referencias...
Sobre patrones conzco poco (aunque estoy investigando ahora)... si pudieras dar más información sobre algunos patrones te lo agradeceríamos.

Saludos
  #9 (permalink)  
Antiguo 27/12/2004, 05:30
Avatar de wolverine4277  
Fecha de Ingreso: septiembre-2004
Ubicación: Necochea
Mensajes: 19
Antigüedad: 19 años, 8 meses
Puntos: 0
Ya he solucionado el problema...

Gracias por su ayuda, pero he logrado solucionar el problema... no era un problema con las referencias sino con el contructor del modelo...
Saludos.

.:: wolverine4277 ::.
  #10 (permalink)  
Antiguo 27/12/2004, 06:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por jpinedo
Prueba lo que te dice josemi y pon aquí el código que utilizas... yo también creo que el problema está por el tema de las referencias...
Sobre patrones conzco poco (aunque estoy investigando ahora)... si pudieras dar más información sobre algunos patrones te lo agradeceríamos.

Saludos
En las FAQ's de este foro recientemente se publicaron algunos links hacia sitios que cotienen información sobre Patrones (grácias a Reynier).

Concretamente estos dos que tal vez ya conozcas:

PatternsCentral
http://www.patternscentral.com/

Web Application Component Toolkit (Patrones)
http://wact.sourceforge.net/


Un saludo,
  #11 (permalink)  
Antiguo 27/12/2004, 21:08
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Muchas gracias Cluster, ahora los reviso.
Saludos
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 00:36.