Clases y métodos abstractos
Defina clases base parcialmente implementadas con la palabra clave abstract.
Clases y métodos abstractos es una lección gratuita de PHP Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de PHP Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de PHP Academy incluye 4 lecciones en total.
Introducción: clases abstractas
Una clase abstracta no se puede instanciar directamente: es una plantilla. Los métodos abstractos declaran una firma sin implementación; las subclases deben proporcionarla.
Conceptos clave
Conceptos clave:
- Se declara con
abstract class - Los métodos abstractos no tienen cuerpo:
abstract public function x(); - Las subclases deben implementar todos los métodos abstractos
- Puede contener tanto métodos abstractos como concretos
Definición de una clase abstracta
Ejemplo:
<?php
abstract class Animal {
public function __construct(protected string $name) {}
// Must be implemented by each subclass
abstract public function sound(): string;
// Shared concrete method
public function introduce(): string {
return "I am {$this->name} and I say: " . $this->sound();
}
}Implementación de métodos abstractos
Continuación:
<?php
class Dog extends Animal {
public function sound(): string { return 'Woof'; }
}
class Cat extends Animal {
public function sound(): string { return 'Meow'; }
}
$animals = [new Dog('Rex'), new Cat('Whiskers')];
foreach ($animals as $a) {
echo $a->introduce() . PHP_EOL;
}
// I am Rex and I say: Woof
// I am Whiskers and I say: MeowPatrón Template Method
Más información:
<?php
abstract class DataProcessor {
// Template method: defines the algorithm skeleton
final public function process(array $data): array {
$data = $this->validate($data);
$data = $this->transform($data);
return $this->format($data);
}
abstract protected function validate(array $data): array;
abstract protected function transform(array $data): array;
protected function format(array $data): array { return $data; }
}Clase abstracta frente a interfaz
Uso práctico:
<?php
// Use abstract class when:
// - Subclasses share implementation code
// - You need constructor logic or state
// Use interface when:
// - Defining a contract (no implementation needed)
// - Multiple inheritance of type is needed
// A class can only extend ONE abstract class
// but can implement MULTIPLE interfacesImplementación parcial
Avanzado:
<?php
abstract class Repository {
// Concrete method available to all subclasses
protected function findById(int $id, string $table): array {
$stmt = $this->getDb()->prepare("SELECT * FROM $table WHERE id = ?");
$stmt->execute([$id]);
return $stmt->fetch(PDO::FETCH_ASSOC) ?: [];
}
abstract protected function getDb(): PDO;
abstract public function find(int $id): array;
}Patrón
Los patrones comunes de clases abstractas se utilizan para resolver de forma clara problemas de diseño recurrentes. Aplíquelos de manera coherente para obtener un código legible y fácil de mantener.
Cuándo utilizarlas
Saber cuándo aplicar las clases abstractas es tan importante como saber cómo hacerlo. El uso excesivo genera complejidad; el uso insuficiente genera duplicación.
Ejemplo del mundo real
En las aplicaciones reales, las clases abstractas aparecen con frecuencia en frameworks, ORM y capas de servicios. Comprenderlas le prepara para contribuir a proyectos profesionales de PHP.
Errores comunes
Evite estos errores al trabajar con clases abstractas:
- Las clases abstractas no se pueden instanciar con new
- Todos los métodos abstractos deben implementarse en subclases concretas
- Use el patrón Template Method para definir la estructura de los algoritmos
- Las clases abstractas pueden tener constructores, propiedades y métodos concretos
Comprobación rápida
¿Se puede instanciar directamente una clase abstracta con 'new'?
Repaso: clases abstractas
Resumen:
- Las clases abstractas no se pueden instanciar con new
- Todos los métodos abstractos deben implementarse en subclases concretas
- Use el patrón Template Method para definir la estructura de los algoritmos
- Las clases abstractas pueden tener constructores, propiedades y métodos concretos
Preguntas frecuentes
¿La lección «Clases y métodos abstractos» es gratis?
Sí — el texto completo de «Clases y métodos abstractos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de PHP Academy, actualiza a CoddyKit PRO. El curso de PHP Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Clases y métodos abstractos»?
Defina clases base parcialmente implementadas con la palabra clave abstract. Practicas PHP Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar PHP Academy?
No se requiere experiencia previa. PHP Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Clases y métodos abstractos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de PHP Academy?
Sí. Cada lección de PHP Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Extensión de clases mediante herencia
- Clases y métodos abstractos
- Implementación de interfaces
- Traits para reutilizar código