0Pricing
PHP Academy · Aula

Construtores e destrutores

Inicialize objetos com __construct e faça a limpeza com __destruct.

Construtores e destrutores é uma aula grátis de PHP Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de PHP Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de PHP Academy inclui 4 aulas no total.

Introdução: Construtores e Destrutores

O método __construct() é executado automaticamente quando um novo objeto é criado. O método __destruct() é executado quando o objeto é coletado pelo coletor de lixo. O PHP 8 introduziu a promoção de propriedades no construtor.

Conceitos fundamentais

Conceitos fundamentais de construtores e destrutores:

  • __construct() inicializa o objeto
  • A promoção de propriedades no construtor reduz o código
  • __destruct() é usado para limpeza (manipuladores de arquivos, conexões)
  • O construtor da classe pai é chamado com parent::__construct()

Construtor básico

Exemplo:

<?php
class User {
    public string $name;
    public string $email;

    public function __construct(string $name, string $email) {
        $this->name  = $name;
        $this->email = $email;
    }
}

$user = new User('Alice', 'alice@example.com');
echo $user->name; // Alice

Promoção no construtor (PHP 8)

Continuação:

<?php
class User {
    // Shorthand: declare and assign in one go
    public function __construct(
        public readonly string $name,
        public readonly string $email,
        private int $loginCount = 0,
    ) {}
}

$u = new User('Bob', 'bob@test.com');
echo $u->name;  // Bob

Validação no construtor

Prática:

<?php
class PositiveInt {
    public function __construct(private int $value) {
        if ($value <= 0) {
            throw new InvalidArgumentException(
                "Value must be positive, got $value"
            );
        }
    }
    public function get(): int { return $this->value; }
}

$n = new PositiveInt(5);  // OK
// new PositiveInt(-1);   // throws

Destrutor

Aprofundamento:

<?php
class FileLogger {
    private mixed $handle;

    public function __construct(string $path) {
        $this->handle = fopen($path, 'a');
    }

    public function log(string $msg): void {
        fwrite($this->handle, date('c') . ' ' . $msg . PHP_EOL);
    }

    public function __destruct() {
        if ($this->handle) fclose($this->handle);
        echo 'File handle released';
    }
}

Padrão de construtor nomeado

Uso avançado:

<?php
class Money {
    private function __construct(
        private float  $amount,
        private string $currency
    ) {}

    public static function usd(float $a): self { return new self($a, 'USD'); }
    public static function eur(float $a): self { return new self($a, 'EUR'); }

    public function format(): string {
        return number_format($this->amount, 2) . ' ' . $this->currency;
    }
}

echo Money::usd(9.99)->format(); // 9.99 USD

Construtor da classe pai

Padrão do mundo real:

<?php
class Animal {
    public function __construct(
        protected string $name,
        protected string $sound
    ) {}
}

class Dog extends Animal {
    public function __construct(string $name) {
        parent::__construct($name, 'Woof');
    }
    public function speak(): string {
        return "{$this->name} says {$this->sound}!";
    }
}

echo (new Dog('Rex'))->speak();  // Rex says Woof!

Vinculação estática tardia nos construtores

Boas práticas:

<?php
class Base {
    public static function create(): static {
        return new static();  // 'static' resolves to calling class
    }
}

class Child extends Base {}

$base  = Base::create();   // Base object
$child = Child::create();  // Child object — static binding works

Padrão prático

Reunindo tudo em um padrão prático para construtores e destrutores.

Armadilhas comuns

Evite estes erros comuns com construtores e destrutores:

  • Sempre chame parent::__construct() ao estender uma classe
  • Use a promoção no construtor no PHP 8+ para reduzir o código repetitivo
  • Não há garantia de que o destrutor será executado em um momento específico
  • Prefira construtores nomeados a várias sobrecargas de __construct()

Verificação rápida

O que é a promoção de propriedades no construtor no PHP 8?

Recapitulação: Construtores e Destrutores

Você estudou construtores e destrutores. Pontos principais para lembrar:

  • Sempre chame parent::__construct() ao estender uma classe
  • Use a promoção no construtor no PHP 8+ para reduzir o código repetitivo
  • Não há garantia de que o destrutor será executado em um momento específico
  • Prefira construtores nomeados a várias sobrecargas de __construct()

Perguntas Frequentes

A aula “Construtores e destrutores” é grátis?

Sim — o texto completo de “Construtores e destrutores” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de PHP Academy, atualize para CoddyKit PRO. O curso de PHP Academy inclui 4 aulas no total.

O que vou aprender em “Construtores e destrutores”?

Inicialize objetos com __construct e faça a limpeza com __destruct. Você pratica PHP Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar PHP Academy?

Nenhuma experiência prévia é necessária. PHP Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Construtores e destrutores”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de PHP Academy?

Sim. Cada aula de PHP Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Classes, propriedades e métodos
  2. Construtores e destrutores
  3. Propriedades e métodos estáticos
  4. Visão geral dos métodos mágicos
← Voltar para PHP Academy