PHP POO Intermediário
Classes e objetos
Em PHP, uma classe é um molde que define propriedades (dados) e métodos (comportamentos) que os objetos terão. Um objeto é uma instância dessa classe, criada com a palavra-chave new. Cada objeto tem seu próprio conjunto de valores para as propriedades, mas compartilha os métodos definidos na classe.
O construtor é um método especial chamado automaticamente quando um objeto é criado. Ele serve para inicializar as propriedades do objeto. A partir do PHP 8, a promoção de construtor permite declarar e inicializar propriedades diretamente na lista de parâmetros do construtor, reduzindo código repetitivo.
Dentro dos métodos, a pseudo-variável $this refere-se ao objeto atual, permitindo acessar suas propriedades e métodos. É essencial para diferenciar propriedades de parâmetros e para chamar outros métodos do mesmo objeto.
Pontos-chave
- Uma classe define propriedades e métodos; um objeto é uma instância criada com
new. - O construtor
__construct()é chamado automaticamente na criação do objeto para inicializar propriedades. - A promoção de construtor (PHP 8+) declara e inicializa propriedades diretamente nos parâmetros do construtor.
$thisreferencia o objeto atual e é usado para acessar propriedades e métodos dentro da classe.- Propriedades e métodos podem ter visibilidade (public, protected, private) controlando o acesso.
<?php
class Produto {
// Propriedades com promoção de construtor (PHP 8+)
public function __construct(
private string $nome,
private float $preco,
private int $quantidade = 0
) {}
// Método para exibir informações do produto
public function exibir(): string {
return "{$this->nome}: R$ " . number_format($this->preco, 2, ',', '.') . " ({$this->quantidade} unidades)";
}
// Método para adicionar estoque
public function adicionarEstoque(int $qtd): void {
if ($qtd > 0) {
$this->quantidade += $qtd;
}
}
// Método para calcular valor total em estoque
public function valorTotal(): float {
return $this->preco * $this->quantidade;
}
}
// Criando objetos
$p1 = new Produto("Caneta", 2.50, 10);
$p2 = new Produto("Caderno", 15.90);
// Usando métodos
$p2->adicionarEstoque(5);
echo $p1->exibir() . PHP_EOL;
echo $p2->exibir() . PHP_EOL;
echo "Valor total em estoque (Caderno): R$ " . number_format($p2->valorTotal(), 2, ',', '.') . PHP_EOL;