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::$atributo
oNombreClase::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ó?
$titulo
ygetAutor()
son estáticos, así que los usamos directamente conLibro::
.- Dentro de
imprimirTitulo()
, usamosself::$titulo
para 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ó?
Ciencia
hereda deLibro
y usaparent::$titulo
para 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ó?
$instancias
cuenta 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$this
porque 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.