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ó?
- $tituloy- getAutor()son estáticos, así que los usamos directamente con- Libro::.
- 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 de- Libroy usa- parent::$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.

