Diário Code - Uma xícara de café e um bule em cima de uma mesa.

Diário Code

Aprenda JavaScript e PHP

Como funcionam as Classes em PHP

Vários tipos de bolo sobre uma mesa de diversos tamanhos e sabores.

Eu já expliquei como funcionam as Namespaces. Agora, você vai aprender a utilizar as classes.

O que são classes? Classes são entidades da Programação Orientada a Objetos (POO) que atuam como modelos de objetos. Elas são como uma forma de bolo: garantem que os objetos tenham determinadas propriedades e funções padronizadas.

E por que usar classes? Assim como as Namespaces, as classes deixam seu código mais organizado e mais previsível. Veja um exemplo.

Se você precisar adicionar um novo cliente a um banco de dados, você precisará de certas informações que são inerentes a todo e qualquer cliente da empresa. Mas, quais são essas informações? Nome, endereço, telefone, e-mail e muitas outras. A chance de você esquecer uma delas é enorme! Então, ter uma classe chamada cliente, por exemplo, e uma função chamada cadastrar dentro dessa classe vai ajudar você a não cometer o erro de esquecer um dos dados e acabar ocasionando um erro em todo o sistema.

Outro benefício de se usar classes é que o código fica mais limpo e mais lógico. Você terá que saber de cor apenas algumas palavras-chave para o seu sistema funcionar e não um amontoado de funções!

Agora vou explicar como criar essas classes usando PHP.

Como criar classes em PHP

Vou utilizar o exemplo de um cadastro de clientes nos exemplos a seguir. Note como ficaria uma classe chamada cliente:

class cliente {

 // 1. propriedades
 public string $nome ;
 public string $endereco ;
 public string $telefone ;
 public string $email ;
 
 function __constructor ( string $nome, string $endereco, string $telefone, string $email) {

  // 2. construtor
  $this->id = $this->obter_novo_id ( ) ;
  $this->nome = $nome ;
  $this->endereco = $endereco ;
  $this->telefone = $telefone ;
  $this->email = $email ;

 }

 // 3. funções

 private function obter_novo_id ( ) {
  // código para obter um novo id para o novo cliente
 }

 public function cadastrar ( ) {
  // código para cadastrar ao banco de dados
 }

 public function remover ( ) {
  // código para excluir um cliente
 }

 public function copiar ( ) {
  // código para cadastrar um novo cliente com os mesmos dados
 }

}

Vamos dividir esse código em 3 partes: propriedades, construtor e funções.

1. Propriedades

As propriedades são variáveis que atuam como características do objeto que está sendo criado. No caso de um cliente, as características básicas que eu preciso são id, nome, endereco, telefone e email. É necessário saber cada uma dessas informações para compor um cliente. Isso significa que eu preciso dessas informações para criar um cliente.

Mas, onde é que eu vou passar essas informações para a classe? É para isso que serve a função especial __constructor, sobre a qual vamos falar agora.

2. Construtor

O construtor, ou constructor, é uma função especial usada para inserir dados dentro de uma classe. Isso seria como colocar a massa de um bolo dentro da forma. Ao chamar uma classe, vamos invocar a função __constructor e inserir as informações que precisamos para criar o objeto.

Cada objeto criado com a classe cliente será diferente um do outro apenas nessas propriedades, mas terá o mesmíssimo formato que qualquer outro objeto criado com a mesma classe. Entendeu? É como criar vários bolos de diferentes sabores, mas do mesmo tamanho.

Daqui a pouco vou mostrar como invocar a função construtora. Por último, é bom falarmos sobre as funções.

3. Funções

As funções dentro de uma classe manipulam as suas propriedades para se obter um resultado específico. Na nossa analogia do bolo, isso poderia ser comparado a colocá-lo para assar ou até mesmo comer o bolo dependendo do tipo de função que é necessária.

As funções dentro de uma classe podem ser private (privada) ou public (pública). Se não especificar nada, então será public.

O que isso quer dizer? Essas palavras-chave definem se você, como programador, poderá ou não utilizar essas funções a partir do objeto criado. Isso é útil por razões de segurança e organização. Por exemplo, a função obter_novo_id ( ) é do tipo private porque você não pode obter manualmente um id diretamente do banco de dados. Essa informação é obtida automaticamente no momento em que a classe é criada e o valor é passado para a variável id, e essa variável é do tipo public. Portanto, não há necessidade que você se preocupe com essa função.

Pense nisso como uma grande empresa. Há setores que você pode ir e documentos que você pode ler, mas há outros que você não tem permissão. Por quê? Porque a empresa julgou que você não precisa desses setores e documentos para realizar o seu trabalho. Da mesma forma, você precisa das funções do tipo private para utilizar a classe. É possível fazer tudo que você precisa só com as funções do tipo public.

Com essas 3 seções explicadas, vou passar a falar sobre como chamar, ou invocar, uma classe.

Como chamar uma classe

Não é difícil usar as classes em PHP, mas é necessário atenção. Veja o exemplo abaixo que utiliza a classe cliente que acabamos de criar:

$nome = "Marco Nogueira" ;
$endereco = "Rua das Flores 32 São Paulo" ;
$telefone = "(99) 9-5555-5555" ;
$email = "marconogueira@gmail.com" ;

$meu_cliente = new cliente ( $nome , $endereco , $telefone , $email ) ;
$meu_cliente->cadastrar ( ) ; // usa-se o sinal "->" para acessar as funções
echo "Cliente " . $meu_cliente->nome ." cadastrado com sucesso" ;

// para remover o cliente
$meu_cliente->remover ( ) ;
echo "Cliente " . $meu_cliente->nome ." removido com sucesso" ;

// usar a função obter_novo_id ( ) resulta em erro,
//  é como se ela não existisse
$meu_cliente->obter_novo_id ( ) ; // erro 

No exemplo acima, eu cadastrei o cliente Marco Nogueira e inseri os dados em variáveis. Depois, criei um objeto usando a classe cliente.

Como eu fiz isso? Utilizando a palavra chave new seguida do nome da classe. Visto que essa classe tem um construtor, eu preciso inserir os argumentos da classe.

Em seguida, eu chamei a função cadastrar ( ) para salvar o cliente que eu acabei de criar. O sinal -> é o que indica minha intenção de utilizar uma função da classe. Note que eu também posso acessar as propriedades públicas desse cliente da mesma forma.

Conclusão

E então? Você consegue ter uma ideia de como usar esse novo conhecimento em seus projetos? Nem sempre é fácil encontrar uma utilidade logo de cara, mas eu garanto que entender como criar e usar classes será esencial para a sua jornada.

Só para você ter uma ideia, este blog utiliza dezenas de classes criadas especificamente para ele para fazer tudo isso que você está lendo funcionar de maneira coerente! Eu garanto que sem usar a Programação Orientada a Objetos você também pode criar excelentes projetos, mas com certeza você se sairá muito melhor com ela! 🚀

Aprenda mais com outros artigos relacionados