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

Clase no muestra datos

Estas en el tema de Clase no muestra datos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola Que tal? Estoy empezando con POO PHP5, y encontré en la web un tuto, que estoy siguiendo y del cual he sacado este ejemplo ...
  #1 (permalink)  
Antiguo 01/04/2010, 15:58
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 17 años, 5 meses
Puntos: 0
Clase no muestra datos

Hola Que tal?

Estoy empezando con POO PHP5, y encontré en la web un tuto, que estoy siguiendo y del cual he sacado este ejemplo y lo modifiqué a mis necesidades, pero no me muestra los datos en la página, que le indico, este es el código.

Código PHP:
<?php
class Indice {
        private 
$lista=array();
        private 
$titulo

 
public function __construct($titulo,$lista)
  {
        
$this->titulo=$titulo;
        
$this->lista=$lista;
  }

  public function 
mostrar()
  {
    for(
$f=0;$f<count($this->lista);$f++)
    {
        echo 
'<h1>'$this->titulo'</h1>';
        echo 
'<ul>';
        echo 
'<li>'$this->lista[$f]'</a></li>';
      echo 
"</ul>";
    }
  }
}
}

$texto1=new Indice('Oportunidad Trabajo Independiente Herbalife');
$lista1=new Indice('!Inscríbete AHORA! para ser distribuidor de productos Herbalife.');
$lista1=new Indice('Puedes comenzar a trabajar desde que te inscribes.');
$lista1=new Indice('Tendrás flexibilidad para elegir el lugar y tiempo de trabajo');
$lista1=new Indice('Serás tu jefe y dueño de tu propio negocio.');
?>
posteriormente en otra página lo llamo de la siguiente forma.

Código PHP:
<?php
       
require('../clases/indice.class');
       
$texto1->mostrar();
Agradezco cualquier ayuda que me puedan brindar

Un Cordial saludo
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com
  #2 (permalink)  
Antiguo 01/04/2010, 16:15
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: Clase no muestra datos

Debes de saber (uses PHP OOP o no) que PHP es un lenguaje stateless, es decir los datos no persisten entre las paginas.

Por otro lado donde tu estas o más bien lo que estas haciendo te falta el segundo parámetro a tu clase, ya que el segundo parámetro es la lista que quieres mostrar. Es por eso que no te muestra nada.

Saludos.
  #3 (permalink)  
Antiguo 01/04/2010, 16:55
 
Fecha de Ingreso: abril-2010
Mensajes: 1
Antigüedad: 14 años
Puntos: 0
Respuesta: Clase no muestra datos

te falta mandar llamar la clase.

Código:
$texto1 = new Indice();
 $texto1->mostrar();
eso deberia funcionar...
  #4 (permalink)  
Antiguo 01/04/2010, 17:00
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Clase no muestra datos

puedo reemplazarlo por '' si no lo necesito?

Reemplace en las partes que no iba lista o titulo con '','blablabla'

pero tampoco+ los muestra
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com
  #5 (permalink)  
Antiguo 01/04/2010, 17:32
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Clase no muestra datos

Cita:
Iniciado por chilakilez Ver Mensaje
te falta mandar llamar la clase.

Código:
$texto1 = new Indice();
 $texto1->mostrar();
eso deberia funcionar...
no, tampoco funciona
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com
  #6 (permalink)  
Antiguo 02/04/2010, 10:51
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: Clase no muestra datos

Cita:
Iniciado por claudio_hbl Ver Mensaje
puedo reemplazarlo por '' si no lo necesito?

Reemplace en las partes que no iba lista o titulo con '','blablabla'

pero tampoco+ los muestra
Pasa, como ya te dijo GatorV, que no estás pasando el segundo parámetro al constructor. Esto debería lanzarte un Warning........
Pásale el segundo parámetro al __construct() o le pones en el mismo __construct el parámetro por defecto, tipo ($param1, $param2='blablabla') y ejecuta nuevamente
  #7 (permalink)  
Antiguo 02/04/2010, 12:52
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: Clase no muestra datos

Que tal Claudio

Por lo que vi del ejemplo, te recomendaría cambiar de tutorial

Te lo ajusto:
  • Le cambio el nombre por algo más nemotécnico
  • La clase está mal indentada
  • tiene errores de sintaxis (falta un ; en el atributo, concatenas y te faltan los .), también de lógica (el título se repite tantas vaces como ítems tiene la lista, tienes llaves de más, etc.
  • agrego estándar de codificación Zend
  • Los objetos por defecto no deberían imprimir por pantalla, nunca tendrías el control de tu interfaz

Código PHP:
// Archivo Lista.php

class Lista 
{
   private 
$_items = array();
   private 
$_titulo;

   public function 
__construct($titulo$items)
   {
        
$this->_titulo $titulo;
        
$this->_items $items;
   }
   public function 
mostrar()
   {
      
$html '<h1>' $this->_titulo '</h1>';

      
$html .= '<ul>';

      foreach ( 
$this->_items as $item){

         
$html .= '<li>' $item '</li>';

      }
      
$html .= '</ul>';

      return 
$html;
   }
   public function 
__toString()
   {
       return 
$this->mostrar();
   }
}

// Archivo index.php

require_once 'Lista.php';

$lista = new Lista('Mi título', array('item 1','item 2','item 3') );

echo 
$lista
A ver si este ejemplo te queda mucho más claro.

Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #8 (permalink)  
Antiguo 02/04/2010, 22:52
 
Fecha de Ingreso: febrero-2009
Mensajes: 5
Antigüedad: 15 años, 2 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
  #9 (permalink)  
Antiguo 03/04/2010, 07:23
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Clase no muestra datos

Hola Enrique.

Gracias por tu respuesta, seguí tu código y funcionó perfecto, solo que queda una duda, la siguiente linea,
Código PHP:
Ver original
  1. $lista = new Lista('Mi título', array('item 1','item 2','item 3') );
, no puede ir en un archivo aparte, te explico:

La idea es que esa parte es como un encabezado de páginas donde el $titulo y los $items son diferente para cada una, es por ello que estoy tratando de hacerlo asi, para que en una segunda página, los pueda llamar indistintamente, como por ejemplo
Código PHP:
Ver original
  1. $lista2 = new Lista('Segundo Titulo', array('item 1','item 2','item 3')
.

Espero se haya entendido.

Nuevamente Gracias

Un Cordial saludo.
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com
  #10 (permalink)  
Antiguo 03/04/2010, 07:29
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: Clase no muestra datos

Estimado, el que no está entendiendo eres tú , las clases sirven para reusarse, por lo tanto la clase se encontrará en un único lugar y tú la llamarás todas las veces que necesites, desde archivos distintos, con los valores que necesites.

El ejemplo es claro, ahora tienes que razonar y armar lo que necesitas, no solicitar que nosotros terminemos lo que necesitas hacer.

¿La idea es aprender, no?

Saludos!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #11 (permalink)  
Antiguo 03/04/2010, 07:47
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Clase no muestra datos

si, esta claro, solo tenia esa duda, ya que estoy recién introduciéndome a la POO. con tu ejemplo me las voy a arreglar.
Yo uso Linux, y las pruebas las hago en local, es por ello que alomejor no muestra los errores, eso de ZEND lo puedo usar en mi pc?, me puedes indicar alguna página de algun tutorial bueno.

Gracias
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com

Etiquetas: clase, muestra
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 13:02.