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

Exercícios

  1. Crie uma classe chamada Pessoa com propriedades públicas $nome e $idade. Defina um método apresentar() 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.";
        }
    }
    ?>
  2. Instancie a classe Pessoa criada no exercício anterior, atribua valores às propriedades e exiba o resultado do método apresentar().

    ✓ Resposta:
    <?php
    $pessoa = new Pessoa();
    $pessoa->nome = 'João';
    $pessoa->idade = 30;
    echo $pessoa->apresentar();
    ?>
  3. Crie uma classe Calculadora com um método público somar($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
    ?>
  4. Adicione um construtor à classe Pessoa que recebe $nome e $idade e 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();
    ?>
  5. Modifique a classe Calculadora para que as propriedades $a e $b sejam privadas e inicializadas via construtor. Crie um método somar() 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
    ?>