Herencia y Modificadores de Acceso en PHP
Aprende a reutilizar código extendiendo clases con extends, y a proteger datos con los modificadores public, protected y private.
¿Qué es la Herencia en POO?
La herencia permite que una clase secundaria (o clase hija) herede todas las propiedades y métodos de una clase principal (o clase padre) mediante la palabra reservada extends. Esto evita duplicar código y modela jerarquías lógicas.
Los 3 Modificadores de Acceso (Encapsulamiento)
| Modificador | ¿Desde dónde es accesible? | Uso Habitual |
|---|---|---|
public |
Desde cualquier parte (dentro y fuera de la clase). | Métodos que forman la interfaz pública del objeto. |
protected |
Únicamente dentro de la propia clase y sus clases hijas. | Propiedades que las clases heredadas necesitan personalizar. |
private |
Exclusivamente dentro de la clase exacta donde se declaró. | Datos internos sensibles que ninguna otra clase debe alterar directamente. |
Invocación a la Clase Padre con parent::
Cuando una clase hija sobrescribe un método del padre pero desea conservar parte de su comportamiento original, utiliza parent::nombreMetodo().
⚡ Ejemplo de Herencia: Jerarquía de Miembros de Kilopolis
Clase base Usuario extendida por Alumno e Instructor con modificadores de visibilidad y parent::
<!DOCTYPE html>
<html>
<body>
<h2>Herencia y Encapsulamiento en PHP 8.3</h2>
<?php
// 1. Clase Base (Padre)
class Usuario {
public function __construct(
public string $nombre,
protected string $email,
private string $claveHash
) {}
public function getEmail(): string {
return $this->email;
}
public function getRol(): string {
return "Usuario General";
}
public function renderInfo(): string {
return "<strong>{$this->nombre}</strong> ({$this->getEmail()}) - <em>{$this->getRol()}</em>";
}
}
// 2. Clase Hija: Estudiante
class Estudiante extends Usuario {
public function __construct(
string $nombre,
string $email,
string $claveHash,
public string $cohorte = "Bootcamp 2026-A"
) {
// Llamada obligatoria al constructor padre
parent::__construct($nombre, $email, $claveHash);
}
// Sobrescritura de método (Polimorfismo)
public function getRol(): string {
return "Estudiante Activo ({$this->cohorte})";
}
}
// 3. Clase Hija: Instructor
class Instructor extends Usuario {
public function __construct(
string $nombre,
string $email,
string $claveHash,
public array $materias = []
) {
parent::__construct($nombre, $email, $claveHash);
}
public function getRol(): string {
return "Instructor Especialista en " . implode(", ", $this->materias);
}
}
// 4. Instanciación y prueba
$estudiante = new Estudiante(
"Ana Isabel Montaño",
"[email protected]",
"hash_secreto_123",
"Fullstack Cohorte 4"
);
$instructor = new Instructor(
"Prof. David Amador",
"[email protected]",
"hash_docente_999",
["PHP 8.3", "Arquitectura Web", "MySQL"]
);
echo "<p style='color:#2563eb;'>1. " . $estudiante->renderInfo() . "</p>";
echo "<p style='color:#059669;'>2. " . $instructor->renderInfo() . "</p>";
// Intentar acceder a una propiedad private desde fuera generaría un error fatal:
// echo $estudiante->claveHash; // ❌ Error: Cannot access private property
?>
</body>
</html>
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.🚀 ¿Quieres dominar Manual Completo de PHP y crear proyectos reales?
Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.
🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.