Atributos y métodos estáticos en PHP
Bienvenido a una nueva lección de nuestro curso básico de PHP 8. Hoy nos metemos con los atributos y métodos estáticos, una forma genial de trabajar con datos y funciones que pertenecen a una clase, sin necesidad de crear objetos. Si ya manejas excepciones y traits, esto te va a encantar porque es como un atajo súper útil. Todo va a ser claro, práctico y con ejemplos que te van a flipar. ¡Empecemos!
¿Qué son los atributos y métodos estáticos?
Los atributos y métodos estáticos son elementos que no pertenecen a un objeto específico, sino a la clase misma. Esto significa que puedes usarlos sin crear una instancia (new), y todos los objetos de la clase comparten los mismos valores estáticos. Son perfectos para datos o funciones que deben ser globales a la clase, como contadores o utilidades.
Características clave:
- Atributos estáticos: Variables compartidas por toda la clase, declaradas con
static. - Métodos estáticos: Funciones que se llaman directamente desde la clase, también con
static. - Acceso directo: Usa
NombreClase::$atributooNombreClase::metodo(). - No usa
$this: Como no hay objeto, usamosself(dentro de la clase) oparent(en herencia).
La receta básica en PHP es esta:
class MiClase {
public static $atributoEstatico = "Valor compartido";
public static function metodoEstatico() {
return "¡Soy estático!";
}
}
// Acceder sin instanciar echo MiClase::$atributoEstatico; echo MiClase::metodoEstatico();
Probando atributos y métodos estáticos en acción
¡Manos a la obra! Crea un archivo atributos_metodos_estaticos.php en curso_php8 (dentro de C:\xampp\htdocs) y prueba esto:
Ejemplo 1: Clase Libro
<?php
class Libro {
public static $titulo = "Programación en PHP 8";
public static function getAutor() {
echo "Daniels Marti<br>";
}
public function imprimirTitulo() {
echo "Título desde instancia: " . self::$titulo . "<br>";
}
}
// Acceder sin instanciar
echo "Título estático: " . Libro::$titulo . "<br>";
Libro::getAutor();
// Acceder desde un objeto
$libro = new Libro();
$libro->imprimirTitulo();
?>
Abre http://localhost/curso_php8/atributos_metodos_estaticos.php. Verás:
Título estático: Programación en PHP 8 Daniels Marti Título desde instancia: Programación en PHP 8
¿Qué pasó?
$tituloygetAutor()son estáticos, así que los usamos directamente conLibro::.- Dentro de
imprimirTitulo(), usamosself::$titulopara acceder al atributo estático. - Creamos un objeto solo para mostrar que también funciona desde una instancia.
Ejemplo 2: Herencia con estáticos
<?php
class Libro {
public static $titulo = "Programación en PHP 8";
}
class Ciencia extends Libro {
public function categoria() {
echo "Programación - " . parent::$titulo . "<br>";
}
}
$ciencia = new Ciencia();
$ciencia->categoria();
// Acceder directamente desde la clase padre
echo "Título desde Libro: " . Libro::$titulo . "<br>";
?>
Resultado:
Programación - Programación en PHP 8 Título desde Libro: Programación en PHP 8
¿Qué pasó?
Cienciahereda deLibroy usaparent::$titulopara acceder al atributo estático.- Mostramos que el atributo estático está disponible tanto en la clase hija como en la padre.
Ejemplo práctico
Ejemplo: Contador de instancias
<?php
class Contador {
public static $instancias = 0;
public function __construct() {
self::$instancias++;
}
public static function getInstancias() {
return "Total de instancias: " . self::$instancias . "<br>";
}
}
echo Contador::getInstancias();
$obj1 = new Contador();
echo Contador::getInstancias();
$obj2 = new Contador();
echo Contador::getInstancias();
?>
Resultado:
Total de instancias: 0 Total de instancias: 1 Total de instancias: 2
¿Qué pasó?
$instanciascuenta cuántos objetos se crean.- Cada
new Contador()aumenta el contador estático. getInstancias()muestra el valor compartido sin necesidad de un objeto.
Ejercicio para practicar
¡Tu turno pica codigo! Ve a curso_php8 y prueba este reto:
- Clase Calculadora
Creacalculadora_estatica.php:
<?php
class Calculadora {
public static function suma($a, $b) {
return $a + $b;
}
public static function resta($a, $b) {
return $a - $b;
}
public static function multiplicacion($a, $b) {
return $a * $b;
}
public static function division($a, $b) {
if ($b == 0) {
throw new Exception("División por cero no permitida");
}
return $a / $b;
}
}
try {
echo "Suma: " . Calculadora::suma(5, 3) . "<br>";
echo "Resta: " . Calculadora::resta(5, 3) . "<br>";
echo "Multiplicación: " . Calculadora::multiplicacion(5, 3) . "<br>";
echo "División: " . Calculadora::division(6, 2) . "<br>";
echo "División: " . Calculadora::division(6, 0) . "<br>";
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "<br>";
}
?>
Ejecuta en localhost/curso_php8/ y juega con los valores. Verás:
Suma: 8 Resta: 2 Multiplicación: 15 División: 3 Error: División por cero no permitida
Consejos para no enredarte
- Sin
$this: Los estáticos no usan$thisporque no hay objeto; usaself::oparent::. - Cuida las modificaciones: Cambiar un atributo estático afecta a todas las instancias.
- Usa con propósito: Perfectos para contadores, configuraciones o utilidades, pero no abuses.
- Herencia clara:
parent::te conecta con los estáticos de la clase padre.
¡A por más POO!
¡ran trabajo Ahora los atributos y métodos estáticos son tu herramienta para compartir datos sin instanciar. En la próxima lección, veremos creación y manipulación de arrays para manejar colecciones como pros. Si algo no te queda claro, déjame un comentario.
Lo que aprendiste hoy:
- Qué son: Atributos y métodos que viven en la clase, no en objetos.
static: La palabra mágica para declararlos.- Ejemplos vivos: Hiciste libros y contadores como crack.
- Practicaste: Creaste una calculadora estática como pro.
- Tip del pro: Usa estáticos para datos compartidos o funciones rápidas, pero no para todo.

