Como Criar Classes, Objetos, Atributos e Métodos em PHP (POO)

Mão na Massa: Como Criar Classes, Objetos, Atributos e Métodos em PHP

Nos tutoriais anteriores, você aprendeu o que são objetos, herança, polimorfismo e encapsulamento no plano teórico. Neste tutorial, vamos sujar as mãos de graxa (ou de café) e escrever código PHP de verdade.

Você vai aprender a sintaxe exata para criar classes, instanciar objetos e manipular as suas variáveis internas (atributos) e ações (métodos).

Como instanciar um objeto e acessar um método em PHP?
Para criar uma classe, usamos a palavra reservada class. Para gerar um objeto a partir dessa classe, usamos a palavra-chave new (ex: $carro = new Carro();). Para acessar um atributo ou executar um método desse objeto, utilizamos o operador de seta -> (ex: $carro->ligar();).

Como Declarar uma Classe: A palavra class

A declaração de uma classe é o ponto de partida de qualquer sistema moderno, seja o controle de estoque de um e-commerce ou a API de um banco. A sintaxe básica é assustadoramente simples.


<?php
class Carro {
    // Aqui dentro nós definiremos os Atributos (variáveis)
    // E também os Métodos (funções)
}
?>

Basta usar a palavra-chave class, dar um nome a ela (a convenção manda usar a primeira letra em Maiúscula, o padrão PascalCase) e abrir chaves. Pronto, você tem um molde virgem.


Como Instanciar (Criar) um Objeto: O operador new

Com a "planta baixa" (Classe) criada, podemos começar a construir as casas reais (Objetos). Em PHP, instanciar um objeto significa alocar um espaço real na memória do servidor para ele.

Fazemos isso declarando uma variável e atribuindo a ela o comando new seguido do nome da classe.


<?php
// Instanciando três veículos diferentes na frota
$gol = new Carro();
$celta = new Carro();
$corolla = new Carro();
?>

Agora, $gol, $celta e $corolla são objetos independentes no sistema. Mas eles ainda são "cascas vazias" — não possuem motor, cor ou chassi definidos. Vamos resolver isso dando propriedades a eles.

⚠️ Alerta Sênior (Consumo de Memória): Cada vez que você usa o new, o PHP aloca RAM no servidor. Em sistemas grandes com loops de milhares de requisições, instanciar objetos inutilmente pode causar Memory Leak (estouro de memória). Crie objetos com sabedoria!

Como Criar e Acessar Atributos (Variáveis da Classe)

Atributos são as características do seu objeto. No PHP moderno, nós declaramos essas variáveis usando modificadores de visibilidade, como o public (evite usar o antigo var, que é sintaxe legada do PHP 4).

Vamos adicionar o atributo motor à nossa classe e, depois, acessá-lo usando o operador de seta ( -> ).


<?php
class Carro {
    // Declarando o atributo com visibilidade pública
    public $motor;
}

// Instanciando um novo veículo
$fit = new Carro();

// Acessando e gravando um valor no atributo (sem usar o $)
$fit->motor = 1.5;

// Lendo o valor armazenado
echo "O motor do meu Honda Fit é: " . $fit->motor;
?>

Observe um detalhe crucial da sintaxe: ao acessar o atributo com a seta ->, você não usa o cifrão ($) no nome do atributo. Escrevemos $fit->motor e NUNCA $fit->$motor.

Economize Meses de Frustração Lendo Manuais Confusos 🚀

"Eu não aguentava mais pular de vídeo em vídeo no YouTube e não sair do lugar. A apostila tem um passo a passo tão lógico que em 3 semanas eu criei meu primeiro CRUD orientado a objetos." - Rafael Mendes, Dev Jr.

Saber criar um atributo é fácil. O mercado exige que você saiba validar dados vindos de formulários HTTP e injetar isso de forma segura no banco de dados. Estude offline e foque no que realmente cai em testes técnicos de empresas de TI.

📥 Baixar a Apostila PHP Progressivo
Capa digital da Apostila PHP Progressivo com fundo transparente


Como Declarar e Acessar Métodos (Ações do Objeto)

Se atributos são variáveis que guardam estados (como cor ou motor), métodos são funções que executam ações. Declaramos os métodos escrevendo funções regulares, mas dentro da hierarquia da classe.

Vamos criar duas ações para o nosso veículo: ligar() e desligar(), e também vamos brincar um pouco com operadores matemáticos para tornar o código mais interessante, usando o operador de módulo matemático ( % ) para descobrir se a placa gerada para o carro é um número par ou ímpar!


<?php
class Carro {
    public $motor;
    public $numeroPlaca;

    // Método que executa a ação de ligar
    public function ligar() {
        echo "Girando a chave... motor " . $this->motor . " em funcionamento! Vruum!<br>";
    }

    // Método que executa a ação de desligar
    public function desligar() {
        echo "Cortando a ignição... fueeem! O carro parou.<br>";
    }
    
    // Método simulando uma regra de negócio (Par ou Ímpar com Módulo)
    public function rodizioLiberado() {
        // Se o resto da divisão por 2 for zero ($x \bmod 2 = 0), é Par
        if ($this->numeroPlaca % 2 == 0) {
            echo "A placa termina em número PAR. Liberado para rodar hoje!<br>";
        } else {
            echo "A placa termina em número ÍMPAR. Você vai levar multa se sair da garagem!<br>";
        }
    }
}

// 1. Instanciamos o objeto
$fit = new Carro();

// 2. Preenchemos os dados (Atributos)
$fit->motor = 1.5;
$fit->numeroPlaca = 4532; // Placa terminada em número par

// 3. Executamos as ações (Métodos)
$fit->ligar();
$fit->rodizioLiberado();
$fit->desligar();

/*
Saída esperada no navegador:
Girando a chave... motor 1.5 em funcionamento! Vruum!
A placa termina em número PAR. Liberado para rodar hoje!
Cortando a ignição... fueeem! O carro parou.
*/
?>
💡 Dica de Mestre (O $this): Notou o uso da palavra $this dentro do método ligar? Ela serve para que o método acesse os atributos do próprio objeto de forma dinâmica. É como o objeto dizendo: "Pegue o MEU motor".

⚙️ Script Interativo: Acessando Métodos em Tempo Real

Interaja com o painel abaixo para ver como o JavaScript no Front-end pode simular a chamada dos métodos de ligar e desligar de um carro:

Painel de Controle - Honda Fit 1.5

> Objeto instanciado com sucesso. Aguardando comando...


Domine o Front-end e o Back-end (O Pacote Completo) 💼

Saber criar classes no PHP é essencial, mas você sabe como conectar essas regras de negócio a um formulário HTML e estilizá-lo com CSS? Desenvolvedores Full-Stack ganham o dobro do salário inicial. Domine tudo com o nosso pacote de 7 apostilas premium!

Caixa virtual ilustrando o Mega Pack do Projeto Progressivo com apostilas de diversas linguagens

Consolide seu Conhecimento (O que estudar a seguir)

Agora que você já sabe como escrever a sintaxe pura e instanciar seus primeiros objetos usando o new, precisa blindar essa arquitetura para que ela seja útil. Veja o que estudar agora:

  • Volte uma casa: Se você não entendeu muito bem as vantagens dessa arquitetura, revise a aula sobre Polimorfismo, Herança e Encapsulamento.
  • Material Oficial: Aprofunde seu conhecimento técnico com precisão acessando a documentação oficial de Propriedades do PHP.
  • O Próximo Nível: Siga para o próximo tutorial e descubra a magia de preparar o seu objeto no momento exato em que ele nasce, aprendendo sobre o Método Mágico __construct() no PHP.

Perguntas Frequentes (FAQ) da Comunidade

Qual é a diferença entre uma Função procedural e um Método de uma classe?

Na prática de sintaxe, quase nenhuma, ambas usam function(). A grande diferença é o escopo. Uma função procedural "solta" no código pode ser chamada de qualquer lugar. Um método só existe atrelado a um objeto e manipula os dados específicos apenas daquele objeto, protegendo a sua lógica de interferências externas.

Posso colocar o nome do meu atributo com cifrão no operador de seta (ex: $objeto->$atributo)?

Via de regra, não! O cifrão ($) é usado no nome do objeto, mas não no nome da propriedade quando você a chama via operador de seta (->). Se você usar $objeto->$atributo, o PHP não vai buscar a variável 'atributo', ele vai buscar uma propriedade cujo nome seja o valor que está guardado dinamicamente dentro da variável externa `$atributo`. É um erro comum de sintaxe para iniciantes.

Nenhum comentário: