PHP para Iniciantes: Classes e Objetos - Introdução
Está preparado(a) para mergulhar em águas profundas? Afinal, estou prestes a abordar um assunto gigantesco e polêmico no universo da computação... E dito isso, vamos começar pelo começo: você sabe de onde vem os termos Classes e Objetos?
Mesmo para quem nunca lidou com programação, refletir sobre o que é um objeto é até um pouco fácil. Por exemplo, a tela por onde você está lendo ou ouvindo esse artigo já é um objeto, não é mesmo? Seja um relógio, celular, tablet, laptop, notebook, monitor, TV, retroprojetor... O que seja. Você está lendo ou ouvindo essas letrinhas em algum lugar e intuitivamente sabe que isso é um objeto porque você consegue interagir com ele e realizar certos objetivos a partir disso. Ou seja, todo objeto tem um objetivo ou propósito. Objetos sem funções são apenas decorativos, não é? Nesse caso, ainda assim, tem uma: decorar.
Pensar dessa forma nos ajuda a compreender rapidamente o conceito de objetos... E se eu te disser que também ajuda a entender classes? Deixe-me te fazer uma provocação e por favor, não responda com um soco:
Só existe um modelo do dispositivo que você está usando agora no mundo?
Pois é, provavelmente não... A menos que você tenha inventado um e não mostrou a ninguém ainda... Se for o caso, vamos fingir que não, beleza?
O fato de existir outros modelos, significa dizer que há várias implementações distintas do mesmo objeto. O que significa que, mesmo tendo várias funções em comum, há variedades. Mais uma provocação:
O seu dispositivo é o único do modelo que você possui?
Outra vez, não. As empresas produzem em larga escala para vender em massa, o que significa que, mesmo tendo tantas variações nos modelos, também há objetos "iguais".
Calma aí, Kiko, onde você quer chegar?
Eu quero que você comece a pensar nas coisas sempre como "modelos" e "objeto". Eu tenho certeza que você pode encontrar vários cenários da vida onde dá para aplicar isso. Até na biologia, se você parar para pensar na anatomia humana como um "modelo" e cada indivíduo como "objetos".
Então, ao vir para a computação, muitas vezes você vai precisar fazer esse exercício mental para estruturar seus projetos, transformando uma definição em classe (o modelo) e, a partir dessa definição, criando seus objetos. É um exercício muito legal e que requer prática para aperfeiçoar.
Mas olha, toma muito cuidado: não basta só praticar para chegar a perfeição. Você precisa praticar do jeito certo. Se você ficar repetindo erros, criará o erro perfeito, apenas isso. Se quiser se desenvolver seriamente no universo da computação, você precisará, em algum momento, estudar a fundo os paradigmas que inventaram há muitos anos atrás. O que estamos falando agora se chama Programação Orientada a Objetos, que apesar do termo surgir apenas em 1995, por Alan Key, suas práticas já eram pensadas em 1967 na linguagem Simula 67, criada por Ole-Johan Dahl e Kristen Nygaard.
Um tempão, não é mesmo? 54 anos atrás os caras já estavam tentando deixar nossos códigos redondinhos... E eu tenho certeza que algum matemático já tinha pensado nisso mas deixou o conceito só na álgebra.
De qualquer forma, aqui estamos nós com o paradigma muito bem mastigado para qualquer um quebrar a cabeça e aprender. O que não falta na internet é exemplos diferenciados sobre o que é Classe e o que é Objeto. Esse dos dispositivos eu inventei agora imaginando sobre como deixar a compreensão mais fácil baseado no que você, leitor(a), possui... Mas se você preferir exemplos gastronômicos, tem o clássico exemplo da fôrma de bolo.
Classe será a fôrma, pois é ali que você vai incluir os atributos que criam o objeto. No caso de um bolo, basta que a fôrma seja o recipiente onde você insere os ingredientes... Então todo bolo produzido sai com o mesmo formato, mas não necessariamente com o mesmo sabor.
Objeto será o bolo produzido. Cada objeto pode ter ingredientes diferentes, sabores diferentes e cores diferentes. E depois você ainda pode decorar com mais coisas por cima, fazendo ainda mais distinções de uma instância para outra.
Esse exemplo não é genial?! Foi com ele que eu aprendi POO de verdade na faculdade, com a minha primeira inspiração acadêmica, a Joanna Cecilia. Eu sempre a vi como uma gênio na universidade. Sinceramente, se você apoia as mulheres fodas da computação, vai lá no perfil dela agora e adiciona. Se algum dia ela ler isso, é isso que tu é mesmo, Jô. FODA!
E voltando dessa seção espontanea de marketing pessoal, INFELIZMENTE eu não estou aqui para te ensinar POO. Veja quantos parágrafos você já leu sem falar nada de PHP. Pois é... POO é um conteúdo muito extenso e que com certeza nos afastaria do estudo da linguagem em si. Eu recomendo que pesquise, por fora, e estude sobre isso. Aqui iremos focar no PHP, fechado?!
Tá, Kiko, então o que vai ser abordado nessa seção?
O de sempre: sintaxe, semântica, como escrever uma classe, como escrever um objeto... E algumas coisas mais loucas, tipo visibilidade, propriedades dinâmicas (que ficará depreciado no PHP 8.1 e em breve não será mais aceito na linguagem), métodos mágicos, abstrações, implementações, extensões, final
(que você só vai entender no artigo), interfaces e clonagem de objetos.
Uou...................
A gente poderia até ir além e quebrar a cabeça pensando em Reflection, mas isso não é coisa de iniciante. Se algum dia precisar lidar com isso e tiver dúvidas, minha DM no Twitter é aberta.
Ok, Kiko, então essa introdução não vai falar nada de PHP?!
Tá bom, tá bom... Só para não dizer que não falamos nada... No PHP, todo objeto é uma referência. Isso signficia que suas variáveis não clonam nenhum objeto. Se você atribuir "o mesmo objeto" em duas variáveis distintas, elas terão a mesma referência.
<?php
$objetoInicial = new stdClass;
$objetoDois = $objetoInicial;
$objetoTres = $objetoDois;
$objetoTres->nome = "Joanna";
var_dump($objetoDois->nome); // string(Joanna)
var_dump($objetoInicial->nome); // string(Joanna)
Então, se você cria uma função que recebe um objeto, qualquer alteração que fizer nele irá refletir na variável que colocaram na chamada dessa função (exceto se instanciaram o objeto na chamada, daí não teria variável).
<?php
function botaJoanna(object $objetoInterno): void
{
$objetoInterno->nome = "Joanna";
}
$objetoExterno = new stdClass;
botaJoanna($objetoExterno);
var_dump($objetoExterno->nome); // string(Joanna)
Então fique esperto(a). Se você encontrar algum código PHP onde o indivíduo usou o operador de referência (&
) em um objeto, pode apresentar esse artigo pra esse(a) desenvolvedor(a), pois o que ele fez foi completamente desnecessário... Ainda que, falando em funções, pareça ser bem melhor encontrar rapidamente uma identificação clara de referência do que precisar analisar o tipo de dado que está recebendo... Então não xingue ele(a), apenas veja se ele(a) sabia disso aí, beleza?
Aliás, nunca xingue ninguém por qualquer coisa, mesmo que seja um erro. O primeiro passo para aprender é errar. Se você abomina isso, o errado é você. Falou?!
E por hoje é só! Curtiu? Comenta e compartilha! Os primeiros artigos desse tópico serão bem curtos, porque vou escrever guias do estilo "how-to". Mas depois entraremos nos assuntos bem loucos! Não perca, hein?
Inté!!