Clases y Objetos
PHP tiene POO completa desde la versión 5, pero PHP 7 y 8 la modernizaron enormemente. Las clases se definen con class, los objetos con new, y el acceso a propiedades y métodos usa -> (en lugar del . de Java o C#). Los modificadores de acceso (public, protected, private) funcionan igual que en Java.
PHP 8 introdujo Constructor Property Promotion: en lugar de declarar las propiedades y luego asignarlas en el constructor, pones el modificador directamente en el parámetro del constructor.
PHP 8.1 introdujo readonly properties: propiedades que solo se pueden asignar una vez (en el constructor) y luego son inmutables. PHP 8.2 añadió readonly classes: todas las propiedades de la clase son readonly automáticamente. Los tipos en las propiedades hacen el código más seguro: private string $nombre garantiza que nombre siempre será un string.
Las interfaces y traits son fundamentales en PHP moderno: los traits permiten reutilizar código entre clases sin herencia, resolviendo la limitación de la herencia simple.
<?php
// Clase tradicional
class PersonaTradicional {
public string $nombre;
protected int $edad;
private string $email;
public function __construct(string $nombre, int $edad, string $email) {
$this->nombre = $nombre;
$this->edad = $edad;
$this->email = $email;
}
}
// Constructor property promotion (PHP 8) - equivalente pero más corto
class Persona {
public function __construct(
public readonly string $nombre,
protected int $edad,
private string $email
) {}
public function esMayor(): bool {
return $this->edad >= 18;
}
public function getEmail(): string {
return $this->email;
}
public function setEmail(string $email): void {
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
throw new InvalidArgumentException("Email inválido");
}
$this->email = $email;
}
public function __toString(): string {
return "Persona({$this->nombre}, {$this->edad})";
}
}
$p = new Persona("Ana", 25, "ana@mail.com");
echo $p->nombre; // Ana
echo $p->getEmail(); // ana@mail.com
echo $p; // Persona(Ana, 25)
echo $p->esMayor(); // 1 (true)
// Métodos estáticos
class Calculadora {
public static function sumar(float $a, float $b): float {
return $a + $b;
}
public static function PI(): float { return M_PI; }
}
echo Calculadora::sumar(3, 4); // 7
Practica esta lección
Resuelve los ejercicios del curso de PHP en la app, gratis y con corrección automática.
Empezar a practicar