Fácil PHP

Contador de instâncias

Enunciado

Crie uma classe Contador com uma propriedade estática $total que começa em 0. Cada vez que um objeto é criado, $total deve ser incrementado. No final, exiba o total de objetos criados.

Requisitos

  • A propriedade $total deve ser public static int.
  • O construtor deve incrementar self::$total.
  • O programa deve criar 3 instâncias e imprimir o total.

Código inicial

<?php

class Contador
{
    // TODO: declare a propriedade estática $total

    public function __construct()
    {
        // TODO: incremente o contador
    }
}

// TODO: crie 3 objetos e exiba o total

Saída esperada

Total de objetos: 3
Ver dica

Use self::$total++ dentro do construtor. Lembre-se de acessar a propriedade com ::.

Mostrar solução
<?php

class Contador
{
    // Propriedade estática compartilhada por todas as instâncias
    public static int $total = 0;

    public function __construct()
    {
        self::$total++; // incrementa o contador da classe
    }
}

// Cria três objetos
new Contador();
new Contador();
new Contador();

echo "Total de objetos: " . Contador::$total . PHP_EOL;

Passo a passo

  1. Declaramos public static int $total = 0; dentro da classe. Por ser estática, ela pertence à classe e não a cada objeto.
  2. No construtor, usamos self::$total++ para incrementar o valor compartilhado sempre que um novo objeto é criado.
  3. Criamos três instâncias com new Contador();. Cada uma executa o construtor e incrementa $total.
  4. Acessamos o valor final com Contador::$total e exibimos na tela.

Por que funciona

A propriedade estática $total é única para toda a classe. Cada chamada ao construtor modifica esse mesmo espaço de memória, independentemente do objeto. Assim, o contador reflete o número total de instâncias criadas.

Erros comuns

  • Esquecer o static na declaração: public int $total = 0; cria uma propriedade de instância. Cada objeto teria seu próprio $total, e o valor final seria sempre 1.
  • Tentar acessar com $this: $this->total++ dentro do construtor gera erro fatal, pois $this não existe em contexto estático. Use self::$total.
  • Acessar como $objeto->total: embora PHP permita, o correto é Contador::$total para deixar claro que é estático.

Outra forma de resolver

Você pode usar um método estático para obter o total:

public static function getTotal(): int {
    return self::$total;
}

Isso encapsula o acesso à propriedade e é preferível se quiser evitar acesso direto.

Saída esperada

Total de objetos: 3