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
$totaldeve serpublic 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
- Declaramos
public static int $total = 0;dentro da classe. Por ser estática, ela pertence à classe e não a cada objeto. - No construtor, usamos
self::$total++para incrementar o valor compartilhado sempre que um novo objeto é criado. - Criamos três instâncias com
new Contador();. Cada uma executa o construtor e incrementa$total. - Acessamos o valor final com
Contador::$totale 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
staticna 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$thisnão existe em contexto estático. Useself::$total. - Acessar como
$objeto->total: embora PHP permita, o correto éContador::$totalpara 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