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 propia clase en lugar de a objetos individuales. Los métodos estáticos se invocan directamente en la clase, sin necesidad de crear primero una instancia.

Declaras un método estático utilizando 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 usar un método estático para gestionar los 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();

Salida:

2

Observa que los métodos estáticos no pueden usar $this porque no existe una instancia de objeto. Solo pueden acceder a propiedades estáticas y a otros métodos estáticos mediante 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 ID ú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 que combine 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 ID utilizando el prefijo predeterminado e imprime cada uno en su propia línea. Después, cambia el prefijo a "USER" utilizando el método estático, genera dos ID más e imprime cada uno. Finalmente, imprime el número del último ID llamando al método estático correspondiente.

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

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

Pruébalo tú mismo

<?php

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

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

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

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

// TODO: Imprime 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

Practica por tu cuenta: Compilador de PHP online