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

Lista de Objetos

Estas en el tema de Lista de Objetos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. ¡Hola!. Vereis, estoy trasteando con PHP ahora, y ya me he topado con el primer error... Tengo definida una clase, que no hace más que ...
  #1 (permalink)  
Antiguo 01/12/2008, 12:07
 
Fecha de Ingreso: marzo-2006
Mensajes: 106
Antigüedad: 18 años, 1 mes
Puntos: 0
Lista de Objetos

¡Hola!.

Vereis, estoy trasteando con PHP ahora, y ya me he topado con el primer error...

Tengo definida una clase, que no hace más que mostrar por pantalla un div con cierto contenido, pasado como parámetro.

Como voy a tener varias instancias de ese objeto, me he creado un array donde iré guardando esos objetos, para luego recorrerlos todos y mostrarlos por pantalla. La clase tiene una función que imprime su código html.

Tengo entonces:

$objetos[1] = new miClase("contenido");
$objetos[2] = new miClase("otro contenido");

Cuando hago:

$objetos[1]->mostrar();

sale el código perfectamente.

Sin embargo, cuando hago:

$i=1;
$objetos[i]->mostrar();

Me sale error en el servidor. Por tanto, no me deja recorrer el array con un bucle para ir imprimiendo todo su contenido. ¿Estoy haciendo algo mal?.
__________________
"El río más profundo siempre es el más silencioso"
  #2 (permalink)  
Antiguo 01/12/2008, 12:39
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Lista de Objetos

primero... cual es el error que te sale ???

...

tal ves es $i y no solo i



Código PHP:
$i=1;
$objetos[$i]->mostrar(); 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 01/12/2008, 13:10
 
Fecha de Ingreso: marzo-2006
Mensajes: 106
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: Lista de Objetos

Pues va a ser que si.

De hecho, se me olvidó colocarlo en varios sitios, y en varias variables distintas. Cuesta acostumbrarse a tener que poner el símbolo delante...

Muchas gracias.
__________________
"El río más profundo siempre es el más silencioso"
  #4 (permalink)  
Antiguo 01/12/2008, 13:48
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: Lista de Objetos

Cita:
Iniciado por Erume Ver Mensaje
¡Hola!.

$i=1;
$objetos[i]->mostrar();

Me sale error en el servidor. Por tanto, no me deja recorrer el array con un bucle para ir imprimiendo todo su contenido. ¿Estoy haciendo algo mal?.
Amén que ya te dieron la solución al problema, dos acotaciones:
  1. Ten el control de lo que que imprimen los objetos, no dejes que hagan un echo cuando quieran, solo retorna String
  2. Aprovecha y usa el toString en cada elemento, que cada uno sepa cómo "convertirse en una cadena de texto" y no necesitas usar un método "mostrar".

Por ejemplo:


Código PHP:

class Div
{
   private 
$_contenido;

   public function 
__construct($texto)
   {
      
$this->_contenido $texto;
   }
   public function 
__toString()
   {
       return 
'<DIV>'.$this->_contenido.'</DIV>';
   }
}

$objetos[] = new Div('contenido');
$objetos[] = new Div('otro contenido');

foreach(
$objetos as $objeto){
   echo 
$objeto;

__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #5 (permalink)  
Antiguo 02/12/2008, 06:45
 
Fecha de Ingreso: marzo-2006
Mensajes: 106
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: Lista de Objetos

Vaya, ¿hago mal al darle la responsabilidad de escribirse a si misma a una clase?.
Intentaré hacer eso que dices, entonces. Pero, ¿por qué exactamente?. Si tengo controladas las clases que imprimen... ¿qué problemas podrían surgir?.

Y buen apunte el del bucle. Me temo que en lenguajes me quedé en la jdk 1.5 de Java.

¡Gracias de nuevo!.
__________________
"El río más profundo siempre es el más silencioso"
  #6 (permalink)  
Antiguo 02/12/2008, 06:49
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: Lista de Objetos

Que tal Erume

Que cuando quieras tener el control de quién imprime y cuando, no vas a poderlo hacer porque todas imprimen cuando quieren.

Si quieres unir el comportamiento de una o más clases no vas a poder hacerlo, ya que cada una al invocarla ya se imprime por sí sola. Puedes sumar todos los retornos de cada clase y finalmente tú decides cuando se imprime todo "junto".

Imagina que quieres armar alguna parte pero antes de imprimir el contenido quieres hacer algún control, no podrás, ya que cada elemento se imprimió.

No sé si queda claro, pero es un concepto bastante usado y antiguo.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #7 (permalink)  
Antiguo 03/12/2008, 03:18
Avatar de lcervantes  
Fecha de Ingreso: abril-2002
Mensajes: 137
Antigüedad: 22 años
Puntos: 0
De acuerdo Respuesta: Lista de Objetos

Hola.
A mi lo unico que se me ocurre para que el __String solo lo uses para imprimir es que dependiendo del valor de un parametro imprimas una cosa u otra.
Pero creo que es muy complicado.

Por otro lado, enrique en el ejemplo que pones, por alguna razon o convenio pones el _ en el nombre de la propiedad ?
Cita:
private $_contenido;
Saludos,
__________________
LCervantes
--------------------------------------------
www.nerrots.es
  #8 (permalink)  
Antiguo 03/12/2008, 05:11
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: Lista de Objetos

Cita:
Iniciado por lcervantes Ver Mensaje
Hola.
A mi lo unico que se me ocurre para que el __String solo lo uses para imprimir es que dependiendo del valor de un parametro imprimas una cosa u otra.
Pero creo que es muy complicado.
Estimado, para eso se usa, es bien simple, define cual es la información mínima que representa al objeto y retornala en el toString cuando quieras convertirlo en una cadena de texto. Obviamente es dinámica, usas los atributos que necesites para armarla, pero no te salgas del concepto del toString.

Cita:
Iniciado por lcervantes Ver Mensaje
Por otro lado, enrique en el ejemplo que pones, por alguna razon o convenio pones el _ en el nombre de la propiedad ?
Por el estándar de codificación de PHP definido por la empresa Zend que debemos seguir todos los desarrolladores profesionales de este lenguaje
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #9 (permalink)  
Antiguo 03/12/2008, 05:22
 
Fecha de Ingreso: marzo-2006
Mensajes: 106
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: Lista de Objetos

Gracias por la información Enrique.

Pero, una duda más derivada de tu última respuesta, por convenio, ¿todos los atributos deben llevar el guión bajo delante?. ¿Solo los atributos?. ¿O también el nombre de las funciones (aparte del constructor/destructor y toString)?.
__________________
"El río más profundo siempre es el más silencioso"
  #10 (permalink)  
Antiguo 03/12/2008, 05:41
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: Lista de Objetos

Estaría bueno que leyeras y siguieras el estándar de codificación, ahí está todo

Los atributos y métodos privados deben iniciar en "_", para los otros casos son palabras reservadas y llevan doble "_" o sea "__", pero eso no es parte del estándar, es parte del lenguaje mismo.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:37.