En PHP, una clase es un molde que define propiedades (datos) y métodos (comportamientos). A partir de una clase se crean objetos (instancias).
<?php
class Persona {
// Propiedades
public string $nombre;
public int $edad;
// Método
public function saludar(): string {
return "Hola, soy " . $this->nombre;
}
}
// Instanciar (crear objeto)
$p = new Persona();
$p->nombre = "Pablo";
$p->edad = 30;
echo $p->saludar(); // Hola, soy Pablo
?>
| Modificador | Acceso | Uso típico |
|---|---|---|
public | Desde cualquier lugar | API pública de la clase |
protected | Dentro de la clase y sus hijas | Para herencia |
private | Solo dentro de la clase | Encapsular detalles internos |
<?php
class Persona {
public function __construct(
public string $nombre, // promoción de propiedades (PHP 8+)
public int $edad
) {}
public function __destruct() {
// Limpieza al destruir el objeto (rara vez necesario)
}
}
$p = new Persona("Ana", 25);
?>
<?php
class Usuario {
private string $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 getEmail(): string {
return $this->email;
}
}
$u = new Usuario();
$u->setEmail("ana@mail.com");
echo $u->getEmail();
?>
<?php
class Matematica {
public const PI = 3.14159;
public static function sumar(int|float $a, int|float $b): int|float {
return $a + $b;
}
}
echo Matematica::PI;
echo Matematica::sumar(2, 3);
?>
<?php
class Persona {
public function __construct(public string $nombre) {}
public function saludar(): string { return "Hola, soy $this->nombre"; }
}
class Estudiante extends Persona {
public function __construct(string $nombre, public string $curso) {
parent::__construct($nombre);
}
public function info(): string {
return $this->saludar() . " y estudio $this->curso";
}
}
$e = new Estudiante("Luis", "Programación");
echo $e->info();
?>
Definen una plantilla con métodos que las hijas deben implementar.
<?php
abstract class Forma {
abstract public function area(): float;
}
class Rectangulo extends Forma {
public function __construct(private float $ancho, private float $alto) {}
public function area(): float { return $this->ancho * $this->alto; }
}
?>
Contratos: definen qué métodos deben existir, sin implementación.
<?php
interface Exportable {
public function export(): string;
}
class Reporte implements Exportable {
public function export(): string { return "CSV..."; }
}
?>
Reutilización horizontal de métodos entre clases no relacionadas.
<?php
trait Loggable {
public function log(string $msg): void { echo "[LOG] $msg\n"; }
}
class Servicio {
use Loggable;
}
$s = new Servicio();
$s->log("Listo");
?>
<?php
class Calculadora {
public function sumar(int $a, int $b): int {
return $a + $b;
}
public function buscar(?string $q): array { // acepta null, retorna array
return $q ? ["resultado"] : [];
}
}
?>
<?php
namespace App\Model;
class Usuario { /* ... */ }
// composer.json (PSR-4)
// "autoload": { "psr-4": { "App\\\": "src/" } }
// $ composer dump-autoload
// require 'vendor/autoload.php'; // carga automática
?>
private/protected, exponer getters/setters cuando haga falta.declare(strict_types=1); al inicio).