Classes e objetos
Nesta aula, você aprenderá os fundamentos da Programação Orientada a Objetos em PHP: como definir classes, criar propriedades e métodos, utilizar a pseudo-variável $this e instanciar objetos. Com exemplos práticos, você entenderá como estruturar código reutilizável e organizado.
A Programação Orientada a Objetos (POO) é um paradigma que organiza o código em torno de entidades chamadas objetos, que possuem propriedades (dados) e métodos (comportamentos). Em PHP, as classes são os moldes para criar objetos. Dominar classes e objetos é essencial para escrever código modular, reutilizável e de fácil manutenção.
Nesta aula, vamos explorar os conceitos básicos: como definir uma classe, adicionar propriedades e métodos, entender o papel do $this e, finalmente, instanciar objetos. Ao final, você será capaz de criar suas próprias classes e utilizá-las em programas PHP.
Definindo classes
Uma classe é declarada com a palavra-chave class, seguida pelo nome da classe (por convenção, em PascalCase) e um bloco de código delimitado por chaves. Dentro desse bloco, definimos as propriedades (variáveis) e métodos (funções) que os objetos dessa classe terão.
Exemplo básico de definição de classe:
<?php
class Carro {
// propriedades e métodos serão definidos aqui
}
?>Uma classe pode ser definida em qualquer lugar do arquivo PHP, mas geralmente é colocada antes do uso. É uma boa prática nomear arquivos com o nome da classe (ex.: Carro.php) e incluir apenas uma classe por arquivo.
Propriedades e métodos
Propriedades são variáveis que pertencem à classe. Elas são declaradas com modificadores de visibilidade (public, protected, private) — por enquanto, usaremos public para simplificar. Métodos são funções definidas dentro da classe e também podem ter modificadores de visibilidade.
Exemplo de classe com propriedades e métodos:
<?php
class Carro {
public $marca;
public $modelo;
public $ano;
public function exibirDetalhes() {
return "{$this->marca} {$this->modelo} ({$this->ano})";
}
}
?>As propriedades podem ter valores padrão. Métodos podem receber parâmetros e retornar valores. A visibilidade controla o acesso: public pode ser acessado de qualquer lugar, protected apenas dentro da classe e subclasses, private apenas dentro da própria classe.
$this
Dentro de um método, a pseudo-variável $this refere-se ao objeto atual (a instância que chamou o método). Ela é usada para acessar propriedades e métodos do próprio objeto. Sem $this, não é possível referenciar as propriedades ou métodos da classe dentro de seus métodos.
Exemplo de uso de $this:
<?php
class Carro {
public $marca;
public $modelo;
public function setMarca($marca) {
$this->marca = $marca; // $this->marca refere-se à propriedade do objeto
}
public function getMarca() {
return $this->marca;
}
}
?>Note que $this só está disponível dentro de métodos de instância (não estáticos). É uma referência implícita ao objeto que invocou o método.
Instanciando
Instanciar significa criar um objeto a partir de uma classe. Usamos a palavra-chave new seguida do nome da classe e parênteses (opcionais se o construtor não exigir argumentos). O resultado é armazenado em uma variável, que então pode acessar propriedades e métodos públicos usando o operador -> (seta).
Exemplo de instanciação:
<?php
require_once 'Carro.php';
$meuCarro = new Carro();
$meuCarro->marca = 'Toyota';
$meuCarro->modelo = 'Corolla';
$meuCarro->ano = 2020;
echo $meuCarro->exibirDetalhes(); // Saída: Toyota Corolla (2020)
?>Podemos instanciar múltiplos objetos da mesma classe, cada um com seus próprios valores de propriedades. A instanciação pode incluir um método especial chamado construtor (__construct), que é executado automaticamente na criação do objeto, permitindo inicializar propriedades.
Boas práticas e observações finais
Sempre declare a visibilidade das propriedades e métodos (evite var, que é obsoleto). Use nomes descritivos para classes e métodos. Prefira propriedades privadas com métodos getters/setters para encapsulamento. Organize uma classe por arquivo e use autoloading (como Composer) para carregar classes automaticamente. Lembre-se de que $this só funciona em métodos de instância; para métodos estáticos, usa-se self::.
Referências
- PHP Manual: Classes e Objetos (básico)
- PHP Manual: Propriedades
- PHP Manual: Métodos
- PHP Manual: Visibilidade
- PHP Manual: Construtores e Destrutores
- PSR-4: Autoloading
Exercícios
Crie uma classe chamada
Pessoacom propriedades públicas$nomee$idade. Defina um métodoapresentar()que retorna a string "Olá, meu nome é {nome} e tenho {idade} anos.".✓ Resposta:<?php class Pessoa { public $nome; public $idade; public function apresentar() { return "Olá, meu nome é {$this->nome} e tenho {$this->idade} anos."; } } ?>Instancie a classe
Pessoacriada no exercício anterior, atribua valores às propriedades e exiba o resultado do métodoapresentar().✓ Resposta:<?php $pessoa = new Pessoa(); $pessoa->nome = 'João'; $pessoa->idade = 30; echo $pessoa->apresentar(); ?>Crie uma classe
Calculadoracom um método públicosomar($a, $b)que retorna a soma dos dois parâmetros. Teste com valores 5 e 7.✓ Resposta:<?php class Calculadora { public function somar($a, $b) { return $a + $b; } } $calc = new Calculadora(); echo $calc->somar(5, 7); // 12 ?>Adicione um construtor à classe
Pessoaque recebe$nomee$idadee os atribui às propriedades. Crie um objeto usando o construtor.✓ Resposta:<?php class Pessoa { public $nome; public $idade; public function __construct($nome, $idade) { $this->nome = $nome; $this->idade = $idade; } public function apresentar() { return "Olá, meu nome é {$this->nome} e tenho {$this->idade} anos."; } } $pessoa = new Pessoa('Maria', 25); echo $pessoa->apresentar(); ?>Modifique a classe
Calculadorapara que as propriedades$ae$bsejam privadas e inicializadas via construtor. Crie um métodosomar()que retorna a soma dessas propriedades.✓ Resposta:<?php class Calculadora { private $a; private $b; public function __construct($a, $b) { $this->a = $a; $this->b = $b; } public function somar() { return $this->a + $this->b; } } $calc = new Calculadora(10, 20); echo $calc->somar(); // 30 ?>