En PHP, una clase es una plantilla para crear objetos. Define las propiedades y métodos que tendrán los objetos creados a partir de ella.
<?php
// Definir una clase
class Persona {
// Propiedades
private $nombre;
private $edad;
// Constructor
public function __construct($nombre, $edad) {
$this->nombre = $nombre;
$this->edad = $edad;
}
// Métodos
public function saludar() {
return "Hola, soy " . $this->nombre;
}
public function getEdad() {
return $this->edad;
}
public function cumpleanos() {
$this->edad++;
}
}
// Crear un objeto
$persona = new Persona("Juan", 25);
echo $persona->saludar(); // Salida: Hola, soy Juan
echo $persona->getEdad(); // Salida: 25
?>
La herencia permite crear nuevas clases basadas en clases existentes. La clase hija hereda todas las propiedades y métodos públicos y protegidos de la clase padre.
<?php
class Empleado extends Persona {
private $puesto;
private $salario;
public function __construct($nombre, $edad, $puesto, $salario) {
parent::__construct($nombre, $edad);
$this->puesto = $puesto;
$this->salario = $salario;
}
public function getPuesto() {
return $this->puesto;
}
public function getSalario() {
return $this->salario;
}
// Sobrescribir método de la clase padre
public function saludar() {
return parent::saludar() . " y trabajo como " . $this->puesto;
}
}
$empleado = new Empleado("María", 30, "Desarrolladora", 50000);
echo $empleado->saludar();
// Salida: Hola, soy María y trabajo como Desarrolladora
?>
Las interfaces y clases abstractas son herramientas fundamentales para definir contratos y compartir funcionalidad entre clases.
<?php
// Interfaz
interface Trabajador {
public function trabajar();
public function descansar();
}
// Clase abstracta
abstract class Profesional {
protected $especialidad;
public function __construct($especialidad) {
$this->especialidad = $especialidad;
}
abstract public function ejercer();
public function getEspecialidad() {
return $this->especialidad;
}
}
// Implementación
class Programador extends Profesional implements Trabajador {
private $lenguaje;
public function __construct($especialidad, $lenguaje) {
parent::__construct($especialidad);
$this->lenguaje = $lenguaje;
}
public function trabajar() {
return "Programando en " . $this->lenguaje;
}
public function descansar() {
return "Tomando un café";
}
public function ejercer() {
return "Desarrollando software como " . $this->especialidad;
}
}
$programador = new Programador("Backend Developer", "PHP");
echo $programador->trabajar(); // Salida: Programando en PHP
echo $programador->ejercer(); // Salida: Desarrollando software como Backend Developer
?>
Los miembros estáticos pertenecen a la clase en lugar de a una instancia específica. Se pueden acceder sin crear un objeto de la clase.
<?php
class Matematica {
public static $pi = 3.14159;
private static $contador = 0;
public static function sumar($a, $b) {
self::$contador++;
return $a + $b;
}
public static function getContador() {
return self::$contador;
}
}
// Usar miembros estáticos
echo Matematica::$pi; // Salida: 3.14159
echo Matematica::sumar(5, 3); // Salida: 8
echo Matematica::getContador(); // Salida: 1
?>
Desarrolla un sistema de gestión de biblioteca que incluya:
Documento
con métodos comunesLibro
, Revista
y DVD
que hereden de Documento
Prestable
con métodos para prestar y devolverBiblioteca
que gestione el inventarioUtiliza propiedades estáticas para mantener el registro del total de documentos y implementa métodos para buscar por diferentes criterios.