Menu
Coddy logo textTech

Métodos y propiedades estáticos

Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy — lección 17 de 91.

Al igual que las propiedades pueden ser estáticas, los métodos también pueden pertenecer a la clase misma en lugar de a objetos individuales. Los métodos estáticos se llaman directamente en la clase, sin necesidad de crear una instancia primero.

Declaras un método estático usando la palabra clave static y lo llamas con el nombre de la clase y el operador :::

<?php
class MathHelper {
    public static function add($a, $b) {
        return $a + $b;
    }
    
    public static function multiply($a, $b) {
        return $a * $b;
    }
}

echo MathHelper::add(5, 3) . "\n";
echo MathHelper::multiply(4, 2);

Salida:

8
8

Los métodos estáticos funcionan bien con las propiedades estáticas. Un patrón común es utilizar un método estático para gestionar datos compartidos de la clase:

<?php
class Counter {
    private static $count = 0;
    
    public static function increment() {
        self::$count++;
    }
    
    public static function getCount() {
        return self::$count;
    }
}

Counter::increment();
Counter::increment();
echo Counter::getCount();

Resultado:

2

Ten en cuenta que los métodos estáticos no pueden usar $this porque no hay una instancia de objeto. Solo pueden acceder a propiedades estáticas y otros métodos estáticos usando self::.

Punto clave: Los métodos estáticos son útiles para funciones de utilidad que no necesitan el estado del objeto, o para gestionar datos a nivel de clase. Proporcionan funcionalidad sin requerir la instanciación de objetos.

challenge icon

Desafío

Fácil

Construyamos un sistema generador de ID que utilice métodos y propiedades estáticos para crear identificadores únicos sin necesidad de instanciar objetos.

Crearás dos archivos para organizar tu código:

  • IdGenerator.php — Define una clase IdGenerator que gestione la generación de IDs únicos utilizando únicamente miembros estáticos. La clase debe tener una propiedad estática privada $lastId que comience en 0 y una propiedad estática privada $prefix establecida en "ID". Crea un método estático generate() que incremente el último ID y devuelva una cadena formateada combinando el prefijo y el nuevo ID (como "ID1", "ID2", etc.). Añade un método estático setPrefix($newPrefix) que cambie el prefijo, y un método estático getLastId() que devuelva el valor actual de $lastId.
  • main.php — Incluye el archivo de la clase IdGenerator. Genera dos IDs utilizando el prefijo por defecto e imprime cada uno en su propia línea. Luego, cambia el prefijo a "USER" utilizando el método estático, genera dos IDs más e imprímelos. Finalmente, imprime el último número de ID llamando al método estático correspondiente.

Recuerda que los métodos estáticos se llaman directamente en la clase usando ClassName::methodName(), y dentro de la clase accedes a las propiedades estáticas con self::$propertyName. Dado que no hay una instancia de objeto, no puedes usar $this en métodos estáticos.

Tu salida debería mostrar la progresión de los IDs con diferentes prefijos, demostrando cómo las propiedades estáticas mantienen sus valores a través de múltiples llamadas a métodos.

Hoja de referencia

Los métodos estáticos pertenecen a la clase misma y se llaman sin crear una instancia. Decláralos usando la palabra clave static y llámalos con el nombre de la clase y el operador :::

<?php
class MathHelper {
    public static function add($a, $b) {
        return $a + $b;
    }
}

echo MathHelper::add(5, 3); // 8

Los métodos estáticos pueden acceder a propiedades estáticas usando self:::

<?php
class Counter {
    private static $count = 0;
    
    public static function increment() {
        self::$count++;
    }
    
    public static function getCount() {
        return self::$count;
    }
}

Counter::increment();
echo Counter::getCount(); // 1

Los métodos estáticos no pueden usar $this porque no hay una instancia del objeto. Solo pueden acceder a propiedades estáticas y otros métodos estáticos usando self::.

Los métodos estáticos son útiles para funciones de utilidad que no necesitan el estado del objeto, o para gestionar datos a nivel de clase sin requerir la instanciación del objeto.

Pruébalo tú mismo

<?php

// Incluye el archivo de la clase IdGenerator
require_once 'IdGenerator.php';

// TODO: Generar dos IDs usando el prefijo predeterminado e imprimir cada uno en su propia línea

// TODO: Cambiar el prefijo a "USER" usando el método estático

// TODO: Generar dos IDs más e imprimir cada uno en su propia línea

// TODO: Imprimir el último número de ID usando el método estático apropiado

?>
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos