Escolar Documentos
Profissional Documentos
Cultura Documentos
uma forma de programao pouco vista no PHP, mas com o lanamento da verso final do PHP 5.0 tudo indica que ele passar a ser mais Orientado Objeto. Tanto como j na verso 5.0 como ser nas prximas. O futuro ningum conhece, ento no posso falar, PHP depois da verso 7.0 ser somente OOP, como talvez ele pode no fazer tanto sucesso entre os programadores e nem existir mais na verso 5.1. Um tutorial destinado aos Programadores PHP em geral, aos usurios do Frum WM Online, e para o cara que no me deixou em paz at isso ficar pronto, thiagorls. At quando estive me ausentando do Frum, veio me cobrar isso, cara de pau, no? Chega de babozeira e vamos ao que interessa, PHP! ================================================================================
Introduo
Enfim, comearemos. Para qualquer programao OO, voc criar tudo baseado em Classes, e as variveis que voc costumava usar, passaro a ser Objetos. Vamos um exemplo: <?php class MinhaClasse { // Declarao da Classe var $txt1; // Declarao das Variveis var $txt2; } $MeuObjeto = new MinhaClasse(); ?> Um exemplo sem utilizao, mas que poder nos ajudar a entender como criar uma classe. Na linha 2 (class MinhaClasse {) onde declaramos nossa Classe, cada vez que quiser criar um objeto a partir dela, criaremos chamando pelo nome definido "MinhaClasse". Podemos criar quantas classes diferentes quiser, mas no pode ser em bloco: <?php class MinhaClasse { ?> <?php var $txt1; var $txt2; } ?> O exemplo acima no ir funcionar. Voltando ao exemplo correto, as linhas 3 e 4 onde declaramos nossas variveis. Exato, para se trabalhar com classes, precisamos declarar as variveis antes de us-las. Mas no precisamos definir seu tipo, a no ser que queiramos uma Matriz: <?php class MinhaClasse { var $txt1 = array(); var $txt2; } $MeuObjeto = new MinhaClasse(); ?> Acho que at aqui no teremos maiores problemas, vamos prosseguir.
dentro das classes: <?php class MinhaClasse { var $txt1; var $txt2; function Retornar1() { echo $this -> txt1; } } $MeuObjeto = new MinhaClasse(); ?> Agora voc se pergunta "O que diabos faz aquele $this ali?". $this somente uma referncia classe em que se encontra a funo. Poderiamos sem problemas colocar no nome da classe para retornar o valor da vriavel, mas iria atrapalhar caso estivessemos trabalhando com classes hierarquicas, ter uma classe pai e filho. Mas isso no hora de comentar ainda, mais pra frente veremos Voltando ao nosso cdigo, veja que, a funo est dentro de nossa classe, ento para executar ela seria dessa forma: $MeuObjeto -> Retornar1(); Certo, mas j que no utilizo a forma "antiga" para ler a vriavel, como fao para armazenar um valor ela? O segredo est nas funes <?php class MinhaClasse { var $txt1; var $txt2; function Retornar1() { echo $this -> txt1; } function Gravar1($valor) { $this -> txt1 = $valor; } } $MeuObjeto = new MinhaClasse(); ?> Ento ao executar a funo $MeuObjeto -> Gravar1(), temos que passar um valor que ser o novo valor da vriavel $txt1. Quaisquer outros tipos de funes podem ser declaradas dentro da classe, mas tenha idia que trabalhar com OO justamente para ter no final, um cdigo limpo e de fcil entendimento. Talvez algum est se perguntando, porque venho colocando vriaveis com letras maiusculas. Isso somente seu estilo de programao, vinha fazendo com _ a um bom tempo, mas mudei o jeito por vontade prpria ao iniciar em OO, acho que dessa forma fica mais fcil identificar. Mas como disse, somente o gosto, poderia sem problema algum criar a classe minha_classe e $meu_objeto. S cuidado com a forma MinhaClasse, pois PHP faz distino entre vriaveis maiusculas e minusculas. Acho que podemos encerrar nossa introduo por aqui. Vamos alguns exemplos mais prticos. ================================================================================
$_SESSION['MinhaCesta'] = new Cesta(10); Resolvido o problema? Ento temos um script que ficaria fcil de fazer uma manuteno, e sem utilizar recursos do servidor para conexes e consultados ao banco de dados. Vamos ver agora algumas funes que poderiamos anexar nesse nosso cdigo: <?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 funo para remover alguns itens que desejarmos. Algo como, adicionamos 50 mas tenho dinheiro para comprar somente 30, ento preciso remover 20. Nossa primeiro comparao da funo ver se o item j est em nossa cesta, se no estiver, essa funo retorna FALSE. A segunda comparao ver se existe o total a ser removido no carrinho. No teria lgica remover 70 itens se s tenho 50, e ficar com -20, isso provavelmente iria acarretar em problemas na contagem final. Se ele no tiver o total a ser removido ele define a vriavel Quantidade como 0. J temos nossas mos 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 dvida sobre essa funo? Uma simples para terminar. Somente percorremos toda a Matriz e calculamos a Quantidade de cada item * seu Proo unitrio, aplicamos a porcentagem de descontos que o usurio 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 vocs se perguntam: - Pronto, fico bunito, 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 idia de alguns outros tipos que podem ser bastante teis nas Manutenes gerais de um site, upload de arquivos, murais de mensagens/recados, ...
Muitos scripts podem ser criados, de asas a sua imaginao E para quem gosta de repassar seus scripts, o que ficaria mais fcil, passar esse trecho de um cdigo: 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? ================================================================================
Concluso
Sei que passei rpido demais o assunto sobre OO, mas acredite, no h muito o que se explicar. Isso um mtodo de programao, no uma funo 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 funes e tudo mais se est apenas comeando? Tudo ao seu tempo. A inteno desse tutorial no mudar o jeito de todos programar, pessoalmente, devo ter nem 30% dos meus trabalhos feitos OO. Como iniciei o tutorial, no h uma vantagem de um mtodo sobre o outro, em alguns casos OO pode ser melhor e em outros a maneira convencional pode ser a melhor forma.
Com certeza, muitas dvidas ficaram, expliquei um mtodo de programao em 10 segundos... Espero somente desse tutorial que, quem se interessar por OO, realmente tente desenvolver alguns mini projetos, e a qualquer dvida, h vrias pessoas aqui para lhe ajudar Mas acredite em uma coisa, saber quando, onde e porque utilizar OO muito mais dficil que aprender a programar em OO. Ento, como diria algum que mata 2 lees por dia com as unhas e dentes... "Let the carnage begin" - Stormbringer