Ver Mensaje Individual
  #8 (permalink)  
Antiguo 02/04/2010, 22:52
sergabrod
 
Fecha de Ingreso: febrero-2009
Mensajes: 5
Antigüedad: 15 años, 3 meses
Puntos: 0
Sonrisa Respuesta: Clase no muestra datos

Hola Claudio, si bien me parece que lo que posteó Enrique es mucho mas limpio y te sugiero que lo tomes en cuenta, es interesante detectar los errores que hacen que tu código (no muy limpio) no funcione, te marco algunas de las cosas que deberías chequear:


Código PHP:
Ver original
  1. <?php
  2. class Indice {
  3.         private $lista=array();
  4.         private $titulo // te falta el punto y coma
  5.  
  6.  public function __construct($titulo,$lista)
  7.   {
  8.         $this->titulo=$titulo;
  9.         $this->lista=$lista;
  10.   }
  11.  
  12.   public function mostrar()
  13.   {
  14.     for($f=0;$f<count($this->lista);$f++)
  15.     {
  16.         echo '<h1>'$this->titulo'</h1>'; // te faltan los puntos de concatenación
  17.         echo '<ul>';
  18.         echo '<li>'$this->lista[$f]'</a></li>'; // te faltan los puntos de concatenación
  19.       echo "</ul>";
  20.     }
  21.   }
  22. }
  23. }// esta llave está demás
  24.  
  25. // y como ya todos te dijeron te falta el titulo como primer parámetro
  26.  
  27. $texto1=new Indice('Oportunidad Trabajo Independiente Herbalife');
  28. $lista1=new Indice('!Inscríbete AHORA! para ser distribuidor de productos Herbalife.');
  29. $lista1=new Indice('Puedes comenzar a trabajar desde que te inscribes.');
  30. $lista1=new Indice('Tendrás flexibilidad para elegir el lugar y tiempo de trabajo');
  31. $lista1=new Indice('Serás tu jefe y dueño de tu propio negocio.');
  32. ?>

Creo que no te muestra estos errores porque no tenes activado en tu php.ini que te los muestre por defecto, podrias agregarle al inicio de tu scritp un error_reporting(E_ALL | E_STRICT) para que te los muestre.

Pero supongamos que corregís todos los errores y le pasas el título a la creación del objeto:

Código PHP:
Ver original
  1. $texto1=new Indice('Mi titulo', 'Oportunidad Trabajo Independiente Herbalife');

Cuando haces esto le estas pasando como parámetro $lista el string 'Oportunidad Trabajo bla bla", pero si te fijas en el constructor tenes lo sgte:

Código PHP:
Ver original
  1. public function __construct($titulo,$lista)
  2.   {
  3.         $this->titulo=$titulo;
  4.         $this->lista=$lista;
  5.   }

Es decir le estas pasando al atributo "lista" de tu clase Indice, un string, que en php no es ni mas ni menos que un array de caracteres, por lo que cuando llames al metodo mostrar y se ejecute la línea

Código PHP:
Ver original
  1. echo '<li>' . $this->lista[$f] . '</a></li>';

lo que hará es imprimirte la primer letra del string o sea la 'O' de 'Oportunidad', ya que estas accediendo a un string con un subindice.
Podrías hacer dos cosas, dejarlo así y recibir un array completo en tu constructor como te lo indicó Enrique o bien cambiar el constructor para que reciba un elemento del array:

Código PHP:
Ver original
  1. public function __construct($titulo,$lista)
  2.   {
  3.         $this->titulo=$titulo;
  4.         $this->lista[]=$lista; //aca todo el string pasa a ser un elemento
  5.   }

y podés crear otro método :

Código PHP:
Ver original
  1. public function addItem($item)
  2.   {
  3.         $this->lista[]=$item;
  4.   }

para ir agregando items individuales una vez creado el objeto.

Otro punto es que por cada new que haces, creas un objeto diferente al otro:

Código PHP:
Ver original
  1. $texto1=new Indice('Oportunidad Trabajo Independiente Herbalife');
  2. $lista1=new Indice('!Inscríbete AHORA! para ser distribuidor de productos Herbalife.');
  3. $lista1=new Indice('Puedes comenzar a trabajar desde que te inscribes.');
  4. $lista1=new Indice('Tendrás flexibilidad para elegir el lugar y tiempo de trabajo');
  5. $lista1=new Indice('Serás tu jefe y dueño de tu propio negocio.');

Agregando el método en cuestión podrías tener:

Código PHP:
Ver original
  1. $texto = new Indice('Mi titulo', 'Oportunidad de trabajo');
  2. $texto->addItem('!Inscríbete AHORA! para ser distribuidor de productos Herbalife.');
  3. $texto->addItem('Puedes comenzar a trabajar desde que te inscribes.');
  4. $texto->addItem('Tendrás flexibilidad para elegir el lugar y tiempo de trabajo');
  5. echo $texto; // si usas __toString();

De esta manera te asegurás que todos los objetos Indice tengan al menos un ítem, y podés seguir agregandoles opcionalmente una vez creado el objeto.

Saludos!


Sergio Gabriel Rodriguez
Corrientes - Argentina

Última edición por sergabrod; 02/04/2010 a las 22:58 Razón: agregados