PHP - Forma correcta de usar constructor en clase hija

 
Vista:
Imágen de perfil de facundo

Forma correcta de usar constructor en clase hija

Publicado por facundo (185 intervenciones) el 09/08/2017 00:35:19
Hola gente como andan? Estoy practicando con herencia y me surgieron unas dudas, tengo esta clase:

1
2
3
4
5
6
7
8
class Hija extends Usuario
{
       public function saludar()
    {
        return 'Bienvenido admin ' . parent::getNickname();
    }
 
}
y abajo (o en index.php) hago una instancia de la clase hija(usa el constructor de la clase padre "nombre,apellido,nickname,type)
1
$hija = new Hija('pepe','grillo','pepegrillin','usuario admin');

El tema que al hacer un var_dump de $hija me aparece esto:

UsuarioAdministrador (object) [Object ID #2][6 properties]
id:protected: (string) 123
type:Usuario:private: (string) usuario admin
nickname:Usuario:private: (string) pepegrillin
nombre:Usuario:private: (string) pepe
apellido:Usuario:private: (string) grillo
password:Usuario:private: (string) e10adc3949ba59abbe56e057f20f883e


y si en la clase Hija hago un __construct de esta manera:
1
2
3
4
5
6
7
8
9
public function __construct($nombre,$apellido,$nickname,$type)
    {
        $this->nickname = $nickname;
        $this->nombre = $nombre;
        $this ->apellido = $apellido;
        $this->type=$type;
        $this->id = '525';
    }
$hija = new Hija('pepe','grillo','pepegrillin','usuario admin');

si hago un var_dump de $hija me sale esto:

id:protected: (string) 525
type:Usuario:private: (null) NULL
nickname:Usuario:private: (null) NULL
nombre:Usuario:private: (null) NULL
apellido:Usuario:private: (null) NULL
password:Usuario:private: (string) e10adc3949ba59abbe56e057f20f883e
nickname: (string) pepegrillin
nombre: (string) pepe
apellido: (string) grillo
type: (string) usuario admin


El tema es que si lo hago de la primer manera, no me deja acceder a $this->nickname (al menos que este sea protected y no private)
Entonces... Cual es la manera correcta de hacer un constructor? Y esta bien si se hace de la primer manera y tener que poner las variables en "protected" o es mejor hacerlo de la segunda manera y dejar las variables en "Private" ? Lo que me parece raro es los var dump que uno dice "nombre:Usuario:private: (string) pepe" y en el segundo caso dice solo por ejemplo "nombre : (string) pepe"

Espero que entiendan y puedan ayudarme.Gracias, saludos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Forma correcta de usar constructor en clase hija

Publicado por xve (6935 intervenciones) el 09/08/2017 09:37:25
Hola Facundo, nos puedes mostrar la clase usuario?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de facundo

Forma correcta de usar constructor en clase hija

Publicado por facundo (185 intervenciones) el 09/08/2017 16:10:36
Hola!, esta es la clase padre usuario:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class Usuario
{
	private $type;
	private $nickname;
    private $nombre;
    private $apellido;
	private $password;
	private $id = '123';
 
 
	public function __construct($nombre,$apellido,$nickname,$type)
	{
		$this->nombre = $nombre;
        $this->apellido = $apellido;
        $this->nickname= $nickname;
        $this->type= $type;
        //$this->id = '123';
	}
	public function getnickname()
    {
        return $this->nickname;
    }
 
	public function getId()
	{
	    $asd = $this->id;
		return $asd; //esto es"read only porque es un get"
		return $this;
	}
	public function setPassword($pass)
	{
		$this->password = $pass;
		$this->cryptPassword();
		return $this;
	}
	private function cryptPassword()
	{
		$this->password = md5($this->password);
		return $this;
	}
 
	public function saludar()
	{
		return 'Bienvenido usuario '  . $this->nickname;
		return $this;
	}
}

La idea es dejar las propiedades en Private, pero debido a lo que retornan los var_dump no se cual es la forma correcta de usar los __construct en la clase hija o si no volver a escribirlo es mejor...

como puse antes...en los var_dump en una me sale "nombre:Usuario:private: (string) pepe" y en el segundo caso dice solo "nombre : (string) pepe"

hice una modificacion en la clase Hija, redefini una funcion de la clase padre:

1
2
3
4
5
6
7
8
9
public function getNickname()
    {
        return  Usuario::getnickname();
    }
 
public function saludar()
    {
        return 'Bienvenido admin ' . Hija::getNickname();
    }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar