Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/05/2015, 19:25
juandhalcolo
 
Fecha de Ingreso: mayo-2015
Mensajes: 6
Antigüedad: 9 años
Puntos: 0
Exclamación Problema con el método static

Hola buen día para todos, tengo un problema.

Resulta que estoy haciendo un ejercicio de clases y de repente cuando voy en el ejemplo sobre un método "static" comienzan los problemas, primero, mi código es el siguiente.
(Son dos problemas los comento abajo del código).

Código PHP:
Ver original
  1. <?php
  2.  
  3. class Mulato extends Persona
  4. {
  5.     public function getExtNombre()
  6.     {
  7.         return parent::getConocimiento();
  8.     }
  9. }
  10.  
  11. class Persona
  12. {
  13.     private     $_Estatura          = 1.34;
  14.     public      $_Nombre            = "Pedro";
  15.     public      $_Apellido          = "Gomez";
  16.     public      $_Fechanacimiento   = "04/06/1996";
  17.     static      $_Sexo              = "Masculino";
  18.     protected   $_Conocimiento      = TRUE;
  19.  
  20.  
  21.     public function __construct($Estatura = NULL, $Nombre = NULL,
  22.                                 $Apellido = NULL, $Fechanacimiento = NULL,
  23.                                 $Sexo = NULL, $Conocimiento = FALSE)
  24.     {
  25.         $this->_Estatura        =is_null($Estatura)         ?   $this->_Estatura        :$Estatura;
  26.         $this->_Nombre          =is_null($Nombre)           ?   $this->_Nombre          :$Nombre;
  27.         $this->_Apellido        =is_null($Apellido)         ?   $this->_Apellido        :$Apellido;
  28.         $this->_Fechanacimiento =is_null($Fechanacimiento)  ?   $this->_Fechanacimiento :$Fechanacimiento;
  29.         self::$_Sexo            =is_null($Sexo)             ?   $this->_Sexo            :$Sexo;
  30.         $this->_Conocimiento    =$Conocimiento;
  31.     }
  32.    
  33.     public function getEstatura()
  34.     {
  35.         return $this->_Estatura;
  36.     }
  37.     public function getSexo()
  38.     {
  39.         return self::$_Sexo;
  40.     }
  41.  
  42.     public function getConocimiento()
  43.     {
  44.         if ($this->_Conocimiento){
  45.             echo "Su hoja de vida ah sido registrada gracias por preferirnos.";
  46.         }else{
  47.  
  48.             echo "Lo sentimos su hoja de vida no ah sido registrada por que no cumple con los requisitos.";
  49.         }
  50.     }
  51.     public function __destruct()
  52.         {
  53.             unset($this->_Estatura);
  54.             unset($this->_Nombre);
  55.             unset($this->_Apellido);
  56.             unset($this->_Fechanacimiento);
  57.             unset($this->Sexo);
  58.             unset($this->_Conocimiento);
  59.            
  60.         }
  61. }
  62.  
  63. $Persona=new Persona(1.69,"Juan Diego","Alfonso","04/08/1995","masculino", TRUE);
  64. //$Mulato =new Mulato();
  65. echo "Buen día señor(a) ".$Persona->_Nombre." ".$Persona->_Apellido.
  66.      " usted nació el ".$Persona->_Fechanacimiento." mide ".$Persona->getEstatura().
  67.      " y su sexo es ".$Persona->getSexo()."<br>";
  68. echo $Persona->getConocimiento();
  69.  
  70.  
  71.  
  72. ?>


Ahora les comento, mi primer problema es que el tutorial y las personas que me dicen que realice este método escriben en el constructor lo siguiente para que no cambie.

Código PHP:
Ver original
  1. $this->_Sexo            =$Sexo;

Ahora a lo que yo voy es que a mí me toca con "selft", si lo escribo como dice arriba me da un error (Accessing static property Persona::$_Sexo as non static), ¿que puedo hacer para arreglar esto?.

Ahora el segundo error es que si quiero hacer una clase extendida de persona ejemplo una clase mulato, me van a salir también dos errorres con relación al "self", como pueden ver el código arriba la instancia de la clase extendida está comentada debido al error.
Error1: "Accessing static property Mulato::$_Sexo as non static"
Error2: "Undefined property: Mulato::$_Sexo"

PD: el codigo tal como esta escrito arriba sirve pero en el caso que quite el comentario o cambie el "self" por "this->" me dan los errores.

Gracias.

Última edición por juandhalcolo; 19/05/2015 a las 19:32