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; // AlicePromoçã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; // BobValidaçã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); // throwsDestrutor
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 USDConstrutor 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 worksPadrã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
- Classes, propriedades e métodos
- Construtores e destrutores
- Propriedades e métodos estáticos
- Visão geral dos métodos mágicos