Transcript
Page 1: PHP Orientado a Objetos - institutosiegen.com.br · A Orientação a Objetos (OO) é uma metodologia de programação que permite fundamentalmente o reúso de códigos. Além do reúso,

prof. Erwin Alexander Uhlmann--

PHP Orientado a Objetosprof. Erwin Alexander Uhlmann

PHP Orientado a Objetos 1Introdução 3Envio de dados pelo protocolo HTTP (post) 8Utilizando o protocolo HTTP para comunicar pacote de interface com de objetos 9PDO - PHP Data Objects 10Inserir dados 10Listar dados 10Alterar dados 11Sistema básico POO com PDO 11Projeto do Single Page Application 13Introdução ao AJAX 13AJAX Mini 13

www.institutosiegen.com.br Guarulhos - 2016 Página � de �1 15

Page 2: PHP Orientado a Objetos - institutosiegen.com.br · A Orientação a Objetos (OO) é uma metodologia de programação que permite fundamentalmente o reúso de códigos. Além do reúso,

prof. Erwin Alexander Uhlmann--

www.institutosiegen.com.br Guarulhos - 2016 Página � de �2 15

Page 3: PHP Orientado a Objetos - institutosiegen.com.br · A Orientação a Objetos (OO) é uma metodologia de programação que permite fundamentalmente o reúso de códigos. Além do reúso,

prof. Erwin Alexander Uhlmann--

IntroduçãoA Orientação a Objetos (OO) é uma metodologia de programação que permite fundamentalmente o reúso de códigos. Além do reúso, a manutenção é facilitada por estar em um local e ser apontado pelos outros e, a documentação é facilitada também por estar definido em objetos e não em partes separadas.

A Orientação a Objetos é principalmente a organização dos códigos. A abstração permite esta organização, com segue o exemplo:

Um cliente deve ser tratado como um objeto em um sistema. Este objeto possui diversos atributos, alguns dos quais são importantes para o sistema como nome, e-mail e senha. Assim como um outro objeto qualquer serve para algo, um martelo para pregar, um carro para transportar, um cliente serve para logar, comprar ou inserir dados no sistema. À estas ações, atribui-se o nome de método.

Um objeto então é caracterizado por possuir atributos e métodos. Veja o exemplo:

Objeto cliente:

Atributos: Nome, e-mail e senha;Métodos: imprimir dados, logar no sistema, inserir dados próprios, editá-los e excluí-los.

<?php class Cliente{ public $nome = "Erwin Alexander Uhlmann"; public $email = "erwin@erwin"; public $senha = "12345"; } ?> <html> <body> <?php $cliente = new Cliente; echo $cliente->nome; ?> </body> </html>

Renderizado pelo navegador, o resultado é:

Foram feitas duas partes para a programação: O objeto Cliente com alguns atributos ($nome, $email e $senha) e no corpo do html a chamada deste objeto, que se chama instancia. Ao www.institutosiegen.com.br Guarulhos - 2016 Página � de �3 15

Page 4: PHP Orientado a Objetos - institutosiegen.com.br · A Orientação a Objetos (OO) é uma metodologia de programação que permite fundamentalmente o reúso de códigos. Além do reúso,

prof. Erwin Alexander Uhlmann--

instanciar o objeto Cliente é preciso apontar o que se deseja, neste caso imprimir o nome. Note que não há nenhum método na classe. A ação (echo) está após instanciar o objeto.

Isto ainda não é Orientação a Objetos!

O próximo passo é criar os objetos em si, as functions.Observe que todos os atributos são públicos, ou seja, podem ser acessados por todos objetos (functions) que estiverem na classe.As functions é que contém os métodos (ações) e são elas que possuem os códigos que podem ser reaproveitados.

Mas para que serve uma function?

Vamos tornar um dos atributos privados, a senha.<?php class Cliente{ public $nome = "Erwin Alexander Uhlmann"; public $email = "erwin@erwin"; private $senha = "12345"; } ?> <html> <body> <?php $cliente = new Cliente; echo $cliente->nome; ?> </body> </html>

Um atributo privado só pode ser acessado por uma function (objeto) e não por qualquer objeto. Para isto é preciso apontar este atributo em um objeto específico.<?php class Cliente{ public $nome = "Erwin Alexander Uhlmann"; public $email = "erwin@erwin"; private $senha = "12345"; function imprimirSenha(){ echo $this->senha; } } ?> <html> <body> <?php $cliente = new Cliente; echo $cliente->nome."<br>"; $cliente->imprimirSenha(); ?> </body> </html>

Diferente de se apontar o atributo diretamente com uma ação após se instanciar uma classe, é preciso apontar a função. Na função é que estão os métodos.Caso isto não seja feito, será retornado um Fatal error que impede a execução do arquivo todo.

www.institutosiegen.com.br Guarulhos - 2016 Página � de �4 15

Page 5: PHP Orientado a Objetos - institutosiegen.com.br · A Orientação a Objetos (OO) é uma metodologia de programação que permite fundamentalmente o reúso de códigos. Além do reúso,

prof. Erwin Alexander Uhlmann--

Ao se apontar o objeto é possível imprimir o atributo privado.

Por fim, existe o atributo Protected, que obviamente, protege seu conteúdo. Ele só pode ser visualizado pela própria classe ou objeto ou por seus filhos, os objetos herdeiros.

<?php class Cliente{ public $nome = "Erwin Alexander Uhlmann"; protected $email = "erwin@erwin"; private $senha = "12345"; function imprimirSenha(){ echo $this->senha; } } class Herdeira extends Cliente{ function imprimirEmail(){ echo $this->email; } } ?> <html> <body>

www.institutosiegen.com.br Guarulhos - 2016 Página � de �5 15

Page 6: PHP Orientado a Objetos - institutosiegen.com.br · A Orientação a Objetos (OO) é uma metodologia de programação que permite fundamentalmente o reúso de códigos. Além do reúso,

prof. Erwin Alexander Uhlmann--

<?php $cliente = new Cliente; echo $cliente->nome."<br>"; $cliente->imprimirSenha(); echo "<br>"; //nova classe $herdeira = new Herdeira; $herdeira->imprimirEmail(); ?> </body> </html>

O resultado é:

www.institutosiegen.com.br Guarulhos - 2016 Página � de �6 15

Page 7: PHP Orientado a Objetos - institutosiegen.com.br · A Orientação a Objetos (OO) é uma metodologia de programação que permite fundamentalmente o reúso de códigos. Além do reúso,

prof. Erwin Alexander Uhlmann--

Muito bem! Assim já é possível compreender como funcionam os objetos e a visibilidade (publica, protegida e privada) deles. Agora seria interessante promover a interatividade. Vamos criar um formulário para inserir as informações, assim:

<html> <body>

<form method="post"> Nome:<input type="text" name="nome" /><br /> e-Mail:<input type="text" name="email" /><br /> Senha:<input type="text" name="senha" /><br /> <input type="submit" name="ok" /><br /> </form> <hr />

<?php $cliente = new Cliente; echo $cliente->nome.”<br>";

Agora vamos criar uma função para a ação (método) que recebe os dados do formulário:<?php class Cliente{ public $nome; protected $email; private $senha; function rcbValores(){ if(isset($_POST['ok'])){ $this->nome=$_POST['nome']; $this->email=$_POST['email']; $this->senha=$_POST['senha']; } } function imprimirSenha(){

Como os dados estão encapsulados na função rcbValores(), é preciso disponibilizá-los para as outras funções. Para isto, basta incluir a função com uso da pseudo variável $this.

<?php class Cliente{ public $nome; protected $email; private $senha; function rcbValores(){ if(isset($_POST['ok'])){ $this->nome=$_POST['nome']; $this->email=$_POST['email']; $this->senha=$_POST['senha']; } } function imprimirSenha(){ $this->rcbValores(); echo $this->senha; } }

Como não há uma function para a impressão do nome, a variável atribuída no início está vazia, logo, nada é impresso. Crie uma function para isto!

www.institutosiegen.com.br Guarulhos - 2016 Página � de �7 15

Page 8: PHP Orientado a Objetos - institutosiegen.com.br · A Orientação a Objetos (OO) é uma metodologia de programação que permite fundamentalmente o reúso de códigos. Além do reúso,

prof. Erwin Alexander Uhlmann--

Envio de dados pelo protocolo HTTP (post)O envio de dados de um formulário utilizando o post é simples: utilize o comando $_POST[“nome_do_campo”]. O problema é ativar a classe, como fazer?

aula2.php<form method="post" action="classes.php"> Nome:<input type="text" name="nome"><br /> e-Mail:<input type="text" name="email"><br /> Senha:<input type="text" name="senha"><br /> <input type="submit" name="ok"> </form>

classes.phpclass DadosForm{ public $nome; protected $email; private $senha; function atribuirValores(){ $this->nome = filter_input(INPUT_POST, "nome"); $this->email = filter_input(INPUT_POST, "email"); $this->senha = filter_input(INPUT_POST, "senha");

www.institutosiegen.com.br Guarulhos - 2016 Página � de �8 15

Page 9: PHP Orientado a Objetos - institutosiegen.com.br · A Orientação a Objetos (OO) é uma metodologia de programação que permite fundamentalmente o reúso de códigos. Além do reúso,

prof. Erwin Alexander Uhlmann--

} function imprimirDados(){ $this->atribuirValores(); echo "Nome:{$this->nome}<br>" ."e-Mail:{$this->email}<br>" ."senha:{$this->senha}."; } }

Desta forma é possível receber os dados enviados do formulário, porém os dados, de fato, só serão recebidos se houver a ativação da classe DadosForm.

."e-Mail:{$this->email}<br>" ."senha:{$this->senha}."; } } <?php $a = new DadosForm; $a->imprimirDados(); ?>

Utilizando o protocolo HTTP para comunicar pacote de interface com de objetosindex.php<?php include "classes.php";?> <!DOCTYPE HTML> <html lang="pt-br"> <head> <meta charset="utf-8"> <title>POO com PDO</title> </head> <body> <h1>POO com PDO</h1> <form method="post"> Nome:<input type="text" name="nome"><br /> e-Mail:<input type="text" name="email"><br /> Senha:<input type="text" name="senha"><br /> <input type="submit" name="ok"> </form> <hr /> <?php $dados = new Usuario; $dados->setNomeUsu($_POST['nome']); echo $dados->getNomeUsu()."<br>"; $dados->setEmailUsu($_POST['email']); echo $dados->getEmailUsu()."<br>"; $dados->setSenhaUsu($_POST['senha']); echo $dados->getSenhaUsu()."<br>"; ?> </body> </html>

classes.php<?php class Usuario{ public $nome; protected $email; private $senha;

www.institutosiegen.com.br Guarulhos - 2016 Página � de �9 15

Page 10: PHP Orientado a Objetos - institutosiegen.com.br · A Orientação a Objetos (OO) é uma metodologia de programação que permite fundamentalmente o reúso de códigos. Além do reúso,

prof. Erwin Alexander Uhlmann--

function getNomeUsu(){ return $this->nome; } function setNomeUsu($_nome){ $this->nome = $_nome; } function getEmailUsu(){ return $this->email; } function setEmailUsu($_email){ $this->email = $_email; } function getSenhaUsu(){ return $this->senha; } function setSenhaUsu($_senha){ $this->senha = $_senha; } } ?>

PDO - PHP Data ObjectsO PDO é uma classe do PHP que permite a conexão com n bancos. A principal vantagem e a possibilidade de mudança de plataforma e de BD sem a necessidade de reprogramar toda sua aplicação que antes era específica para um tipo de BD.

Para começarmos é preciso criar a conexão.

$conecta = new PDO("mysql:host=localhost;dbname=exercicio", "root", "senha");

Agora vamos criar um CRUD básico.

Inserir dados $insPess = $conecta->prepare("INSERT INTO pessoa(nome, email) VALUES(?, ?)"); $insPess->bindParam(1,”Nome da Pessoa”); $insPess->bindParam(2,”[email protected]”); $insPess->execute();

Note que os números 1 e 2 dentro dos comandos bindParam indicam a posição da interrogação no comando SQL.

Listar dados $lisPess = $conecta->query(“SELECT idpessoa, nome, email FROM pessoa”); while($row = $rs->fetch(PDO::FETCH_OBJ)){ echo $row->idpessoa . “<br />”; echo $row->nome . “<br />”; echo $row->email . “<br />”; }

www.institutosiegen.com.br Guarulhos - 2016 Página � de �10 15

Page 11: PHP Orientado a Objetos - institutosiegen.com.br · A Orientação a Objetos (OO) é uma metodologia de programação que permite fundamentalmente o reúso de códigos. Além do reúso,

prof. Erwin Alexander Uhlmann--

Alterar dados $altPess = $conecta->prepare("UPDATE pessoa SET nome = ?, email = ? WHERE idpessoa = ?"); $altPess->bindParam(1,$nome ); $altPess->bindParam(2,$email); $altPess->bindParam(3,$id); $altPess->execute();

Sistema básico POO com PDO index.php<?php include "classes.php";?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>POO com PDO</title> </head> <body> <h1>POO com PDO</h1> <hr /> <form method="post"> <label>Nome: <input type="text" name="nome" value="Erwin" /></label><br /> <label>e-Mail: <input type="email" name="email" value="erwin@erwin" /></label><br /> <label>Senha: <input type="password" name="senha" value="erwin" /></label><br /> <label><input type="submit" name="inserir" /></label> </form> <hr /> <?php echo "<h2>Select de nomes</h2>"; $usu = new Usuario; echo $usu->getNomeBD(); echo "<hr />"; echo "<h2>Inserir nomes</h2>"; $usu->setNomeBD(); echo "<hr />";

?> </body> </html>

classes.php<?php //Classe de conexão

class Conecta{ protected $conecta; function conectaBD(){ try{ $this->conecta = new PDO("mysql:host=localhost; dbname=volatil", "root", ""); }catch(Exception $e){ echo "Desculpe, o BD está off... Não continue!!!"; die; } }

www.institutosiegen.com.br Guarulhos - 2016 Página � de �11 15

Page 12: PHP Orientado a Objetos - institutosiegen.com.br · A Orientação a Objetos (OO) é uma metodologia de programação que permite fundamentalmente o reúso de códigos. Além do reúso,

prof. Erwin Alexander Uhlmann--

} //Classe para estar dados do Usuário

class Usuario extends Conecta{ public $nome; protected $email; private $senha;

//receber dados do form

function setUsuario(){ $this->nome = filter_input(INPUT_POST,"nome"); $this->email = filter_input(INPUT_POST,"email"); $this->senha = filter_input(INPUT_POST,"senha"); return $this->nome; return $this->email; return $this->senha; }

//ler dados do BD

function getNomeBD(){ $this->conectaBD(); $this->setUsuario(); $usu = $this->conecta->query("SELECT * FROM usuarios WHERE usu_nome LIKE '%{$this->nome}%'"); while($row=$usu->fetch(PDO::FETCH_OBJ)){ echo "id:<b>".$row->usu_id."</b> | Nome:<b>".$row->usu_nome. "</b> | email:<b>".$row->usu_email."</b> | senha:<b>". $row->usu_senha."</b> <a href='index.php?usu=".$row->usu_id."'>Editar</a><br />"; } }

//Antes de gravar… verifica se o reg. existe

function srcRegBD(){ //verificar se o registro existe no bd $this->conectaBD(); $this->setUsuario(); $usu = $this->conecta->query("SELECT * FROM usuarios WHERE usu_nome='{$this->nome}'"); while($row=$usu->fetch(PDO::FETCH_OBJ)){ return 1; } }

//gravar nome no BD

function setNomeBD(){ $this->conectaBD(); $this->setUsuario(); $this->srcRegBD(); if($this->srcRegBD()==1){ echo "Usuário existente! Tente outro...<br />"; $this->srcRegBD($this->nome.date('Y')); //sistema alternativo if($this->srcRegBD()==1){ echo "Que tal ...".$this->nome.date('Y')."<br>"; } }else{ if(($this->nome)!=""){ $stmt = $this->conecta->prepare("INSERT INTO usuarios(usu_nome, usu_email, usu_senha) VALUES(?,?,?)"); $stmt->bindParam(1,$this->nome); www.institutosiegen.com.br Guarulhos - 2016 Página � de �12 15

Page 13: PHP Orientado a Objetos - institutosiegen.com.br · A Orientação a Objetos (OO) é uma metodologia de programação que permite fundamentalmente o reúso de códigos. Além do reúso,

prof. Erwin Alexander Uhlmann--

$stmt->bindParam(2,$this->email); $stmt->bindParam(3,$this->senha); $stmt->execute(); echo "Dados inseridos com sucesso!"; } } } } ?>

Projeto do Single Page ApplicationO projeto é simples: Todo o sistema deve ser acessado por uma página em formato HTML. A página HTML deve conter embutida a programação javascript que recolha os dados do formulário e envie para o GATILHO em PHP que recebe os dados e ativa as classes do arquivo MOTOR também neste formato, este último por sua vez pode se conectar com o Banco de Dados, conforme o diagrama de pacotes.

Para começarmos o projeto SPA, é preciso entendermos o AJAX.

Introdução ao AJAX

AJAX Miniindex.html<html> <head> <title>Ajax Mini Teste</title> <script src="xmlhttprequest.js" type="text/javascript"></script> <script src="ajax_mini_teste.js" type="text/javascript"></script> </head> <body> <h1>AJAX mini teste</h1> <form method="post" action="javascript:void%200"> <input type="text" name="texto" id="texto" onkeydown="value=''" onfocus="value=''" autofocus /> </form> <span id="local" onclick="location.reload()"></span> </body> </html>

comunicador.jswindow.onkeyup = function(){ var texto = document.getElementById("texto").value;

www.institutosiegen.com.br Guarulhos - 2016 Página � de �13 15

Page 14: PHP Orientado a Objetos - institutosiegen.com.br · A Orientação a Objetos (OO) é uma metodologia de programação que permite fundamentalmente o reúso de códigos. Além do reúso,

prof. Erwin Alexander Uhlmann--

if(texto!=''){ respondeTexto(texto); } } function respondeTexto(obj){ //var dados = 'obj='+obj; //var url = "http://www.institutosiegen.com.br/is_professor.php?user_id="+encodeURIComponent(obj); var url = "ajax_mini_teste.php?obj="+encodeURIComponent(obj); requisicaoHTTP("GET", url, true); } function trataDados(){ var info = ajax.responseText; //alert(info); local = document.getElementById('local'); local.innerHTML += ajax.responseText + "<br>"; }

processa.php<?php $rcb = $_GET['obj']; $lista = array( 'a'=>'65', 'b'=>'66', 'c'=>'67', 'd'=>'68', 'e'=>'69', 'f'=>'70','g'=>'71','h'=>'72','i'=>'73', 'j'=>'74','k'=>'75','l'=>'76','m'=>'77','n'=>'78','o'=>'79','p'=>'80','q'=>'81', 'r'=>'82','s'=>'83','t'=>'84','u'=>'85','v'=>'86','w'=>'87','x'=>'88','y'=>'89', 'z'=>'90', ' '=>'32'); echo $rcb.' o código é: '.$lista[$rcb]; ?>

xmlhttprequest.jsvar ajax; var dadosUsuario; // ------- cria o objeto e faz a requisição ------- function requisicaoHTTP(tipo,url,assinc){ if(window.XMLHttpRequest){ // Mozilla, Safari,... ajax = new XMLHttpRequest(); } else if (window.ActiveXObject){ // IE6 ajax = new ActiveXObject("Msxml2.XMLHTTP"); if (!ajax) { ajax = new ActiveXObject("Microsoft.XMLHTTP"); } }

if(ajax) // iniciou com sucesso iniciaRequisicao(tipo,url,assinc); else alert("Seu navegador não possui suporte a essa aplicação!"); } // ------- Inicializa o objeto criado e envia os dados (se existirem) ------- function iniciaRequisicao(tipo,url,bool){ ajax.onreadystatechange=trataResposta; ajax.open(tipo,url,bool); ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); //ajax.overrideMimeType("text/XML"); /* usado somente no Mozilla */ ajax.send(dadosUsuario); }

www.institutosiegen.com.br Guarulhos - 2016 Página � de �14 15

Page 15: PHP Orientado a Objetos - institutosiegen.com.br · A Orientação a Objetos (OO) é uma metodologia de programação que permite fundamentalmente o reúso de códigos. Além do reúso,

prof. Erwin Alexander Uhlmann--

// ------- Inicia requisição com envio de dados ------- function enviaDados(url){ criaQueryString(); requisicaoHTTP("POST",url,true); } // ------- Cria a string a ser enviada, formato campo1=valor1&campo2=valor2... ------- function criaQueryString(){ dadosUsuario=""; var frm = document.forms[0]; var numElementos = frm.elements.length; for(var i = 0; i < numElementos; i++) { if(i < numElementos-1) { dadosUsuario += frm.elements[i].name+"="+encodeURIComponent(frm.elements[i].value)+"&"; } else { dadosUsuario += frm.elements[i].name+"="+encodeURIComponent(frm.elements[i].value); } } } // ------- Trata a resposta do servidor ------- function trataResposta(){ if(ajax.readyState == 4){ if(ajax.status == 200){ trataDados(); // crie essa função no seu programa!!!! } else { alert("Ops...Estamos realizando algumas manutenções! Por favor, volte depois!"); } } }

www.institutosiegen.com.br Guarulhos - 2016 Página � de �15 15


Recommended