PHP

Dominando Construtores, Destrutores e Métodos em PHP em Projetos Reais

7 min de leitura

Dominando Construtores, Destrutores e Métodos em PHP em Projetos Reais

Construtores em PHP O construtor é um método especial executado automaticamente quando uma instância de uma classe é criada. Em PHP, ele é definido com o método . Esse método é fundamental para inicializar propriedades e garantir que o objeto comece em um estado válido. Os construtores podem receber parâmetros, ter valores padrão e executar lógica complexa. Uma prática importante é usar type hints para garantir segurança de tipo. Em PHP 8+, você pode usar promoted properties, tornando o código mais limpo: Destrutores em PHP O destrutor é o oposto do construtor. Ele é invocado automaticamente quando um objeto é destruído (quando sai do escopo ou é explicitamente anulado). Em PHP, é definido com . Destrutores são úteis para liberar recursos como conexões de banco de dados, arquivos abertos ou conexões de rede. > Importante: Nem sempre é necessário usar destrutores em PHP. A linguagem gerencia memória automaticamente. Use-os apenas quando precisar explicitamente liberar recursos críticos. Métodos em PHP Métodos

<h2>Construtores em PHP</h2>

<p>O construtor é um método especial executado automaticamente quando uma instância de uma classe é criada. Em PHP, ele é definido com o método <code>__construct()</code>. Esse método é fundamental para inicializar propriedades e garantir que o objeto comece em um estado válido.</p>

<pre><code class="language-php">&lt;?php

class Produto {

public $nome;

public $preco;

public $estoque;

public function __construct($nome, $preco, $estoque = 0) {

$this-&gt;nome = $nome;

$this-&gt;preco = $preco;

$this-&gt;estoque = $estoque;

}

public function exibir() {

echo &quot;Produto: {$this-&gt;nome} - R$ {$this-&gt;preco} (Estoque: {$this-&gt;estoque})\n&quot;;

}

}

$produto = new Produto(&quot;Notebook&quot;, 2500.00, 5);

$produto-&gt;exibir();</code></pre>

<p>Os construtores podem receber parâmetros, ter valores padrão e executar lógica complexa. Uma prática importante é usar type hints para garantir segurança de tipo. Em PHP 8+, você pode usar <strong>promoted properties</strong>, tornando o código mais limpo:</p>

<pre><code class="language-php">&lt;?php

class Cliente {

public function __construct(

public string $nome,

public string $email,

public int $idade = 18

) {}

public function info(): void {

echo &quot;{$this-&gt;nome} ({$this-&gt;email}) - {$this-&gt;idade} anos\n&quot;;

}

}

$cliente = new Cliente(&quot;Ana Silva&quot;, &quot;ana@email.com&quot;, 25);

$cliente-&gt;info();</code></pre>

<h2>Destrutores em PHP</h2>

<p>O destrutor é o oposto do construtor. Ele é invocado automaticamente quando um objeto é destruído (quando sai do escopo ou é explicitamente anulado). Em PHP, é definido com <code>__destruct()</code>. Destrutores são úteis para liberar recursos como conexões de banco de dados, arquivos abertos ou conexões de rede.</p>

<pre><code class="language-php">&lt;?php

class ConexaoDB {

private $conexao;

public function __construct($host, $usuario, $senha) {

$this-&gt;conexao = mysqli_connect($host, $usuario, $senha);

if (!$this-&gt;conexao) {

throw new Exception(&quot;Erro ao conectar ao banco&quot;);

}

echo &quot;Conexão estabelecida\n&quot;;

}

public function __destruct() {

if ($this-&gt;conexao) {

mysqli_close($this-&gt;conexao);

echo &quot;Conexão fechada\n&quot;;

}

}

public function query($sql) {

return mysqli_query($this-&gt;conexao, $sql);

}

}

{

$db = new ConexaoDB(&quot;localhost&quot;, &quot;root&quot;, &quot;senha&quot;);

// Usar $db aqui

} // Destrutor chamado automaticamente ao sair do bloco</code></pre>

<blockquote><p><strong>Importante</strong>: Nem sempre é necessário usar destrutores em PHP. A linguagem gerencia memória automaticamente. Use-os apenas quando precisar explicitamente liberar recursos críticos.</p></blockquote>

<h2>Métodos em PHP</h2>

<p>Métodos são funções definidas dentro de uma classe. Eles operam sobre os dados (propriedades) do objeto e podem ser públicos, privados ou protegidos. Além disso, existem métodos estáticos que pertencem à classe, não ao objeto.</p>

<h3>Métodos de Instância</h3>

<pre><code class="language-php">&lt;?php

class ContaBancaria {

private float $saldo = 0;

public function depositar(float $valor): void {

if ($valor &gt; 0) {

$this-&gt;saldo += $valor;

echo &quot;Depósito de R$ $valor realizado\n&quot;;

}

}

public function sacar(float $valor): bool {

if ($valor &gt; 0 &amp;&amp; $valor &lt;= $this-&gt;saldo) {

$this-&gt;saldo -= $valor;

echo &quot;Saque de R$ $valor realizado\n&quot;;

return true;

}

echo &quot;Saque não autorizado\n&quot;;

return false;

}

public function getSaldo(): float {

return $this-&gt;saldo;

}

}

$conta = new ContaBancaria();

$conta-&gt;depositar(1000);

$conta-&gt;sacar(300);

echo &quot;Saldo: R$ &quot; . $conta-&gt;getSaldo() . &quot;\n&quot;;</code></pre>

<h3>Métodos Estáticos</h3>

<p>Métodos estáticos pertencem à classe, não a instâncias. Eles são acessados via <code>::</code> e não precisam de um objeto criado. São ideais para utilidades e cálculos que não dependem do estado da instância.</p>

<pre><code class="language-php">&lt;?php

class Calculadora {

public static function somar(float $a, float $b): float {

return $a + $b;

}

public static function multiplicar(float $a, float $b): float {

return $a * $b;

}

public static function ehPositivo(float $numero): bool {

return $numero &gt; 0;

}

}

echo Calculadora::somar(10, 5) . &quot;\n&quot;; // 15

echo Calculadora::multiplicar(4, 3) . &quot;\n&quot;; // 12

var_dump(Calculadora::ehPositivo(-5)); // false</code></pre>

<h3>Encapsulamento com Getters e Setters</h3>

<p>A visibilidade <code>private</code> protege dados sensíveis. Getters e setters controlam o acesso, permitindo validação:</p>

<pre><code class="language-php">&lt;?php

class Pessoa {

private string $cpf;

private int $idade;

public function setCpf(string $cpf): void {

if (strlen(preg_replace(&#039;/\D/&#039;, &#039;&#039;, $cpf)) === 11) {

$this-&gt;cpf = $cpf;

} else {

throw new Exception(&quot;CPF inválido&quot;);

}

}

public function getCpf(): string {

return $this-&gt;cpf;

}

public function setIdade(int $idade): void {

if ($idade &gt;= 0 &amp;&amp; $idade &lt;= 150) {

$this-&gt;idade = $idade;

} else {

throw new Exception(&quot;Idade inválida&quot;);

}

}

public function getIdade(): int {

return $this-&gt;idade;

}

}

$pessoa = new Pessoa();

$pessoa-&gt;setCpf(&quot;123.456.789-10&quot;);

$pessoa-&gt;setIdade(30);

echo &quot;CPF: &quot; . $pessoa-&gt;getCpf() . &quot; - Idade: &quot; . $pessoa-&gt;getIdade() . &quot;\n&quot;;</code></pre>

<h2>Conclusão</h2>

<p>Dominando <strong>construtores</strong>, você garante que objetos sempre nasçam em estado válido. <strong>Destrutores</strong> devem ser usados estrategicamente para liberar recursos críticos. <strong>Métodos</strong> são o coração da orientação a objetos: use instância para lógica do objeto, estáticos para utilidades. Combine visibilidade (public/private) com getters/setters para proteger seus dados. Esses três conceitos formam a base sólida da programação orientada a objetos em PHP.</p>

<h2>Referências</h2>

<ul>

<li><a href="https://www.php.net/manual/en/language.oop5.decon.php" target="_blank" rel="noopener noreferrer">PHP Official Documentation - Constructors and Destructors</a></li>

<li><a href="https://www.php.net/manual/en/language.oop5.basic.php" target="_blank" rel="noopener noreferrer">PHP Official Documentation - Methods</a></li>

<li><a href="https://www.php.net/manual/en/language.oop5.visibility.php" target="_blank" rel="noopener noreferrer">PHP Official Documentation - Visibility</a></li>

<li><a href="https://www.oreilly.com/library/view/modern-php/9781491905173/" target="_blank" rel="noopener noreferrer">Modern PHP by Josh Lockhart - O&#039;Reilly</a></li>

<li><a href="https://www.php.net/manual/en/language.types.declarations.php" target="_blank" rel="noopener noreferrer">PHP 8 in Action - Official PHP Manual</a></li>

</ul>

Comentários

Mais em PHP

Laravel Blade: Templates, Componentes e Layouts: Do Básico ao Avançado
Laravel Blade: Templates, Componentes e Layouts: Do Básico ao Avançado

Introdução ao Laravel Blade O Laravel Blade é o motor de templates padrão do...

Boas Práticas de Laços de Repetição: for, while, foreach e do-while para Times Ágeis
Boas Práticas de Laços de Repetição: for, while, foreach e do-while para Times Ágeis

Fundamentos dos Laços de Repetição Um laço de repetição é uma estrutura de co...

Dominando Cache em PHP: Redis, Memcached e Cache de Opcode com OPcache em Projetos Reais
Dominando Cache em PHP: Redis, Memcached e Cache de Opcode com OPcache em Projetos Reais

Cache em PHP: Redis, Memcached e OPcache O cache é um dos pilares da otimizaç...