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

Problema con protected OO

Estas en el tema de Problema con protected OO en el foro de Frameworks y PHP orientado a objetos en Foros del Web. A ver, por favor, que alguien me explique por qué no puedo imprimir las variables desde la clase hija. Me aparecen todas las variables vacías. ...
  #1 (permalink)  
Antiguo 07/02/2011, 19:23
 
Fecha de Ingreso: mayo-2007
Mensajes: 200
Antigüedad: 16 años, 10 meses
Puntos: 1
Problema con protected OO

A ver, por favor, que alguien me explique por qué no puedo imprimir las variables desde la clase hija. Me aparecen todas las variables vacías.

Código PHP:
Ver original
  1. <?php
  2. class super
  3. {
  4.     public $s1;
  5.     protected $s2;
  6.     private $s3;
  7.    
  8.     function __construct()
  9.     {
  10.         $this->s1='soy s1';
  11.         $this->s2='soy s2';
  12.         $this->s3='soy s3';
  13.     }
  14. }
  15. class tonteria extends super
  16. {
  17.     function __construct()
  18.     {
  19.         echo $this->s1;
  20.         echo $this->s2;
  21.         echo $this->s3;
  22.     }
  23. }
  24. $tonto = new tonteria();
  25. ?>

Estoy con PHP5 ¿no se supone que las variables protected las puede heredar una clase hija? y además, ¿por qué no me tira error cuando intento imprimir la variable s3 que es privada?
__________________
Blog: http://a-dream-of-dragon.blogspot.com
  #2 (permalink)  
Antiguo 07/02/2011, 19:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Tema movido desde PHP a Frameworks y PHP orientado a objetos
  #3 (permalink)  
Antiguo 07/02/2011, 19:54
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Problema con protected OO

Estas sobreecribiendo el constructor y no seteas ninguna propiedad, en el ejemplo que mostras deberias llamar al parent para ver las propiedades seteadas.


Código PHP:
Ver original
  1. <?php
  2. class super
  3. {
  4.     public $s1;
  5.     protected $s2;
  6.     private $s3;
  7.    
  8.     public function __construct()
  9.     {
  10.         $this->s1='soy s1';
  11.         $this->s2='soy s2';
  12.         $this->s3='soy s3';
  13.     }
  14. }
  15. class tonteria extends super
  16. {
  17.     public function __construct()
  18.     {
  19.         parent::__construct():
  20.         echo $this->s1;
  21.         echo $this->s2;
  22.         echo $this->s3;
  23.     }
  24. }
  25. $tonto = new tonteria();

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #4 (permalink)  
Antiguo 07/02/2011, 20:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema con protected OO

También no te marca error en s3 ya que como es privada, nunca existe en la clase hija por lo tanto crea una variable publica con nombre s3. Si quieres que te tire un error fatal usa setters y getters.

Saludos.
  #5 (permalink)  
Antiguo 07/02/2011, 20:20
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Problema con protected OO

No habia visto lo del error, debe ser por el error_reporting, setealo a E_ALL y te deberia mostrar el notice.

Código PHP:
Ver original 
__________________
http://es.phptherightway.com/
thats us riders :)
  #6 (permalink)  
Antiguo 08/02/2011, 11:50
 
Fecha de Ingreso: mayo-2007
Mensajes: 200
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: Problema con protected OO

Muchas gracias. Ahora está todo solucionado.
La verdad es que me resultaba raro que no se llamara al constructor del padre, pero es que no encontré como hacer la llamada, por lo que pensé que PHP a lo mejor lo hacía de forma automática.

Ahora está todo claro. Gracias.
__________________
Blog: http://a-dream-of-dragon.blogspot.com

Etiquetas: protected
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:46.