Classes e objetos
Esta aula introduz os conceitos fundamentais de programação orientada a objetos em PHP, abordando como definir classes, criar propriedades e métodos, utilizar a pseudo-variável $this para referenciar a instância atual, e instanciar objetos a partir de classes. O conteúdo inclui exemplos práticos e exercícios para fixação.
Nesta aula, você aprenderá os conceitos básicos de programação orientada a objetos (POO) em PHP. POO é um paradigma que organiza o código em torno de entidades chamadas objetos, que possuem propriedades (dados) e métodos (comportamentos). A classe é o molde que define a estrutura e o comportamento dos objetos.
Dominar classes e objetos é essencial para escrever código modular, reutilizável e de fácil manutenção. Vamos começar definindo uma classe simples e evoluindo até a criação de objetos funcionais.
Definindo classes
Em PHP, uma classe é definida com a palavra-chave class, seguida pelo nome da classe (geralmente em PascalCase). As classes podem conter propriedades (variáveis) e métodos (funções). A sintaxe básica é:
<?php
class NomeDaClasse {
// propriedades e métodos
}
?>Exemplo: uma classe Carro que representa um veículo com características como marca, modelo e ano.
<?php
class Carro {
public $marca;
public $modelo;
public $ano;
}
?>Note que as propriedades são declaradas com visibilidade (public, protected ou private). public significa que podem ser acessadas de fora da classe.
Propriedades e métodos
Propriedades são variáveis que armazenam o estado do objeto. Métodos são funções que definem o comportamento. Ambos podem ter modificadores de acesso. Vamos adicionar métodos à classe Carro:
<?php
class Carro {
public $marca;
public $modelo;
public $ano;
public function exibirDetalhes() {
return "{$this->marca} {$this->modelo} ({$this->ano})";
}
public function ligar() {
return "O carro está ligado.";
}
}
?>Observe o uso de $this dentro do método para acessar as propriedades da instância. Métodos podem receber parâmetros e retornar valores.
$this
A pseudo-variável $this é uma referência ao objeto atual (a instância da classe). Ela é usada dentro dos métodos para acessar propriedades e métodos do mesmo objeto. Sem $this, não seria possível distinguir entre variáveis locais e propriedades da classe.
Exemplo: método que define a marca usando um parâmetro:
public function setMarca($marca) {
$this->marca = $marca;
}Se não usássemos $this, a variável $marca dentro do método se referiria apenas ao parâmetro, não à propriedade. $this é obrigatório para referenciar propriedades e métodos da instância.
Instanciando
Instanciar é criar um objeto a partir de uma classe. Usa-se a palavra-chave new. Cada objeto tem seu próprio conjunto de propriedades, independente de outros objetos da mesma classe.
<?php
$carro1 = new Carro();
$carro1->marca = 'Toyota';
$carro1->modelo = 'Corolla';
$carro1->ano = 2020;
echo $carro1->exibirDetalhes(); // Toyota Corolla (2020)
$carro2 = new Carro();
$carro2->marca = 'Honda';
$carro2->modelo = 'Civic';
$carro2->ano = 2021;
echo $carro2->exibirDetalhes(); // Honda Civic (2021)
?>Após instanciar, podemos acessar propriedades e chamar métodos usando o operador ->. Cada objeto mantém seus próprios valores.
Boas práticas
Nomeie classes com PascalCase (ex: MinhaClasse). Declare propriedades com visibilidade explícita (public, protected ou private). Use $this consistentemente dentro de métodos. Prefira métodos getters e setters para acessar propriedades privadas ou protegidas.
Referências
- PHP Manual: Classes e Objetos (básico)
- PHP Manual: Propriedades
- PHP Manual: Métodos
- PHP Manual: Visibilidade
- PHP Manual: A pseudo-variável $this
Exercícios
- Crie uma classe
Pessoacom propriedades públicasnomeeidade. Adicione um métodoapresentar()que retorna uma string como "Olá, meu nome é João e tenho 25 anos.". Instancie um objeto e exiba o resultado. - Adicione um método
envelhecer()na classePessoaque incrementa a idade em 1. Crie um objeto, chame o método e exiba a nova idade. - Crie uma classe
Produtocom propriedades privadasnomeepreco. Adicione métodos públicosgetNome(),setNome($nome),getPreco()esetPreco($preco). Instancie um objeto, defina valores e exiba-os. - Defina uma classe
Calculadoracom um método estáticosoma($a, $b)que retorna a soma. (Dica: usepublic static function). Chame o método sem instanciar a classe. - Crie uma classe
Livrocom propriedadestituloeautor. Adicione um métodoexibir()que retorna "Título: [titulo], Autor: [autor]". Instancie dois objetos com valores diferentes e exiba as informações de cada um.
<?php
class Pessoa {
public $nome;
public $idade;
public function apresentar() {
return "Olá, meu nome é {$this->nome} e tenho {$this->idade} anos.";
}
}
$pessoa = new Pessoa();
$pessoa->nome = 'João';
$pessoa->idade = 25;
echo $pessoa->apresentar();
?><?php
class Pessoa {
public $nome;
public $idade;
public function apresentar() {
return "Olá, meu nome é {$this->nome} e tenho {$this->idade} anos.";
}
public function envelhecer() {
$this->idade++;
}
}
$pessoa = new Pessoa();
$pessoa->nome = 'Maria';
$pessoa->idade = 30;
$pessoa->envelhecer();
echo $pessoa->idade; // 31
?><?php
class Produto {
private $nome;
private $preco;
public function getNome() {
return $this->nome;
}
public function setNome($nome) {
$this->nome = $nome;
}
public function getPreco() {
return $this->preco;
}
public function setPreco($preco) {
$this->preco = $preco;
}
}
$prod = new Produto();
$prod->setNome('Notebook');
$prod->setPreco(3500.00);
echo $prod->getNome() . ' custa R$ ' . $prod->getPreco();
?><?php
class Calculadora {
public static function soma($a, $b) {
return $a + $b;
}
}
echo Calculadora::soma(5, 3); // 8
?><?php
class Livro {
public $titulo;
public $autor;
public function exibir() {
return "Título: {$this->titulo}, Autor: {$this->autor}";
}
}
$livro1 = new Livro();
$livro1->titulo = 'Dom Casmurro';
$livro1->autor = 'Machado de Assis';
echo $livro1->exibir();
$livro2 = new Livro();
$livro2->titulo = '1984';
$livro2->autor = 'George Orwell';
echo $livro2->exibir();
?>