Já conheço, agora, como utilizo?
Vamos continuar então Sr. Classe. Nosso próximo passo é desenvolver algo útil com essas benditas classes. Vou tentar mostrar no exemplo a seguir, uma comparação entre Programação OO e o Método "Normal". Vamos para o desenvolvimento de um mini carrinho de compras, talvez uma Cesta.
<?php
class Cesta {
var $Desconto;
var $Preco = array();
var $Quantidade = array();
function Cesta($desconto) {
$this -> Desconto = $desconto;
}
function AdicionarItem($item, $preco, $quantidade) {
if( isset($this -> Preco[$item]) ) {
$this -> Quantidade[$item] = $quantidade;
} else {
$this -> Preco[$item] = $preco;
$this -> Quantidade[$item] = $quantidade;
}
}
}
$MinhaCesta = new Cesta(10);
?>Calma, não desista, Objetos não é complicado, sei que deve ter parecido, mas veja com calma o exemplo:
. Do inicio até a linha 5, é o que vinhamos fazendo até agora, nada de novo;
. A função Cesta() está pedindo por uma váriavel $desconto, e essa função tem o mesmo nome que nossa classe, coencidencia? Não, de mandeira alguma, veja que ao chamar nossa classe na penultima linha, passamos um valor pela classe "10". Ao criar uma nova classe, ela automaticamente executa uma função com o mesmo nome que a classe. Então ao mesmo tempo executamos essa função e declaramos a váriavel Desconto com o valor 10. Que no final de tudo, essa será a porcentagem de descontos que o usuário ganhará em cima das compras;
. Já a função AdicionarItem() tem mais explicações sobre ela mesmo do que OO. Primeiro verificamos se já existe o item na nossa matriz, se ele existir, somamos o valor ao que já existe, se não existir, definimos o Preco[$item] com o valor que foi passado e atribuimos a quantidade que foi passada.
Como isso iriamo funcionar? Para adicionar itens ao nosso carrinho, fariamos dessa forma (o script acima já está em nosso código):
$MinhaCesta -> AdicionarItem(1, 15.75, 10);
Somente executamos a função AdicionarItem passando os valores 1 para o código do item, 15.75 como o valor do item e 10 como a quantidade.
Vamos virar o angulo de nossa atenção e ver como isso seria pela maneira tradicional. Provavelmente você teria que utilizar um banco de dados, onde cada item que seria adicionado no banco teria um código do usuário e sempre que fosse necessário puxar os dados, teriamos que fazer consultas ao banco de dados.
Mas qual a vantagem de jogar dentro de uma váriavel e na próxima página perdeu tudo? Então utilizaremos uma váriavel que não seja perdida na próxima página, podemos declarar uma váriavel de sessão como nosso objeto:
$_SESSION['MinhaCesta'] = new Cesta(10);
Resolvido o problema? Então temos um script que ficaria fácil de fazer uma manutenção, e sem utilizar recursos do servidor para conexões e consultados ao banco de dados. Vamos ver agora algumas funções que poderiamos anexar nesse nosso código:
<?php
class Cesta {
var $Desconto;
var $Preco = array();
var $Quantidade = array();
function Cesta($desconto) {
$this -> Desconto = $desconto;
}
function AdicionarItem($item, $preco, $quantidade) {
if( isset($this -> Preco[$item]) ) {
$this -> Quantidade[$item] = $quantidade;
} else {
$this -> Preco[$item] = $preco;
$this -> Quantidade[$item] = $quantidade;
}
}
function RemoverItem($item, $quantidade) {
if ( isset( $this -> Quantidade[$item] ) ) {
if ( $this -> Quantidade[$item] >= $quantidade ) {
$this -> Quantidade[$item] -= $quantidade;
} else {
$this -> Quantidade[$item] = 0;
}
} else {
return false;
}
}
}
session_start();
$_SESSION['MinhaCesta'] = new Cesta(10);
?>Implementamos uma função para remover alguns itens que desejarmos. Algo como, adicionamos 50 mas tenho dinheiro para comprar somente 30, então preciso remover 20. Nossa primeiro comparação da função é ver se o item já está em nossa cesta, se não estiver, essa função retorna FALSE. A segunda comparação é ver se existe o total a ser removido no carrinho. Não teria lógica remover 70 itens se só tenho 50, e ficar com -20, isso provavelmente iria acarretar em problemas na contagem final. Se ele não tiver o total a ser removido ele define a váriavel Quantidade como 0.
Já temos nossas mãos na cesta, podemos adicionar e remover itens que desejamos, agora nos resta somente contratar nosso caixa:
<?php
class Cesta {
var $Desconto;
var $Preco = array();
var $Quantidade = array();
function Cesta($desconto) {
$this -> Desconto = $desconto;
}
function AdicionarItem($item, $preco, $quantidade) {
if( isset($this -> Preco[$item]) ) {
$this -> Quantidade[$item] = $quantidade;
} else {
$this -> Preco[$item] = $preco;
$this -> Quantidade[$item] = $quantidade;
}
}
function RemoverItem($item, $quantidade) {
if ( isset( $this -> Quantidade[$item] ) ) {
if ( $this -> Quantidade[$item] >= $quantidade ) {
$this -> Quantidade[$item] -= $quantidade;
} else {
$this -> Quantidade[$item] = 0;
}
} else {
return false;
}
}
function TotalCompras() {
$soma = 0;
while ( list($cod, $valor) = each($this -> Quantidade) ) {
$soma = $this -> Quantidade[$cod] * $this -> Preco[$cod];
}
$soma -= $soma * ($this -> Desconto / 100);
return $soma;
}
}
session_start();
$_SESSION['MinhaCesta'] = new Cesta(10);
?>Alguma dúvida sobre essa função? Uma simples para terminar. Somente percorremos toda a Matriz e calculamos a Quantidade de cada item * seu Proço unitário, aplicamos a porcentagem de descontos que o usuário tem e retornamos a Soma Total.
E como funcionaria todo o nosso script?
<?php
class Cesta {
var $Desconto;
var $Preco = array();
var $Quantidade = array();
function Cesta($desconto) {
$this -> Desconto = $desconto;
}
function AdicionarItem($item, $preco, $quantidade) {
if( isset($this -> Preco[$item]) ) {
$this -> Quantidade[$item] = $quantidade;
} else {
$this -> Preco[$item] = $preco;
$this -> Quantidade[$item] = $quantidade;
}
}
function RemoverItem($item, $quantidade) {
if ( isset( $this -> Quantidade[$item] ) ) {
if ( $this -> Quantidade[$item] >= $quantidade ) {
$this -> Quantidade[$item] -= $quantidade;
} else {
$this -> Quantidade[$item] = 0;
}
} else {
return false;
}
}
function TotalCompras() {
$soma = 0;
while ( list($cod, $valor) = each($this -> Quantidade) ) {
$soma = $this -> Quantidade[$cod] * $this -> Preco[$cod];
}
$soma -= $soma * ($this -> Desconto / 100);
return $soma;
}
}
session_start();
$_SESSION['MinhaCesta'] = new Cesta(10);
$_SESSION['MinhaCesta'] -> AdicionarItem("AF 1520", 17.90, 15);
$_SESSION['MinhaCesta'] -> AdicionarItem("AE 1735", 21.00, 5);
$_SESSION['MinhaCesta'] -> TotalCompras();
?>Dessa forma, se conclui o exemplo de nossa Cesta de Compras. Agora vocês se perguntam:
- Pronto, fico bonito, mas só posso fazer isso com OOP?
Como comentei no inicio, tudo pode ser feito, qualquer script que você faria da maneira "convencional" poderia ser feito Orientado à Objeto. Para se ter uma idéia de alguns outros tipos que podem ser bastante úteis é nas Manutenções gerais de um site, upload de arquivos, murais de mensagens/recados, etc... Muitos scripts podem ser criados, dê asas a sua imaginação.
E para quem gosta de repassar seus scripts, o que ficaria mais fácil, passar esse trecho de um código:
class Cesta {
var $Desconto;
var $Preco = array();
var $Quantidade = array();
function Cesta($desconto) {
$this -> Desconto = $desconto;
}
function AdicionarItem($item, $preco, $quantidade) {
if( isset($this -> Preco[$item]) ) {
$this -> Quantidade[$item] = $quantidade;
} else {
$this -> Preco[$item] = $preco;
$this -> Quantidade[$item] = $quantidade;
}
}
function RemoverItem($item, $quantidade) {
if ( isset( $this -> Quantidade[$item] ) ) {
if ( $this -> Quantidade[$item] >= $quantidade ) {
$this -> Quantidade[$item] -= $quantidade;
} else {
$this -> Quantidade[$item] = 0;
}
} else {
return false;
}
}
function TotalCompras() {
$soma = 0;
while ( list($cod, $valor) = each($this -> Quantidade) ) {
$soma = $this -> Quantidade[$cod] * $this -> Preco[$cod];
}
$soma -= $soma * ($this -> Desconto / 100);
return $soma;
}
}Ou uns 10-15 arquivos?
Conclusão
Sei que passei rápido demais o assunto sobre OO, mas acredite, não há muito o que se explicar. Isso é um método de programação, não uma função ou algo assim, que possa ter detalhes, exemplos ou mais coisas. Confesso que da forma que passei isso, restringue a pessoas que tenham já algum conhecimento em PHP, mas realmente, você primeiro precisa aprender PHP, para depois passar para OO, como espera criar funções e tudo mais se está apenas começando? Tudo ao seu tempo.
A intenção desse tutorial não é mudar o jeito de todos programar, pessoalmente, devo ter nem 30% dos meus trabalhos feitos OO. Como iniciei o tutorial, não há uma vantagem de um método sobre o outro, em alguns casos OO pode ser melhor e em outros a maneira convencional pode ser a melhor forma.
Com certeza, muitas dúvidas ficaram, expliquei um método de programação em 10 segundos... Espero somente desse tutorial é que, quem se interessar por OO, realmente tente desenvolver alguns mini projetos, e a qualquer dúvida, há várias pessoas aqui para lhe ajudar.
Mas acredite em uma coisa, saber quando, onde e porque utilizar OO é muito mais díficil que aprender a programar em OO.
Então, como diria alguém que mata 2 leões por dia com as unhas e dentes...
"Let the carnage begin" - Stormbringer.
Autor: Sandro J. S. Souza
Tags: POO, PHP, Introdução a Programação, Orientada à Objeto





