Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema clases con constructor/destructor

Estas en el tema de Problema clases con constructor/destructor en el foro de PHP en Foros del Web. Hola. Estoy haciendo un curso online y he llegado a un punto donde me he atascado con un ejercicio de clases con constructores y destructores. ...
  #1 (permalink)  
Antiguo 05/04/2015, 11:52
 
Fecha de Ingreso: abril-2015
Mensajes: 4
Antigüedad: 9 años
Puntos: 0
Pregunta Problema clases con constructor/destructor

Hola.
Estoy haciendo un curso online y he llegado a un punto donde me he atascado con un ejercicio de clases con constructores y destructores.
Estoy aprendiendo PHP por mi cuenta y por más que he buscado en foros y ejemplos y teoría no doy con la solución al ejercicio.
Os lo pongo junto a mi código a ver si me podéis ayudar algo.

GRACIAS !!

Crear clase class.php que simula una lista de productos. La clase contendrá:
  • Propiedad de tipo array con nombres y precios de productos
  • Constructor que muestre por pantalla "Objeto construído"
  • Destructor que muestre por pantalla "Objeto destruído"
  • Función que añade bebidas a la propiedad de la clase
  • Función que devuelve el nº de productos almacenados
  • Función que muestra en una tabla el producto y precio de cada producto (muestra el contenido de la propiedad de la clase)

Además, es necesario un script que accede a las funciones de la clase class.php para añadir productos a la lista y muestra los productos en una tabla HTML de modo que por pantalla se vea algo similar a:

Objeto construído.

(Aquí la tabla)
NOMBRE -- PRECIO
* -- * €
* -- * €
* -- * €

El nº total de productos es: X

Objeto destruído.


Y este es mi código actual:

Código class.php:
Ver original
  1. <?php
  2.  
  3. class clase_prod
  4. {
  5.  
  6. //propiedades
  7. public $productos;
  8.  
  9. //constructor
  10. function __construct()
  11. {
  12.     echo "Objeto construído.";
  13. }
  14.  
  15. //destructor
  16. function __destruc()
  17. {
  18.     echo "Objeto destruído.";
  19. }
  20.  
  21. //agregar productos
  22. function agregar_productos($nombre, $precio)
  23. {
  24.     $this->productos('Coca Cola'=>'1,5', 'Café'=>'2', 'Agua Mineral'=>'0,75', 'Cerveza'=>'1,25');
  25. }
  26.  
  27. //contar productos
  28. function contar_productos()
  29. {
  30.     $num_productos=count($productos);
  31.     echo "Nº total de productos: $num_productos";
  32. }
  33.  
  34. }
  35.  
  36. ?>

Código script.php:
Ver original
  1. <html>
  2.  
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>EJERCICIO 1 - clases</title>
  6. </head>
  7.  
  8. <body>
  9. <h1>PRODUCTOS</h1>
  10.  
  11. <?php include 'class.php';
  12.  
  13. $prod1 = new clase_prod;
  14.  
  15. $prod1->agregar_productos("Limonada", "1"); ?>
  16.  
  17. <p>
  18. <table width="40%" border="1">
  19.     <tr>
  20.         <td>
  21.             NOMBRE
  22.         </td>
  23.         <td>
  24.             PRECIO
  25.         </td>
  26.     </tr>
  27.     <?php
  28.         foreach ($productos as $key=>$value)
  29.         {
  30.     ?>
  31.     <tr>
  32.         <td>
  33.             <?php echo $key; ?>
  34.         </td>
  35.         <td>
  36.             <?php echo $value; ?> €
  37.         </td>
  38.     </tr>
  39.     <?php
  40.         }
  41.     ?>
  42. </table>
  43. </p>
  44.  
  45. <p>
  46.     <?php contar_productos(); ?>
  47. </p>
  48.  
  49. </body>
  50. </html>

Muchas gracias por la ayuda.
  #2 (permalink)  
Antiguo 05/04/2015, 12:09
(Desactivado)
 
Fecha de Ingreso: abril-2015
Ubicación: España
Mensajes: 616
Antigüedad: 9 años
Puntos: 74
Respuesta: Problema clases con constructor/destructor

has puesto function __destruc() en vez de function __destruct()
  #3 (permalink)  
Antiguo 05/04/2015, 12:31
 
Fecha de Ingreso: abril-2015
Mensajes: 4
Antigüedad: 9 años
Puntos: 0
Respuesta: Problema clases con constructor/destructor

Gracias.

Sí, acabo de ver que me faltaba la "t", pero aun así sigue sin funcionarme el conjunto
  #4 (permalink)  
Antiguo 05/04/2015, 14:08
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Problema clases con constructor/destructor

Que es esto?

Código PHP:
    $this->productos('Coca Cola'=>'1,5''Café'=>'2''Agua Mineral'=>'0,75''Cerveza'=>'1,25'); 
no sera queres declarar el contenido de esta forma?

Código PHP:
    $this->productos = array('Coca Cola'=>'1,5''Café'=>'2''Agua Mineral'=>'0,75''Cerveza'=>'1,25'); 
__________________
Mono programando!
twitter.com/eguimariano
  #5 (permalink)  
Antiguo 05/04/2015, 16:37
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Problema clases con constructor/destructor

Tienes varios problemas uno es que no inicias la propiedad productos como arreglo y luego intentas hacer esto:
Código PHP:
Ver original
  1. function agregar_productos($nombre, $precio)
  2.  
  3. {
  4.  
  5.     $this->productos('Coca Cola'=>'1,5', 'Café'=>'2', 'Agua Mineral'=>'0,75', 'Cerveza'=>'1,25');
  6.  
  7. }
Php no sabe que quieres hacer con eso, ya que tu propiedad productos no es ni un arreglo, ni tampoco una función. Por el código que tienes, supongo que quieres crear un objeto Clase_prod que ya contenga algunos productos y luego ir insertando nuevos, esto lo puedes hacer desde el constructor o desde la declaración de las propiedades, yo lo haré desde el constructor.
Código PHP:
Ver original
  1. public function __construct()
  2.     {
  3.         $this->productos = array(
  4.             'Coca Cola'=>'1,5',
  5.             'Café'=>'2',
  6.             'Agua Mineral'=>'0,75',
  7.             'Cerveza'=>'1,25',
  8.         );
  9.  
  10.         echo 'Objeto creado';
  11.     }
Lo siguiente es que corrijas el método que agrega nuevos productos de la siguiente forma
Código PHP:
Ver original
  1. public function agregar_producto($nombre, $precio)
  2.     {
  3.         $this->productos[$nombre] = $precio;
  4.     }

Por ultimo esta parte no es correcta:
Código PHP:
Ver original
  1. <?php
  2.         foreach ($productos as $key=>$value)
  3.         {
  4.     ?>
productos es una propiedad publica asi que debes de accederla desde el objeto y no como una variable.
Código PHP:
Ver original
  1. $prod1 = new clase_prod;
  2.  
  3. $prod1->agregar_productos("Limonada", "1");
  4.  
  5. foreach ($prod1->productos as $key=>$value)
  6.         {
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #6 (permalink)  
Antiguo 06/04/2015, 06:07
 
Fecha de Ingreso: abril-2015
Mensajes: 4
Antigüedad: 9 años
Puntos: 0
Respuesta: Problema clases con constructor/destructor

Muchas gracias.

Voy a revisarlo en cuanto tenga un hueco al salir del trabajo y os digo algo :)

Sois estupendos. Así da gusto entrar en foros y aprender tanto !!
  #7 (permalink)  
Antiguo 06/04/2015, 11:27
 
Fecha de Ingreso: abril-2015
Mensajes: 4
Antigüedad: 9 años
Puntos: 0
Respuesta: Problema clases con constructor/destructor

Tuve que retocar algunas cosas, pero con vuestras indicaciones ya me funciona.

Cambié:

Código PHP:
Ver original
  1. <p>
  2.     <?php $prod1->contar_productos(); ?>
  3. </p>

y

Código PHP:
Ver original
  1. //contar productos
  2. public function contar_productos()
  3. {
  4.     $num_productos=count($this->productos);
  5.     echo "Nº total de productos: $num_productos";
  6. }

Muchas gracias. Ahora a poner en práctica lo aprendido en los fallos y cómo corregirlos.

Saludos.

Etiquetas: clases, html, tabla
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 23:03.