Menu
Coddy logo textTech

Métodos e Propriedades Estáticos

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy — lição 17 de 91.

Assim como as propriedades podem ser estáticas, os métodos também podem pertencer à própria classe, em vez de a objetos individuais. Métodos estáticos são chamados diretamente na classe, sem a necessidade de criar uma instância primeiro.

Você declara um método estático usando a palavra-chave static e o chama com o nome da classe e o 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);

Saída:

8
8

Métodos estáticos funcionam bem com propriedades estáticas. Um padrão comum é usar um método estático para gerenciar dados compartilhados da classe:

<?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();

Saída:

2

Observe que métodos estáticos não podem usar $this porque não há uma instância de objeto. Eles só podem acessar propriedades estáticas e outros métodos estáticos usando self::.

Ponto Chave: Métodos estáticos são úteis para funções utilitárias que não precisam do estado do objeto, ou para gerenciar dados em nível de classe. Eles fornecem funcionalidade sem exigir a instanciação de objetos.

challenge icon

Desafio

Fácil

Vamos construir um sistema gerador de IDs que utiliza métodos e propriedades estáticas para criar identificadores únicos sem a necessidade de instanciar objetos.

Você criará dois arquivos para organizar seu código:

  • IdGenerator.php — Defina uma classe IdGenerator que gerencia a geração de IDs únicos usando apenas membros estáticos. A classe deve ter uma propriedade estática privada $lastId começando em 0 e uma propriedade estática privada $prefix definida como "ID". Crie um método estático generate() que incrementa o último ID e retorna uma string formatada combinando o prefixo e o novo ID (como "ID1", "ID2", etc.). Adicione um método estático setPrefix($newPrefix) que altera o prefixo, e um método estático getLastId() que retorna o valor atual de $lastId.
  • main.php — Inclua o arquivo da classe IdGenerator. Gere dois IDs usando o prefixo padrão e imprima cada um em sua própria linha. Em seguida, altere o prefixo para "USER" usando o método estático, gere mais dois IDs e imprima cada um. Por fim, imprima o número do último ID chamando o método estático apropriado.

Lembre-se de que os métodos estáticos são chamados diretamente na classe usando ClassName::methodName(), e dentro da classe você acessa propriedades estáticas com self::$propertyName. Como não há uma instância de objeto, você não pode usar $this em métodos estáticos.

Sua saída deve mostrar a progressão dos IDs com diferentes prefixos, demonstrando como as propriedades estáticas mantêm seus valores através de múltiplas chamadas de método.

Folha de consulta

Métodos estáticos pertencem à própria classe e são chamados sem a criação de uma instância. Declare-os usando a palavra-chave static e chame-os com o nome da classe e o operador :::

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

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

Métodos estáticos podem acessar propriedades 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

Métodos estáticos não podem usar $this porque não há uma instância de objeto. Eles só podem acessar propriedades estáticas e outros métodos estáticos usando self::.

Métodos estáticos são úteis para funções utilitárias que não precisam do estado do objeto, ou para gerenciar dados em nível de classe sem exigir a instanciação de objetos.

Experimente você mesmo

<?php

// Inclua o arquivo da classe IdGenerator
require_once 'IdGenerator.php';

// TODO: Gere dois IDs usando o prefixo padrão e imprima cada um em sua própria linha

// TODO: Altere o prefixo para "USER" usando o método estático

// TODO: Gere mais dois IDs e imprima cada um em sua própria linha

// TODO: Imprima o último número de ID usando o método estático apropriado

?>
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos