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

Duda con Visibilidad de Atributos

Estas en el tema de Duda con Visibilidad de Atributos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola amigos tengo el siguiente codigo Código PHP: <?php class  persona {     protected  $_nombre ;       function  __construct ( $nom ){          $this -> _nombre = ...
  #1 (permalink)  
Antiguo 29/12/2005, 09:59
Avatar de shinblood  
Fecha de Ingreso: diciembre-2003
Ubicación: lima
Mensajes: 214
Antigüedad: 20 años, 4 meses
Puntos: 1
Duda con Visibilidad de Atributos

Hola amigos tengo el siguiente codigo
Código PHP:
<?php
class persona{
    protected 
$_nombre;
      function 
__construct($nom){
        
$this->_nombre=$nom;
    }
    public function 
me_llamo(){
        return 
$this->_nombre;
    } 
}
class 
alumno extends persona{
    private 
$_grado;
      function 
__construct($nom){
        
parent::__construct($nom);
        if(
$nom=="Jorge")
            
$this->_grado="5A";
        
    }
    public function 
mi_grado(){

      echo 
"Me llamo: ".parent::$_nombre." y estoy en ".$this->_grado;
      
//return $this->_grado;

    
}
}
$perso1 = new alumno("Jorge");
//echo "Me llamo: ".$perso1->me_llamo()." y estoy en ".$perso1->mi_grado();
$perso1->mi_grado();
?>
y me sale este error
Fatal error: Cannot access protected property persona::$_nombre

segun lo que he entido en lectura del manual php el atributo _nombre de la clase persona deberia ser accesible para la clase alumno ya que es de tipo protected .
Alguien me podria orientar si estoy errado en mi concepto?
__________________
saludos :adios:
  #2 (permalink)  
Antiguo 29/12/2005, 14:33
 
Fecha de Ingreso: septiembre-2005
Mensajes: 142
Antigüedad: 18 años, 7 meses
Puntos: 3
Duda con Visibilidad de Atributos

Buenas shinblood, primero darte la bienvenida al mundillo de PHP5 ya era hora q encontrara a alguien q programara en la versión 5. En fin vamos al lío. El problemilla que tienes es bastante facilillo de resolver lo que pasa es que puede ser enreversado si acabas de entrar en los objetos. Primero te pongo el código correctamente y te explico los fallos que tenias.

Código PHP:
<?php
class persona{
 
protected 
$_nombre;
 
function 
__construct($nom){
$this->_nombre=$nom;
}
public function 
me_llamo(){
return 
$this->_nombre;
}
}
 
class 
alumno extends persona{
 
private 
$_grado;
 
function 
__construct($nom){
parent::__construct($nom);
if(
$nom=="Jorge")
$this->_grado="5A";
 
}
public function 
mi_grado(){
 
echo 
"Me llamo: "$this->_nombre." y estoy en ".$this->_grado;
 
}
}
 
$perso1 = new alumno("Jorge");
$perso1->mi_grado();
?>
Bien ahora ya ejecuta, cuando tu extiendes de una clase padre los atributos protected se heredan y son accesibles desde la clase hija solo tienes que acceder como con un atributo normal $this-><nombre_atributo>. Nada de parent::

En fin que sepas q tambíén puedes utilizar el metodo __toString() para mostrar una cadena por ejemplo añade este método mágico a tu metodo mi_grado.
Código PHP:
    public function __toString(){
        return 
"Me llamo: "$this->_nombre." y estoy en ".$this->_grado;
    } 
Y podrás mostrar el mismo mensaje solo con hacer un echo del objeto en question:

Código PHP:
echo $perso1

Última edición por Casuis; 29/12/2005 a las 14:48
  #3 (permalink)  
Antiguo 29/12/2005, 15:02
Avatar de shinblood  
Fecha de Ingreso: diciembre-2003
Ubicación: lima
Mensajes: 214
Antigüedad: 20 años, 4 meses
Puntos: 1
ok muchas gracias por tu ayuda no se me habia ocurrido llamar al atributo de la clase padre de manera directa, bueno es el precio a pagar por principiante en POO para PHP,
Estamos en contacto.
__________________
saludos :adios:
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 21:42.