15
prof. Erwin Alexander Uhlmann -- PHP Orientado a Objetos prof. Erwin Alexander Uhlmann PHP Orientado a Objetos 1 Introdução 3 Envio de dados pelo protocolo HTTP (post) 8 Utilizando o protocolo HTTP para comunicar pacote de interface com de objetos 9 PDO - PHP Data Objects 10 Inserir dados 10 Listar dados 10 Alterar dados 11 Sistema básico POO com PDO 11 Projeto do Single Page Application 13 Introdução ao AJAX 13 AJAX Mini 13 www.institutosiegen.com.br Guarulhos - 2016 Página de 1 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,

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

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