La herencia permite tomar una clase como base para crear una nueva clase. La nueva clase hereda todos los atributos y comportaminetos de la clase existente.
Muchas veces se hereda una clase con el solo objetivo de utilizar su implementación, lo cual en ocasiones es un error
¿Como saber entonces cuando utilizar la herencia?. Lo primero que uno debe considerar antes de heredar una clase es fijarse si la clase que hereda es del mismo tipo que la clase que pretende heredar.
Por ejemplo, tenemos la clase "UsuarioAdministrador" que hereda la clase "Usuario". En esta situación debe preguntarse si "UsuarioAdministrador" es un Usuario. En este caso sabrá inmediatamente que la herencia es adecuada.
<?php
// creamos la clase Usuario
class Usuario
{
protected $_nombre;
protected $_apellido;
protected $_nivelAcceso = 0;
function __construct($nombre, $apellido)
{
$this->_nombre = $nombre;
$this->_apellido = $apellido;
}
function __toString()
{
return "Usuario: $this->_nombre $this->_apellido - nivel de acceso: $this->_nivelAcceso";
}
}
//creamos la clase UsuarioAdministrador
class UsuarioAdministrador extends Usuario
{
function __construct($nombre, $apellido)
{
parent::__construct($nombre, $apellido);
$this->_nivelAcceso = 1;
}
}
$usuario_1 = new Usuario("Juan", "Perez");
$usuario_2 = new UsuarioAdministrador("Carlos", "Serrot");
echo $usuario_1 . '
' . $usuario_2;
/*
Usuario: Juan Perez - nivel de acceso: 0
Usuario: Carlos Serrot - nivel de acceso: 1
*/
?>
Ahora supongamos que queremos que los distintos usuarios puedan dejar mensajes, y para este fin tenemos la clase llamada "Mensajes". ¿Estáría bien que para usar la implementación de la clase "Mensajes" dentro de la clase "Usuarios" utilicemos la herencia?. Deberíamos preguntarnos si "Usuario" es del mismo tipo que la clase "Mensajes", osea si "Usuario" es un "Mensaje", lo que claramente nos conduce a una respuesta negativa.
Una de las formas de sortear este problema es sencillamente crear variables internas o usar un array como si fuera una colección que contengan la instancia de la clase que querramos utilizar.
<?php
// creamos la clase Mensajes
class Mensajes
{
private $_mensaje;
function __construct($mensaje)
{
$this->_mensaje = $mensaje;
// hago algo con el mensaje...
}
function __toString()
{
return $this->_mensaje;
}
}
// creamos la clase Usuario
class Usuario
{
protected $_nombre;
protected $_apellido;
protected $_nivelAcceso = 0;
protected $_mensajes = array();
function __construct($nombre, $apellido)
{
$this->_nombre = $nombre;
$this->_apellido = $apellido;
}
public function agregarMensaje($mensaje)
{
$this->_mensajes[] = new Mensajes($mensaje);
}
function __toString()
{
$string = "Usuario: $this->_nombre $this->_apellido - nivel de acceso: $this->_nivelAcceso ";
$string .= "
Mensajes: ";
foreach($this->_mensajes as $value){
$string .= "
- $value ";
}
return $string;
}
}
$usuario_1 = new Usuario("Juan", "Perez");
$usuario_1->agregarMensaje("Mensaje 1");
$usuario_1->agregarMensaje("Mensaje 2");
$usuario_1->agregarMensaje("Mensaje 3");
echo $usuario_1;
/*
Usuario: Juan Perez - nivel de acceso: 0
Mensajes:
- Mensaje 1
- Mensaje 2
- Mensaje 3
*/
?>
NewMessage
Скачать скайп для HTC
NewMessage
Скачать скайп для HTC