Se você está lendo isso, jovem escoteiro, é porque você tá curtindo o conteúdo e isso me deixa muito feliz! 😊 Na aula de hoje vamos destrinchar um pouco mais a anatomia de uma classe em PHP e vamos aprender como funcionam os famosos métodos Construtores e Destrutores. E ai, vamos nessa?
Construtores
O método construtor é um método especial que é executado automaticamente (sem que aja intervenção do programador) toda vez que um novo objeto é instanciado a partir de uma classe.
Estruturalmente falando o método construtor é exatamente igual a qualquer outro método da classe, as diferenças são:
- Esse método precisa obrigatoriamente ser chamado de __construct()
- Ele é executado automaticamente no momento da instanciação.
Veja o exemplo abaixo:
<?php
class Carro {
private $velocidade = 0;
private $velocidadeMaxima = 0;
public function __construct($velocidade)
{
$this->velocidadeMaxima = $velocidade;
}
public function acelerar() {
if ($this->velocidade + 10 <= $this->velocidadeMaxima) {
$this->velocidade += 10;
}
}
public function frear() {
if ($this->velocidade - 10 >= 0) {
$this->velocidade -= 10;
}
}
public function obterVelocidadeAtual()
{
return $this->velocidade;
}
}
$carro = new Carro(20);
$carro->acelerar();
$carro->acelerar();
$carro->acelerar();
echo $carro->obterVelocidadeAtual();
Como o método construtor é executado automaticamente no momento da instanciação, é nesse momento que passamos os parâmetros para o mesmo.
No exemplo acima, o código $carro = new Carro(20);
executa o método __construct passando para ele o valor 20. Assim sendo, a propriedade $velocidadeMaxima receberá esse valor, visto que é isso que a função construtora (nesse exemplo) faz.
Na vida real, a partir de molde podemos criar vários objetos. Na Programação Orientada a Objetos é a mesma coisa. Uma classe pode dar origem a quantos objetos você precisar. Veja o exemplo abaixo:
<?php
class Carro {
private $velocidade = 0;
private $velocidadeMaxima = 0;
public function __construct($velocidade)
{
$this->velocidadeMaxima = $velocidade;
}
public function acelerar() {
if ($this->velocidade + 10 <= $this->velocidadeMaxima) {
$this->velocidade += 10;
}
}
public function frear() {
if ($this->velocidade - 10 >= 0) {
$this->velocidade -= 10;
}
}
public function obterVelocidadeAtual()
{
return $this->velocidade;
}
}
$celta = new Carro(140);
$celta->acelerar();
$celta->acelerar();
$corolla = new Carro(200);
$corolla->acelerar();
$corolla->acelerar();
$corolla->acelerar();
echo "Velocidade Celta: " . $celta->obterVelocidadeAtual() . PHP_EOL;
echo "Velocidade Corolla: " . $corolla->obterVelocidadeAtual();
Perceba que no exemplo acima criamos dois objetos, porém cada um recebe dados diferentes no construtor e são completamente independentes. Apesar de terem sidos criados a partir da mesma classe, o que acontece em um objeto não reflete no outro.
Destrutores
O método destructor é um método especial que é executado automaticamente (sem que aja intervenção do programador) toda vez que um objeto deixar de existir.
<?php
class Carro {
private $velocidade = 0;
private $velocidadeMaxima = 0;
public function __construct($velocidade)
{
$this->velocidadeMaxima = $velocidade;
}
public function __destruct()
{
$arquivo = "veiculo_" . uniqid() . ".txt";
$conteudo = $this->velocidade;
file_put_contents($arquivo, $conteudo);
}
public function acelerar() {
if ($this->velocidade + 10 <= $this->velocidadeMaxima) {
$this->velocidade += 10;
}
}
public function frear() {
if ($this->velocidade - 10 >= 0) {
$this->velocidade -= 10;
}
}
public function obterVelocidadeAtual()
{
return $this->velocidade;
}
}
$celta = new Carro(140);
$celta->acelerar();
$celta->acelerar();
$corolla = new Carro(200);
$corolla->acelerar();
$corolla->acelerar();
$corolla->acelerar();
echo "Velocidade Celta: " . $celta->obterVelocidadeAtual() . PHP_EOL;
echo "Velocidade Corolla: " . $corolla->obterVelocidadeAtual();
Ao executar o código acima, quando a ciclo de vida de cada objeto criado chegar ao fim, ele executará automaticamente o método __destruct, e o mesmo criará um novo arquivo contendo a velocidade atual do veículo.
É basicamente isso. E ai é difícil? Ficou com alguma dúvida? Comenta aqui em baixo que eu vou te ajudando a estudar e aprender.
Por hoje é só, escoteiro. Até a próxima!