Inicio » Blog » Atributos y métodos estáticos en PHP

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 o NombreClase::metodo().
  • No usa $this: Como no hay objeto, usamos self (dentro de la clase) o parent (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 y getAutor() son estáticos, así que los usamos directamente con Libro::.
  • Dentro de imprimirTitulo(), usamos self::$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 de Libro y usa parent::$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:

  1. Clase Calculadora
    Crea calculadora_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; usa self:: o parent::.
  • 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.

Deja un comentario

Scroll al inicio