INTERNET II
autor
FABIANO GONÇALVES DOS SANTOS
1ª edição
SESES
rio de janeiro 2018
Conselho editorial roberto paes e gisele lima
Todos os direitos reservados. Nenhuma parte desta obra pode ser reproduzida ou transmitida
por quaisquer meios (eletrônico ou mecânico, incluindo fotocópia e gravação) ou arquivada em
qualquer sistema ou banco de dados sem permissão escrita da Editora. Copyright seses, 2018.
isbn: 978-85-5548-565-7.
1. Linguagem Javascript 9
Programação cliente-servidor 11
Criação de variáveis 18
Estruturas de decisão 23
O if 23
O switch 25
Estruturas de repetição 27
O while 27
O for 28
Vetor (Array) 30
Criação de vetor vazio 30
Acesso a elementos 31
Removendo elementos 31
Instalação 41
Versões do JQuery 42
Seletores 43
Métodos e eventos 49
Travessia (DOM traversing) 52
Operadores 70
Aritméticos 70
Atribuição 70
Operadores de incremento/decremento 71
Lógicos 71
Estruturas de decisão 78
Estruturas de repetição 79
Funções 81
Criando uma função em PHP 81
Passagem de parâmetros por referência 84
Valores padrão em funções 85
Arrays 86
Arrays numéricos 87
Arrays associativos 88
Arrays Multidimensionais 89
4. Programação orientada a objetos em PHP 93
Introdução 94
Herança 98
Herança Simples 98
Herança multinível 101
Interfaces 103
Prezados(as) alunos(as),
Bons estudos!
7
1
Linguagem
Javascript
Linguagem Javascript
Há alguns anos, um aluno me procurou com uma dúvida clássica de um
típico estudante de computação: “Professor, qual linguagem você aconselha para
estudar para poder programar para web? ” Eu não tive dúvida e frustrei o aluno ao
responder: “Javascript”. Ele estava certo que eu responderia Java, ou C#, ou C++
ou outra parecida. Eu acredito não ter errado na resposta, porque muito do que a
gente vê e estuda para internet tem algum tipo de relacionamento com Javascript.
A interatividade que vemos em sites como o Facebook, onde o simples “Curtir”
faz com que as letras mudem de estilo na hora, aparece um “joinha” e outros
efeitos estão baseados em Javascript. Bibliotecas como JQuery, AngularJS, Dojo
Toolkit, Umbrella e outras, são baseadas em Javascript e fazem muito sucesso entre
os desenvolvedores e empresas que trabalham para a internet.
Portanto, creio que não errei nas minhas previsões.
O Javascript permite que as páginas da web possam receber comportamentos
exclusivos. Recursos que a linguagem de marcação, HTML, e a linguagem de for-
matação, CSS, não fornecem. Portanto, aprender esse trio de linguagens é funda-
mental para qualquer programador atual. Neste capítulo vamos estudar um pouco
o Javascript, porém não esqueça que aqui estamos apresentando alguns pontos
importantes da linguagem. Não deixe de procurar bons sites de estudo, vídeos, e
outros materiais para ajudar a completar o seu treinamento (acho que esta frase é
do Yoda, em Star Wars não é?).
E estamos aqui para ajudá-lo nisso. Vamos lá, bons estudos!
OBJETIVOS
• Apresentar os conceitos de programação client-side e server-side;
• Apresentar as estruturas de programação em Javascript: sequência, repetição e decisão;
• Apresentar as formas de trabalhar com vetores em Javascript;
• Apresentar os conceitos e forma de trabalho com JSON.
capítulo 1 • 10
Programação cliente-servidor
capítulo 1 • 11
O DOM antes de mais nada, é um padrão estabelecido pelo W3C (World
Wide Web Consortium) o qual define um modo de acessar os elementos de uma
página HTML. De acordo com o próprio W3C, o DOM é “uma plataforma e
uma interface neutra com relação a linguagens, a qual permite que programas e
scripts acessem e atualizem dinamicamente o conteúdo, a estrutura e o estilo de
um documento”.
Basicamente, toda página carregada em uma janela de um navegador pode ser
considerada como um objeto e, portanto, ela deve possuir atributos (ou elemen-
tos) e métodos. Um objeto de documento representa o documento HTML que é
exibido nessa janela. O objeto Document tem várias propriedades que se referem a
outros objetos que permitem o acesso e a modificação do conteúdo do documen-
to. Vamos esclarecer isso com um exemplo bem simples:
Sabemos que um script HTML tem o seguinte formato básico:
1. <!DOCTYPE html>
2. <html>
3. <head>
4. <title>Título da Página</title>
5. </head>
6. <body>
7.
8. <p>Algum texto.</p>
9.
10. </body>
11. </html>
capítulo 1 • 12
DOCUMENTO
DOCTYPE: <html>
Você deve ter reparado que falamos algumas vezes a palavra “objeto”. Então, se
estamos falando de objetos, nos leva a lembrar da programação orientada a objetos
e lá temos o conceito de propriedades e métodos para cada objeto. Isto vai ocorrer
com o DOM também. No caso do HTML DOM, que é o que vamos estudar por
enquanto, os métodos são ações que podem ser feitas nos elementos HTML. Por
exemplo, é possível adicionar ou remover um elemento HTML com o Javascript,
como ocorre quando você faz um post no facebook: ou seja, o usuário clica em um
botão e uma caixa de texto aparece para ele inserir algum texto e depois salvar o
que foi escrito. Quando tratamos de propriedades são os valores dos elementos
HTML que podem ser usados ou modificados. Por exemplo, no Youtube existe o
famoso “joinha” que fica desabilitado, em uma cor diferente. O usuário clica no
“joinha” e ele muda de cor.
capítulo 1 • 13
São comportamentos muito comuns que fazemos quase todo dia e é uma
aplicação direta da manipulação do DOM de uma página. Veja o código a seguir
como exemplo:
1. <html>
2. <body>
3. <p id="Teste"></p>
4. <script>
5. document.getElementById("Teste").innerHTML = "Olá pessoal!";
6. </script>
7. </body>
8. </html>
Você provavelmente vai encontrar na internet alguns tutoriais e leituras citando que a
tag <script> deve ser acompanhada de uma propriedade type. Assim:
<script type="text/javascript">
A propriedade type é opcional, pois Javascript é a linguagem de script padrão para uso
em HTML.
capítulo 1 • 14
1. <!DOCTYPE html>
2. <html>
3. <head>
4. <title>Minha página</title>
5. <script>
6. function funcaoX() { Dentro do <head>
7. ...
8. }
9. </script>
10. </head>
11. <body>
12.
13. <h1>Testando</h1>
14. <script>
15. function funcaoY() { Dentro do <body>
16. ...
17. }
18. </script>
19.
20. </body>
21. </html>
No exemplo anterior, perceba que a tag <script> pode ser usada tanto dentro
do <head> ou dentro do <body> ou nos dois lugares, simultaneamente ou não.
• Em arquivos externos: os scripts também podem estar fora do documento
HTML. Neste caso é criado um arquivo externo com a extensão .js e referenciado
no documento HTML.
Por exemplo, vamos criar um arquivo chamado meuScript.js com o seguin-
te conteúdo:
1. function funcaoX() {
2. ...
3. }
capítulo 1 • 15
Perceba a simplicidade do arquivo: trata-se de um arquivo texto comum (plain
text) salvo com o nome meuScript.js.
Em um documento HTML, precisamos referenciar este arquivo. Veja como
isto é feito no exemplo a seguir, especificamente na linha 4:
1. <!DOCTYPE html>
2. <html>
3. <body>
4. <script src="meuScript.js"></script>
5. </body>
6. </html>
Observe que colocamos a tag <script> dentro do <body>. Poderia ter sido co-
locado dentro do <head> também. Ou se existir outro arquivo .js, poderia colocar
também dentro do <head> e <body> simultaneamente.
Temos que fazer algumas considerações a respeito da posição na qual a inclu-
são do Javascript será feita.
Em primeiro lugar, quando usamos arquivos externos, o script será executado
como se estivesse tomando lugar da sua referência. Ou seja. No exemplo anterior,
na hora da montagem da página HTML, o conteúdo do arquivo meuScript.js
substituirá a referência contida na linha 4. Portanto, se a referência estivesse no
<head>, seria executado lá, antes da montagem da página pela tag <body>.
Usar arquivos externos possui algumas vantagens que devem ser consideradas:
• Separa o código HTML do Javascript. Isto é ótimo para legibilidade e orga-
nização do código e do projeto. O projeto será melhor organizado se os seus scripts
estiverem em um diretório específico para tal.
• Como consequência da primeira vantagem, separar o código aumenta a
facilidade de manutenção do projeto
• Quando separamos o arquivo Javascript, podemos usar um recurso chama-
do cache e isto faz com que as páginas carreguem mais rapidamente.
capítulo 1 • 16
Incluir vários arquivos .js em um documento
1. <script src="script1.js"></script>
2. <script src="script2.js"></script>
3. ...
4. <script src="scriptN.js"></script>
Usar referências externas com uma URL ou por meio de um caminho relativo:
Podemos, e isso é muito usado, referenciar uma URL completa para incluir
arquivos Javascript. Observe um exemplo real usando um caminho absoluto, de
uma URL:
60 <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
61 <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
64 <script src="js/jquery.validate.js"></script>
65 <script src="js/localization/messages_ptbr.js"></script>
66 <script src="js/site.js"></script>
CONEXÃO
Um bom site para você aprender estas questões sobre o caminho dos arquivos é o
W3Schools. Apesar dele estar todo em inglês, a leitura é fácil e direta e ainda dá para traduzir
a página on line. Consulte o link a seguir para aprender mais sobre os caminhos:https://www.
w3schools.com/html/html_filepaths.asp.
capítulo 1 • 17
Sabemos que toda linguagem de programação possui alguns “pilares” que são
indispensáveis para se construir programas: estruturas sequenciais, de decisão, de
repetição, saber como usar vetores entre outras coisas. Porém, antes de entrar nes-
tes assuntos, especificamente, vamos aprender como fazer algumas tarefas básicas
em Javascript.
Criação de variáveis
1. //declaração de variáveis
2. var x, y;
3. x = 5;
4. y = 6;
5. var z = x + y;
Percebeu que para usar variáveis basta usar a palavra reservada var? As linhas 2
e 5 mostram isso. E mais, na linha 5 observa-se que além de declarar a variável z,
podemos usar as variáveis declaradas anteriormente em uma operação aritmética.
Além disso, o exemplo nos mostra como comentar linhas em Javascript. Você
vai perceber que a sintaxe é bem parecida com Java, C#, C++. É muito importante
você saber que apenas a sintaxe é parecida.
CURIOSIDADE
Qual o relacionamento entre a linguagem Java e a linguagem Javascript?
Resposta: nenhum, a não ser o nome parecido. É melhor o próprio site da linguagem Java
explicar isto para você.
Acesse o link: <https://www.java.com/pt_BR/download/faq/java_javascript.xml>.
capítulo 1 • 18
Outros pontos iniciais que devem ser observados em Javascript:
• Toda instrução (ou linha) termina obrigatoriamente com “;”. Também é
possível colocar várias instruções em uma só linha, desde que separadas por “;”;
• Os blocos de comandos em Javascript ficam entre chaves: { ... };
• Comentários de várias linhas funcionam como em Java, C++, C# etc.: /*
... */;
• Maiúsculas e minúsculas são diferenciadas em Javascript. Ou seja, Javascript
é case-sensitive;
• Os nomes de variáveis seguem as mesmas regras que as linguagens em
geral. Por exemplo, não é possível que uma variável comece com um número,
mas é possível começar com “_”, “$”. Palavras reservadas não podem ser usadas
como identificadores;
• O operador “=” serve para atribuição e não para comparação. Observe as
linhas 3, 4 e 5 do exemplo anterior;
• Em Javascript, uma variável identificada por nome, pode guardar tantos
valores numéricos quanto strings;
• Uma variável que não recebeu valor algum terá o valor undefined.
1. var pi = 3.14;
2. var pessoa = "Roberto Baratão";
3. var saudacao = 'Não agora';
4. var pessoa = "João Neve", aviao = "Airbus", altura = 175;
5. var temporada11;
Perceba que na linha 2 foi declarada uma string entre aspas duplas e na linha
3 a string foi declarada entre aspas simples. Ou seja, Javascript permite estas duas
formas de uso.
Na linha 4 perceba que várias variáveis foram declaradas na mesma linha se-
paradas por vírgula.
A variável temporada11 como não foi iniciada, possui o valor undefined.
Continuando com operações básicas em Javascript, vamos aprender como
mostrar dados e criar saídas de informações.
capítulo 1 • 19
Exibição de dados em Javascript
1. <!DOCTYPE html>
2. <html>
3. <body>
4. <p>Testando</p>
5. <p id="elem"></p>
6. <script>
7. document.getElementById("elem").innerHTML = 5 + 6;
8. </script>
9. </body>
10. </html>
Exemplo 1: Uso do innerHTML.
1. <!DOCTYPE html>
2. <html>
3. <body>
capítulo 1 • 20
4. <p>Testando</p>
5. <script>
6. document.write(5+6);
7. </script>
8. </body>
9. </html>
Exemplo 2: document.write().
1. <!DOCTYPE html>
2. <html
3. <body>
4. <p>Testando</p>
5. <button onclick="document.write(5 + 6)">Me clica!</button>
6. </body>
7. </html>
Exemplo 3: document.write() após o HTML.
1. <!DOCTYPE html>
2. <html>
3. <body>
4. <p>Testando</p>
5. <script>
6. window.alert(5 + 6);
7. </script>
8. </body>
9. </html>
Exemplo 4: função alert().
capítulo 1 • 21
A função alert(), como o nome sugere, mostra uma pequena janela de alerta
no navegador do usuário e pode ser muito útil para fazer o debug de programas
em Javascript.
Uso do console.log()
Esta forma é indispensável para o debug dos seus programas e de sites que
você deseja inspecionar o código.
Observe o código a seguir.
1. <!DOCTYPE html>
2. <html>
3. <body>
4. <script>
5. console.log('Testando 5 + 6 = ',5+6);
6. </script>
7. </body>
8. </html>
capítulo 1 • 22
Desenvolvedor. Como o nome sugere, esta ferramenta habilita um conjunto de apli-
cativos que ajudam o programador a verificar erros, eventos, variáveis, parâmetros
trocados entre o servidor e cliente, entre outras atividades. Uma delas é um console
onde mensagens de erro são exibidas além de outras informações e é neste console
que vamos mostrar valores de variáveis que gostaríamos de inspecionar.
Estruturas de decisão
O if
capítulo 1 • 23
É bem provável que é idêntico aos outros ifs de outras linguagens que você co-
nhece. Lembre-se que o if é sempre escrito em letras minúsculas obrigatoriamente
e a condição sempre colocada dentro de parênteses.
O else é igual às outras linguagens, perceba:
capítulo 1 • 24
O switch
Como você já deve saber, o switch é usado para realizar ações diferentes basea-
do em várias condições, ou seja, ele é usado para selecionar um de vários blocos de
código. Lembre-se que:
• A expressão do switch é avaliada somente uma vez;
• O valor da expressão é comparado com os valores de cada case;
• Se há alguma correspondência, o bloco associado é executado. Senão, o
bloco default será executado.
capítulo 1 • 25
Na linha 1 foi usado o método getDay() da classe Date do Javascript. Como
você já pode ter imaginado, este método retorna e nos dá o número do dia da
semana baseado na data atual, no formato numérico, sendo que “0” é o número
para o Domingo.
Baseado no retorno deste método, temos o switch que se comportará da mes-
ma maneira que o switch do PHP, Java, C++ etc.
Caso o dia da semana seja 4, após a avaliação dos case 0, 1, 2 e 3, o case da li-
nha14 será satisfeito e as instruções das linhas 15 e 16 serão executadas. Observe o
uso do break após cada case. O break economiza muito tempo de execução porque
ele "ignora" a execução de todo o resto do código no bloco switch.
No exemplo anterior, não usamos o default, que é o comando usado para exe-
cutar o código quando nenhum case é executado. Eis um exemplo simples:
Veja que o exemplo apenas trata os valores “6” e “0”. Caso o dia da semana
seja “Quarta”, o default é que será executado e mostrará a mensagem: “Esperando
pelo fim de semana”. Um detalhe importante e que normalmente não encontra-
mos nos materiais e tutoriais que encontramos na internet, é que o default não
precisa ser necessariamente o último comando de um bloco switch. No exemplo
anterior, ele poderia estar localizado na linha 2 no lugar do “case 6”.
Para finalizar, o último exemplo também é “esquecido” pelos programadores
em geral. Trata-se de usar vários case para executar os mesmos comandos. Observe
o exemplo a seguir, especialmente as linhas 2-3 e 6-7.
capítulo 1 • 26
1. switch (new Date().getDay()) {
2. case 4:
3. case 5:
4. msg = "O fim de semana está chegando";
5. break;
6. case 0:
7. case 6:
8. msg = "Fim de semana chegou!";
9. break;
10. default:
11. msg = "Esperando o fim de semana";
12. }
Estruturas de repetição
O while
1. var contador = 0;
2. while (i < 10) {
3. msg += "O número é " + i;
4. i++;
5. }
capítulo 1 • 27
Uma variação do while é o do-while. Esta variação permite que o loop seja exe-
cutado pelo menos uma vez para que no final do bloco a condição seja avaliada.
Veja o exemplo a seguir. Ele fará 10 repetições assim como o exemplo do while,
certo? Lembre-se sempre de incrementar a variável de controle do loop.
1. var contador = 1;
2. do {
3. Console.log("Contador: " + contador);
4. contador++;
5. } while (contador < 11);
O for
1. <script>
2. var contador;
3. document.write("Iniciando o Loop" + "<br />");
4. for(contador = 0; contador < 10; contador++){
5. document.write("Contador: " + contador );
6. document.write("<br />");
7. }
8. document.write("Loop finalizado!");
9. </script>
capítulo 1 • 28
Existe uma variação muito útil do for. Em Javascript é o comando for-in mas
em outras linguagens ele é conhecido como foreach. Ele é usado quando uma
coleção de termos de um objeto precisa ser percorrida. Ele é muito usado quando
usamos vetores (arrays) e precisamos percorrer o vetor e processar elemento por
elemento. Veja o exemplo:
1. <!DOCTYPE html>
2. <html>
3. <body>
4. <button onclick="funcaoX()">Clique aqui</button>
5. <p id="teste"></p>
6. <script>
7. function funcaoX() {
8. var pessoa = {nome:"Joao", sobrenome:"Neve", idade:25};
9. var msg = "";
10. var x;
11. for (x in pessoa) {
12. msg += pessoa[x] + " ";
13. }
14. document.getElementById("teste").innerHTML = msg;
15. }
16. </script>
17. </body>
18. </html>
capítulo 1 • 29
Embora o visual do resultado seja muito simples, o programa percorreu o
vetor pessoa e com o uso do for na linha 11, imprimiu na tela todos os valores de
pessoa: “Joao”, “Neve” e “25”.
Vetor (Array)
Os vetores em Javascript também são bem parecidos com os vetores que você
já deve conhecer de outras linguagens. Lembre-se que os vetores são estruturas de
dados que armazenam valores, todos do mesmo tipo, ao mesmo tempo e cujos
valores são acessados por meio de um índice normalmente numérico.
CONCEITO
Em algumas linguagens existe o conceito de vetor associativo, no qual os índices não
são necessariamente numéricos podendo ser letras ou outras formas. Veja o exemplo em
PHP a seguir.
1.<?php
2.$doc = array();
3.$doc['rg'] = "00.000.000-X";
4.$doc['cpf'] = "000.000.000-00";
5.$doc['cartao de credito'] = 12345;
6.?>
É super simples! Para criar um vetor com nome vet sem nenhum elemento,
faça assim:
capítulo 1 • 30
0 1 2 3 4
vet
Figura 1.8 – Representação gráfica do vetor vet com 5 posições, porém sem valores.
Acesso a elementos
O acesso aos elementos de um vetor é feito por meio dos seus índices.
Para colocar valores no vetor vet criado no último exemplo, existem várias
formas. Uma delas é acessar as posições do vetor para inserir os valores que de-
sejamos. Veja o próximo exemplo onde para cada posição do vetor foi inserido
um valor.
vet[0] = 1;
vet[1] = 1; 0 1 2 3 4
vet[2] = 2; vet 1 1 2 3 5
vet[3] = 3;
vet[4] = 5;
Removendo elementos
Por incrível que pareça, remover elementos de um vetor não é uma tarefa
trivial quanto parece. A linguagem Javascript fornece algumas formas para esta
tarefa.
Uma das formas é usar uma função encontrada em outras linguagens chamada
pop() a qual remove e nos devolve o último elemento de um vetor. Vamos usar o
vetor vet definido anteriormente como exemplo.
1. var vet=[1,1,2,3,5];
2. var elem = vet.pop();
capítulo 1 • 31
Perceba que inicializamos o vetor vet de uma maneira diferente da qual está-
vamos fazendo até então na linha 1.
A linha 2 contém uma variável elem que vai receber o valor 5 devido ao uso
da função pop(). Após a execução desta função, o vetor vet conterá os elementos
[1,1,2,3]. Lembre-se que a função pop() retira o último elemento do vetor. Mas e
se quisermos remover o primeiro? Usaríamos a função shift(). Observe o exemplo:
REFLEXÃO
Procure associar o nome das funções com o seu propósito:
pop(): é uma tradução para desempilhar, ou seja, numa estrutura de dados pilha, sempre
o último elemento será retirado.
shift(): é o mesmo que deslocar. Se um elemento será retirado da primeira posição, os
outros seguintes serão deslocados para que o vetor mantenha os índices.
capítulo 1 • 32
splice(): é o mesmo que cortar. Neste caso, o corte pode ser feito dentro de um vetor em
uma determinada posição.
Por enquanto vamos dar uma pausa na sintaxe e funções do Javascript e va-
mos aprender sobre um conceito muito importante da programação para internet
atual, o JSON.
Criação de variáveis
capítulo 1 • 33
Veja a criação de outro objeto:
Acesso a um elemento
capítulo 1 • 34
Muitas vezes, a forma de apresentar um objeto JSON obedece ao seguinte formato para
ficar mais legível:
{
"logradouro": "Rua Abrahão Issa Halach",
"número": "980",
"bairro": "Ribeirânia",
"cidade": "Ribeirão Preto",
"estado": "SP",
"cep": "14096-160"
}
CONEXÃO
É sempre importante verificar se o formato JSON que está sendo enviado ou recebido
está no formato correto. Existem vários verificadores na internet disponíveis e gratuitos. Um
deles é o JSONLint <https://jsonlint.com>. Se o formato de envio ou recebimento estiverem
incorretos, o Javascript gerará um erro de sintaxe.
Vamos a um exemplo:
capítulo 1 • 35
Convertendo um JSON para um formato objeto
Por enquanto para o capítulo inicial está bom. Vamos voltar a estes assuntos
de uma maneira mais aplicada posteriormente.
ATIVIDADES
01. Qual é a sintaxe correta para chamar uma referência a um script externo chamado
"xxx.js"?
04. Qual é o jeito correto de escrever uma condição no qual “i não seja igual a 10” ?
a) if (i != 10)
b) if (i <> 10)
c) if i =! 10 then
d) if i <> 10
capítulo 1 • 36
05. Crie um botão em html que ao ser clicado, chama uma função em JavaScript que abre
uma janela com a mensagem "Olá mundo". O código em Javascript deverá ser criado em um
arquivo externo. No arquivo em JavaScript, insira o seguinte comentário:
"Função criada em um arquivo externo que mostra uma mensagem".
REFERÊNCIAS BIBLIOGRÁFICAS
DEITEL, P. J. Ajax: Rich Internet Applications e desenvolvimento Web para. São Paulo: Pearson, 2008.
LAWSON, B. Introdução ao HTML 5. Rio de Janeiro: Alta Books, 2011.
SILVA, M. S. JavaScript - Guia do Programador. São Paulo: Novatec, 2010.
W3SCHOOLS. Javascript Tutorial. W3Schools. Disponivel em: <https://www.w3schools.com/js/
default.asp>. Acesso em: 01 jun. 2017.
capítulo 1 • 37
capítulo 1 • 38
2
Biblioteca JQuery
Biblioteca JQuery
O desenvolvimento de software para web é marcado por uma característica pe-
culiar: é desejável que o programador saiba HTML, CSS e Javascript, pelo menos.
E conforme o número de projetos aumenta, bem como a experiência e o uso, é
natural que o programador comece a colecionar conjuntos ou pedaços de códigos
que são reutilizados em outros projetos.
Algumas empresas entendem esta característica e acabam criando bibliote-
cas úteis para os desenvolvedores. Algumas bibliotecas se tornam mais robustas
e consistentes, além de ser usada por grandes empresas e aí acabam se tornando
referência para os desenvolvedores.
Esta é basicamente a história, muito breve, do Jquery, criada em 2006 e mui-
to usada até hoje. Segundo a wikipedia, 77% dos 10000 sites mais usados no
mundo usam a biblioteca. É um número bem expressivo e certamente você não
pode deixar de aprendê-la, pois certamente vai trabalhar em um projeto que usa o
(ou “a”) Jquery. Vamos estudar um pouco dela neste capítulo.
OBJETIVOS
• Conhecer os principais tópicos da biblioteca Jquery;
• Aprender a incluir a biblioteca nos sites que você desenvolverá;
• Aprender a usar os seletores e eventos da biblioteca.
JQuery
A linguagem Javascript tem sido usada cada vez mais para deixar as aplicações
web mais interativas e amigáveis para o usuário.
No facebook por exemplo, quando a gente curte um post, vemos que imedia-
tamente temos uma indicação que houve a curtida. Isso é muito natural e nem
damos conta da tecnologia que está por trás disso. Há alguns anos isso não era
feito tão interativamente assim.
Na nossa vida de programador e engenheiro de software, ao longo do tempo
vamos criando componentes de software reutilizáveis, isto é natural e muito prati-
cado nas empresas.
capítulo 2 • 40
Com o JQuery ocorreu o mesmo. O JQuery, ou "a" JQuery, é uma biblioteca
escrita em Javascript cheia de componentes reutilizáveis que vão deixar nossas apli-
cações web mais fáceis de serem desenvolvidas e mais produtivas. Ela foi criada em
2006 e tinha um slogan muito apropriado: "Write less, do more" (Escreva menos,
faça mais).
A JQuery simplifica muitas coisas como animações, tratamento de eventos e
interações Ajax para o desenvolvimento rápido de aplicações web.
A seguir estão listadas as características mais importantes da biblioteca:
• Manipulação do DOM: JQuery manipula facilmente os elementos DOM
por meio da modificação dos seus valores, usando um "motor" chamado Sizzle.
JQuery facilita;
• Encontra elementos dentro de um documento html;
• Mudar os elementos html;
• "Escutar" o que o usuário faz e reagir a essas ações de acordo com o que
foi feito;
• Animar o conteúdo de uma página;
• Comunicar com o servidor para receber conteúdo;
• Tratamento de eventos: com as funções pré-definidas em JQuery, o tra-
tamento de eventos como clique do mouse fica facilitado, pois não é necessário
mexer no código HTML com os manipuladores de eventos;
• Suporte a AJAX;
• Animações: JQuery tem várias funções e efeitos específicos para criar ani-
mações e interatividades nos sites;
• É leve: quando incluída na página, JQuery vai ocupar cerca de 19Kb na sua
versão minimizada;
• É independente de browser: JQuery tem suporte em vários browsers como
IE 6.0+, FF 2.0+, Safari 3.0+, Chrome e Opera 9.0+;
• Tecnologia: JQuery usa os seletores de CSS3 e sintaxe XPath.
Instalação
capítulo 2 • 41
A instalação local é feita por meio do download de alguns arquivos onde é
possível inclui-los na instalação local do site. Você já deve ter uma noção da di-
ferença entre incluir bibliotecas locais e importá-las de um local externo. Instalar
localmente permite que seu site possa funcionar independente de um local exter-
no o qual pode estar offline. Por exemplo, em alguns ambientes empresariais, pode
existir uma intranet na qual não seja possível o acesso à web externa. Neste caso,
se a intranet for usar os recursos da JQuery, a única alternativa é ter os arquivos da
JQuery no próprio servidor, localmente.
Para fazer a instalação da JQuery localmente, é necessário fazer o download da
biblioteca do site da JQuery pelo link <http://jquery.com/download/>.
A figura 2.1 mostra uma sugestão para estruturar os diretórios de um site. A
organização dos diretórios de um site varia de acordo com diversos fatores: orga-
nizacionais, devido ao framework, preferências pessoais etc. A estrutura da figura
reserva um diretório para os arquivos javascript (js) e dentro dele separa um dire-
tório exclusivo para o Jquery. Este, portanto, é um exemplo de importação local
dos arquivos.
Versões do JQuery
capítulo 2 • 42
Além de fazer o download normal do JQuery é possível fazer usando alguns ge-
renciadores de pacotes como o NPM ou o Bower. Estes gerenciadores de pacotes
pertencem a outras tecnologias as quais não vamos abordar aqui.
• Versão baseada em CDN (Content Delivery Network - Rede de Entrega
de Conteúdos): a JQuery nesta forma é incluída externamente por meio de uma
URL. Existem algumas vantagens ao usar um CDN;
• Download feito em paralelo;
• O navegador pode já ter o arquivo em cache (se o usuário esteve em outro
site que utiliza o mesmo CDN);
• Não irá consumir o trafego do seu servidor;
• CDN’s como do Google, Microsoft e Amazon, costumam ter ótima latên-
cia e taxa de transferência;
• CDN’s grandes tem menos chance de ser infectados com malwares;
Portanto, agora você tem uma escolha a fazer no seu projeto: local ou remoto.
Essa decisão vai depender do projeto, de onde o site ficará armazenado, da latên-
cia, de cache e outros elementos que você julgar relevante.
Seletores
O Jquery usa muito bem os seletores de CSS para também acessar os elemen-
tos DOM de um documento, de uma maneira fácil e rápida.
A principal regra é usar a função jQuery() ou também conhecida como $()
(esta é a forma que você vai encontrar na grande maioria das pesquisas que você
fizer na internet e é também a maneira preferida para usarmos Jquery). O $() é a
maneira resumida de usar a função.
capítulo 2 • 43
Temos algumas formas de selecionar os elementos do DOM em Jquery:
capítulo 2 • 44
O código fonte da figura 2.2 está mostrado a seguir.
3. <!DOCTYPE HTML>
4. <html>
5. <head>
6. <meta http-equiv="Content-Type" content="text/html;
charset=UTF-8" />
7. <link rel="stylesheet" href="estilos.css">
8. <script src="https://ajax.googleapis.com/ajax/libs/
jquery/3.2.1/jquery.min.js"></script>
9. <title>Testando</title>
10. </head>
11. <body>
12. <div id="anuncios">
13. <h1>Produtos</h1>
14. <ul>
15. <li class="produto">
16. <img src="aero1.png">
17. <h2>Cherokee</h2>
18. <span class="preco">$20.00</span>
19. <button class="reserva">Reservar</button>
20. </li>
21. <li class="produto">
22. <img src="aero2.png">
23. <h2>Ipanema</h2>
24. <span class="preco">$25.00</span>
25. <button class="reserva">Reservar</button>
26. </li>
27. <li class="produto">
28. <img src="aero3.png">
29. <h2>AT-6</h2>
30. <span class="preco">$15.00</span>
31. <button class="reserva">Reservar</button>
32. </li>
33. </ul>
34. </div>
35. </body>
36. </html>
capítulo 2 • 45
Percebemos que na linha 6 optamos por incluir o arquivo do Jquery por meio
de um CDN, neste caso hospedado nos servidores da Google. Sem esta inclusão
não será possível usar o Jquery. Não esqueça que podemos também inserir o ar-
quivo do Jquery localmente.
Também temos um arquivo CSS referenciado na linha 5 (estilos.css). O códi-
go deste arquivo está mostrado a seguir.
1. li.produto {
2. width: 250px;
3. display: inline-block;
4. vertical-align: top;
5. }
6.
7. .reserva {
8. display: block;
9. }
Com o arquivo CSS, conseguimos fazer com que a lista não ordenada (<ul>)
e seus itens (<li>) sejam apresentados horizontalmente, além de outras formata-
ções básicas.
Neste ponto, poderíamos começar a usar os seletores. Porém, é muito impor-
tante que o programador conheça, além do HTML e CSS, a estrutura DOM da
página. Fica mais fácil selecionar os elementos com o conhecimento do DOM.
capítulo 2 • 46
Figura 2.3 – DOM da página exemplo.
$(“li”).text(“Aeromodelo”);
Este comando vai gerar um pequeno “estrago” na sua página! Porém vai ser
útil para nos mostrar que tudo o que estiver abaixo dos elementos <li> na árvore
DOM, receberá um texto contendo “Aeromodelo”. O resultado é mostrado na
figura 2.4. Veja que a imagem <img>, título <h2>, span e o botão <button> que
havia antes foram substituídos pelo texto puro “Aeromodelo”.
capítulo 2 • 47
Figura 2.4 – Aplicação da função text().
• Ao digitar $(“.produto”):
Vamos ter na prática o mesmo resultado que a seleção anterior, veja a figura 2.5.
Porém, neste caso, não estamos selecionando os elementos <li> e sim todos
aqueles que estão formatados com a classe “produto”. Esta classe está definida no
arquivo CSS importado.
• Ao digitar $(“#anuncios”)
capítulo 2 • 48
Métodos e eventos
Os eventos permitem que páginas dinâmicas sejam criadas e ações possam ser
detectadas pela aplicação que você estiver construindo.
Eis alguns exemplos de eventos:
• Clique do mouse;
• Carregamento da página web;
• Passar com o mouse sobre um elemento;
• Fazer o submit de um form;
• Teclar ou digitar uma determinada tecla.
Quando um destes eventos é disparado (ou outros que não listamos aqui),
uma função que podemos definir pode tratar o evento. Estas funções são chama-
das de tratadoras de eventos.
Veja um exemplo. O método ready() tem uma função de tratamento de evento
como argumento:
$(document).ready({ function(){
//excuta quando o DOM foi carregado
});
capítulo 2 • 49
Como se faz isso? Já temos uma ideia: Primeiro, temos que esperar o DOM
carregar completamente:
$(document).ready(function(){
});
$('button').on('click',function(){
//executa o código da função
});
Lembre-se que neste caso, do jeito que estamos selecionado o elemento, to-
dos os “button” serão selecionados. Portanto, tome cuidado. Vamos ver o que
vai acontecer. Verifique novamente a figura 2.2 para lembrar da página no seu
estado inicial.
Agora, pense no que vai ser feito:
1. O usuário clica no botão do produto escolhido;
2. O botão “Reservar” desaparece e no lugar dele aparece o texto
“Reservado!”.
Temos alguns detalhes aqui. Em primeiro lugar temos que saber quais são os
métodos Jquery que fazem o botão desaparecer e o texto desejado, aparecer.
Assim como qualquer biblioteca para programação, o Jquery oferece uma api con-
tendo uma lista de métodos pré-definidos. Você pode encontrar esta lista em
<https://api.jquery.com/>.
capítulo 2 • 50
$('button').on('click',function(){
var txt = $("<p>Reservado!</p>");
$('.produto').append(txt);
$('button').remove();
});
O resultado será:
Embora esteja errado, já sabíamos que todos os “button” seriam afetados, não é?
Precisamos de algum mecanismo para selecionar apenas o elemento que desejamos,
ou seja, dentro do DOM, este determinado elemento. Para isso, usamos o this.
O this vai nos ajudar removendo apenas o botão que foi clicado. Vamos checar
“isto” na figura 2.8. Observe a alteração que terá no código:
$(document).ready(function(){
$('button').on('click',function(){
var txt = $("<p>Reservado!</p>");
$('.produto').append(txt);
$(this).remove();
});
});
capítulo 2 • 51
E o resultado será:
Deu certo. Só que não! Todos os outros botões agora também contém o texto
“Reservado!”. E não queremos isto. Para isto, temos que entender outro conceito
do Jquery chamado “travessia” ou no original “DOM Traversing”.
Esta travessia que estamos falando consiste em encontrar, com o uso do méto-
do find(), os elementos que são desejados para executar alguma ação, baseado na
sua relação com outros elementos. A travessia inicia com uma seleção e se movi-
menta até chegar aos elementos desejados.
Vamos supor que temos a seguinte hierarquia DOM de um determina-
do documento:
Como o nome sugere, com a travessia, a partir de um determinado elemento,
podemos encontrar o elemento desejado subindo na hierarquia (em direção aos
pais – ancestors), descendo (descendants) ou procurando de lado (siblings)
capítulo 2 • 52
<body>
<li>
<li>
<li>
<body>
$(“li”).first(); <li>
<li>
<li>
capítulo 2 • 53
<body>
$(“li”).first();
<li>
$(“li”).first().next();
<li>
<li>
<body>
<li>
<body>
$(“li”).first(); <li>
<li>
<li>
capítulo 2 • 54
<body>
$(“li”).first();
<li>
$(“li”).first().parent();
<li>
<li>
Agora que vimos como “subir” na hierarquia, vamos ver como fazemos para
“descer”. Vamos supor que o elemento <ul> tenha um id específico:
<body>
$(“#teste”).children(“li”); <li>
<li>
<li>
O children somente seleciona os filhos diretos.
$(document).ready(function(){
$('button').on('click',function(){
var txt = $("<p>Reservado!</p>");
$('.produto').append(txt);
$(this).remove();
});
});
capítulo 2 • 55
Vamos fazer a inserção da travessia no DOM para posicionar corretamente o
texto “Reservado!” sobre o botão no qual foi acionado o evento click(). Observe
o código:
$(document).ready(function(){
$('button').on('click',function(){
var txt = $("<p>Reservado!</p>");
$(this).after(txt);
$(this).remove();
});
});
capítulo 2 • 56
Veja como ficaria o exemplo usando o closest():
$(document).ready(function(){
$('button').on('click',function(){
var txt = $("<p>Reservado!</p>");
$(this).closest('.produto').append(txt);
$(this).remove();
});
});
$(document).ready(function(){
$('button').on('click',function(){
var txt = $("<p>Reservado!</p>");
$(this).closest('.produto').append(txt);
$(this).remove();
});
});
E o HTML:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset
=UTF-8" />
<link rel="stylesheet" href="estilos.css">
<script src="https://ajax.googleapis.com/ajax/libs/
jquery/3.2.1/jquery.min.js"></script>
<script src="site.js"></script>
<title>Testando</title>
</head>
<body>
<div id="anuncios">
<h1>Produtos</h1>
capítulo 2 • 57
<ul>
<li class="produto">
<img src="aero1.png">
<h2>Cherokee</h2>
<span class="preco">$20.00</span>
<button class="reserva">Reservar</button>
</li>
<li class="produto">
<img src="aero2.png">
<h2>Ipanema</h2>
<span class="preco">$25.00</span>
<button class="reserva">Reservar</button>
</li>
<li class="produto">
<img src="aero3.png">
<h2>AT-6</h2>
<span class="preco">$15.00</span>
<button class="reserva">Reservar</button>
</li>
</ul>
</div>
</body>
</html>
Novamente salientamos que a página usada como exemplo está sem elemen-
tos gráficos mais interessantes e bonitos. Em uma aplicação real, o arquivo CSS do
exemplo seria muito mais elaborado e cheio de recursos para fazer a página ficar
mais bonita.
Veja na figura 2.11 como uma pequena aplicação da biblioteca Bootstrap
(http://www.getbootstrap.com) pode já dar uma nova “cara” para a página.
Perceba que o código Jquery que desenvolvemos durante este capítulo ainda fun-
ciona normalmente.
capítulo 2 • 58
Figura 2.11 – Aplicação da biblioteca Bootstrap.
ATIVIDADES
A seguir propomos alguns exercícios para você testar os seus conhecimentos.
Estão corretas:
a) Somente I d) Somente I e III
b) Somente II e) Somente II e III
c) Somente III
capítulo 2 • 59
03. O que o comando $(“div”) seleciona dentro de um documento HTML?
a) Todos os elementos “div” d) Todas as tags com nome “div”
b) O primeiro elemento “div” e) O último elemento “div”
c) Todos as tags com classe “div”
05. Qual é o código escrito com Jquery correto para alterar a cor de fundo de todos os pa-
rágrafos de um documento HTML para vermelho?
a) $(“p”).css(“background-color”,”red”)
b) $(“p”).manipulate(“background-color”,”red”)
c) $(“p”).layout(“background-color”,”red”)
d) $(“p”).style(“background-color”,”red”)
e) $(“p”).css(“background-color:red”)
REFERÊNCIAS BIBLIOGRÁFICAS
DEITEL Paul, J. Ajax, Rich Internet Applications e desenvolvimento Web para programadores . São
Paulo: Pearson, 2008. Série do desenvolvedor.
DALL`OGLIO, Pablo. PHP: Programando com orientação a objetos. 2 ed. São Paulo: Novatec, 2009.
LAWSON, Bruce. Introdução ao HTML 5. Rio de Janeiro, RJ: Alta Books, 2011.
capítulo 2 • 60
3
Formulários em
HTML5 com PHP
Formulários em HTML5 com PHP
Entre as linguagens de programação usadas na internet do lado do servidor,
sem dúvida, e sem fazer muitas pesquisas, vamos encontrar a linguagem PHP
sendo a campeã de utilização pelos desenvolvedores.
Sites como o Facebook, Yahoo!, Wikipedia, Flickr e outros tem como prin-
cipal linguagem de desenvolvimento a linguagem PHP e isto é muito expressivo.
Principalmente para contradizer várias opiniões que existem na internet a respeito
de tecnologias mais tradicionais como Microsoft e .Net, Java, Python, entre ou-
tras. É claro, são excelentes plataformas, sem dúvida, mas o PHP ainda assim não
deixa a desejar frente a essas linguagens e é muito utilizado até hoje.
Além disso, grandes CMS (Content Management Systems – Sistemas geren-
ciadores de conteúdo) são desenvolvidos com base no PHP como por exemplo o
Wordpress, o Joomla, Drupal, entre outros. A linguagem também tornou possível
o aparecimento de importantes frameworks de desenvolvimento como o CakePHP,
Yii, Laravel e outros. Ou seja, a linguagem continua viva e forte e é sobre ela que
vamos tratar neste capítulo. Aproveite.
Neste capítulo vamos estudar a linguagem PHP e ver na prática o quanto ela
é simples de ser aprendida e aplicada. Vamos começar aprendendo a criar formu-
lários em HTML5 e depois aplica-los na linguagem PHP. Vamos lá?
OBJETIVOS
• Criar formulários em HTML5;
• Compreender as estruturas de programação em PHP;
• Manipular os dados vindos de formulários em HTML5 na linguagem PHP.
Formulários HTML5
capítulo 3 • 62
Um formulário vai pegar os dados que o usuário digitar e manda-los para
uma aplicação que fica em um servidor para que estes dados sejam processados
por alguma linguagem residente no servidor, como PHP, ASP, Python, CGI, para
alguma finalidade (cadastro, atualização de dados, etc.). O processamento é reali-
zado mediante as regras de negócio definidas para a aplicação.
Vamos aprender que existem vários elementos que podem ser colocados em
um formulário como caixas de texto, campos de texto longo, menus, botões de
rádio, listas etc..
ATENÇÃO
Se você for procurar e estudar pela internet outros exemplos de controles para for-
mulários, lembre-se que existem versões do HTML. Muitas referências do HTML vão estar
na versão 4 sendo que a mais atual, desde 2010 e compatível com os navegadores mais
modernos, é a versão 5 e cheia de novidades em relação à anterior. Procure ler materiais
sobre a versão 5! E lembre-se que o navegador tem que suportar esta versão do HTML caso
contrário a página não será montada corretamente. A página seguinte mostra uma lista dos
elementos de formulário que foram introduzidos no HTML5: <https://www.w3schools.com/
html/html5_new_elements.asp>.
Para criar um formulário, temos que usar a tag form. Veja a seguir um exemplo
usando HTML5.
<!DOCTYPE html>
<html>
<body>
<form method="post" action="">
<label for="nome">Nome:</label>
<input type="text" name="nome" id="nome" >
<br><br>
<label for="nome">Senha do site:</label>
<input type="password" name="nome" id="nome" >
<br><br>
<label for="datanasc">Data de nascimento:</label>
<input type="date" name="datanasc" id="datanasc" >
capítulo 3 • 63
<br><br>
<label for="experiencia">Tempo de experiência:</label>
<input type="number" name="experiencia" id="experiencia" >
<br><br>
<label for="email'">E-mail:</label>
<input type="email" name="email" id="email">
<br><br>
<label for="site">Site:</label>
<input type="url" name="site" id="site">
<br><br>
<label for="telefone">Telefone:</label>
<input type="tel" name="telefone" id="telefone">
<br><br>
<label for="cidade">Cidade:</label>
<input type="text" name="cidade" id="cidade">
<br><br>
<label for="uf">Estado:</label>
<select name="estado" id="uf">
<option value="ES">Espírito Santo</option>
<option value="MG">Minas Gerais</option>
<option value="RJ">Rio de Janeiro</option>
<option value="SP">São Paulo</option>
</select>
<br><br>
<label for="sexo">Sexo:</label>
<input type="radio" id="sexo" name="gender"
value="female">Feminino
<input type="radio" id="sexo" name="gender"
value="male">Masculino
<br><br>
<label for="comentario">Mensagem</label>
<textarea cols="40" rows="5" id="comentario"
name="msg"></textarea>
<input type="hidden" id="idusuario" name="idusuario"
value="id#001">
<br><br>
capítulo 3 • 64
<input type="submit" name="submit" value="Enviar">
</form>
</body>
</html>
Este código vai gerar o formulário da Figura 3.1. Não está muito bonito mas
se aplicarmos um estilo ou uma biblioteca de front-end como o Bootstrap, aí fica
legal. Na figura também são mostrados os efeitos que o próprio HTML5 fornece.
Nas versões anteriores do HTML, mensagens de validação de campo como “Insira
uma URL” para o campo texto do tipo “url” e o pop-up de data, não eram mos-
tradas a não ser com o uso de javascript.
Assim como qualquer tag em HTML, a tag form tem atributos que a comple-
mentam. No caso do nosso exemplo, temos 2 atributos: o method e o post. A tabela
mostra outros atributos e suas descrições:
capítulo 3 • 65
ATRIBUTO DESCRIÇÃO
Aponta para o script no servidor (back-end) o qual vai processar os
ACTION dados do formulário
• Checkboxes
<input type=”checkbox”>
• Radio boxes
<input type=”radio”>
capítulo 3 • 66
• Select (listas)
<select>
<option>
• Botões
<input type=”button”>
CONEXÃO
Na tabela 3.1 vimos que a tag <form> possui atributos específicos. Assim como o
<form>, cada um dos controles apresentados também possui uma lista de atributos es-
pecífica e bem variada. É interessante que você consulte o site W3Schools.com e leia a
parte específica dos atributos dos controles de entrada. O link para este site é https://www.
w3schools.com/html/html_form_attributes.asp. O site está em inglês e é interessante que
você se esforce para ler neste idioma e se acostumar com a leitura técnica. Neste link você
encontrará vários exemplos dos atributos dos controles de entrada.
De acordo com o que você pode pesquisar no link indicado, os atributos exis-
tentes em HTML5 são:
• autocomplete;
• autofocus;
• form;
• formaction;
• formenctype;
• formmethod;
• formnovalidate;
• formtarget;
• height e width;
capítulo 3 • 67
• list;
• min e max;
• multiple;
• pattern (regexp);
• placeholder;
• required;
• step.
A linguagem PHP
Você já deve ter alguma experiência com programação e já deve ter sacado
como as linguagens estruturadas funcionam, suas estruturas e sua sintaxe. Você vai
perceber que PHP não é muito diferente. O detalhe é que ela é uma linguagem
essencialmente de script, e que roda em um servidor, como back-end.
Portanto, nosso objetivo aqui não é explicar novamente o que são variáveis,
como são as estruturas de programação (sequencial, decisão e repetição), funções,
arrays etc. Temos certeza que você já sabe muito bem este conteúdo. Caso não
se recorde, sugerimos que estude algoritmos e lógica de programação, conteúdo
normalmente visto no início do curso.
Nosso objetivo aqui é mostrar como esses elementos são feitos em PHP. Temos
certeza que baseado na sua experiência e conhecimento dos fundamentos de pro-
gramação você terá um bom aproveitamento agora em PHP. Vamos lá!
Antes de mais nada, lembre-se que PHP é uma linguagem de script e precisa-
mos de uma forma de separar o código PHP do código HTML em uma página.
Portanto, é possível criar um arquivo HTML e ter código PHP “misturado” ao
código HTML. Mas para isso, precisamos marcar esta separação e isto é feito pelos
marcadores <?php e ?>. Veja um exemplo:
capítulo 3 • 68
<html>
<head>
<title>Testando</title>
</head>
<body>
<?php
echo "<h1>Olá mundo PHP!</h1>";
?>
</body>
</html>
Tenha o cuidado de sempre fechar o <?php com ?>. Naturalmente, tudo que
estiver dentro destes marcadores serão interpretados como código PHP e o servi-
dor procurará executá-los.
Vamos agora ver alguns assuntos mais específicos da linguagem.
• Todas as variáveis em PHP são representadas usando um $ na frente do seu
nome. Por exemplo $nome;
• Embora seja possível, não é necessário declarar variáveis antes do seu uso
em PHP;
• As variáveis em PHP não tem um tipo intrínseco, ou seja, a variável não
sabe qual é o seu tipo antecipadamente: ela não sabe se vai guardar um inteiro ou
uma string por exemplo;
• PHP converte o tipo automaticamente de acordo com o uso da variável;
• Os nomes das variáveis podem começar com uma letra ou com o unders-
core “_”;
• Podemos ter números, letras, underscores no meio do nome da variável.
Outros caracteres não são permitidos.
Em PHP existem oito tipos de dados que são usados para construir variáveis:
• Inteiros (integer);
• Ponto flutuante (double);
• Booleanas;
• NULL;
• Strings;
• Arrays;
• Objetos;
• Recursos (resources): são variáveis especiais que guardam referências a recur-
sos externos ao PHP.
capítulo 3 • 69
Operadores
Aritméticos
- Subtração $a - $b = -10
* Multiplicação $a * $b = 200
/ Divisão $b / $a = 2
Atribuição
capítulo 3 • 70
Operadores de incremento/decremento
Lógicos
capítulo 3 • 71
CONEXÃO
Para entender mais sobre estes métodos, e outros, é legal você dar uma olhada no
protocolo HTTP. Um bom início de estudo é a Wikipedia: <https://pt.wikipedia.org/wiki/
Hypertext_Transfer_Protocol>. Neste link tem uma seção chamada “Métodos de Solicitação”
a qual vai te ajudar nos detalhes destes métodos.
Para resumir, antes do navegador enviar a informação para o servidor, ele co-
difica a informação em um esquema chamado “URL encoding”. Neste esquema,
os pares nome/valor são enviados da seguinte forma:
nome1=valor1&nome2=valor2&nome3=valor3
Ou seja, temos que criar uma lista de pares nome/valor usando o “=” e se-
parados por “&”. Os espaços são removidos e substituídos com o caractere “+” e
qualquer outro caractere não alfanumérico é substituído por valores hexadecimais.
Depois a informação é codificada e enviada para o servidor.
O método GET
http://www.seilá.com.br/index.html?nome1=valor1&nome2=valor2&nome3=valor3
capítulo 3 • 72
Há um detalhe muito importante a respeito deste método: ele produz uma
string que aparece nos logs do servidor. Esta string pode ter até 1024 caracteres e
o detalhe reside na privacidade dos dados a serem enviados pois eles ficarão explí-
citos na URL, logo, enviar usuário e senha ou dados sigilosos não é aconselhável.
O método GET não pode ser usado para enviar dados binários, como imagens
ou por exemplo uma planilha do Excel. Os dados enviados pelo método GET
podem ser acessados usando a variável QUERY_STRING. No PHP existe uma
variável superglobal implementada no array $_GET[] para acessar os dados envia-
dos por GET. Veja um exemplo:
<?php
if( $_GET["nome"] || $_GET["idade"] ) {
echo "Olá ". $_GET['nome']. "<br />";
echo "Você tem ". $_GET['idade']. " anos.";
exit();
}
?>
<html>
<body>
<form action = "exemplo.php" method = "GET">
Nome: <input type = "text" name = "t_nome" />
Idade: <input type = "text" name = "t_idade" />
<input type = "submit" />
</form>
</body>
</html>
capítulo 3 • 73
Figura 3.2 – Exemplo do GET.
Vamos dar uma olhada com um pouco mais de detalhes no que está aconte-
cendo aqui. Observe a figura 3.3.
1. De um lado temos o cliente, representado pelo navegador do usuário.
No navegador temos um arquivo exemplo.php o qual contém um <form>
com 2 controles de texto o <input> com <name=”t_nome”> e o <input>
com <name=”t_idade”>.
2. Ao clicar no botão Enviar, o form é enviado (submit) para o recurso
localizado no servidor (action=”exemplo.php”). Neste caso, o recurso é o
próprio arquivo que estamos trabalhando. Poderíamos ter aqui um arquivo
localizado remotamente, em um servidor presente na internet. Portanto,
o action vai apontar para o script PHP do servidor o qual vai processar os
dados enviados. Neste caso, estamos mandando os dados por GET (metho-
d=”GET”) e assim os dados são enviados pela URL.
3. O servidor web recebe os dados, envia para o interpretador PHP o qual,
após processar os dados e ...
4. ... transformar os dados processados em uma página HTML que será a
resposta do processo e enviada para o cliente. Temos aqui então um clássico
exemplo de solicitação-resposta existente entre os servidores presentes na
internet.
capítulo 3 • 74
Figura 3.3 – Comunicação cliente-servidor em PHP.
O método POST
O método POST envia dados por meio dos cabeçalhos do protocolo HTTP. A
informação enviada é codificada como no método GET e pelo cabeçalho QUERY_
STRING é possível verificar os dados que foram enviados para o servidor.
Diferente do GET, o POST não possui limite no tamanho dos dados a se-
rem enviados. Além disso, é possível enviar dados em ASCII assim como dados
binários.
Os dados enviados pelo método POST passam pelo cabeçalho HTTP, de
modo que a segurança depende do protocolo HTTP. Ao usar o Secure HTTP,
você pode ter certeza de que suas informações são seguras. Estas informações são
pertinentes ao protocolo HTTP e portanto novamente recomendamos que você
leia o link sugerido para entender melhor este protocolo.
No caso do PHP, ele possui um array associativo chamado $_POST para aces-
sar todas as informações enviadas pelo POST. Agora que já vimos como funciona
o típico ciclo de vida de uma requisição PHP no servidor, vamos ver um exemplo
do POST:
capítulo 3 • 75
<?php
if( $_POST["t_nome"] || $_POST["t_idade"] ) {
if (preg_match("/[^A-Za-z'-]/",$_POST['t_nome'] )) {
die ("Nome invalido!");
}
echo "Bem-vindo ". $_POST['t_nome']. "<br />";
echo "Voce tem ". $_POST['idade']. " anos.";
exit();
}
?>
<html>
<body>
<form action = "exemplo2.php" method = "POST">
Nome: <input type = "text" name = "t_nome" />
Idade: <input type = "text" name = "t_idade" />
<input type = "submit" />
</form>
</body>
</html>
capítulo 3 • 76
A variável $_REQUEST
<?php
if( $_REQUEST["nome"] || $_REQUEST["idade"] ) {
echo "Oi ". $_REQUEST[nome]. "<br />";
echo "Voce tem ". $_REQUEST['age']. " anos de idade.";
exit();
}
?>
<html>
<body>
capítulo 3 • 77
Estruturas de decisão
if (condição)
bloco de comandos executados quando a condição é verdadeira;
else
bloco de comandos executados quando a condição é falsa;
elseif
if (condição)
bloco a ser executado quando a condição é verdadeira;
elseif (condição)
bloco a ser executado quando a condição é verdadeira;
else
bloco a ser executado quando a condição é falsa;
switch
switch (expressão){
case teste1:
bloco de código a ser executado se a expressão = teste1;
break;
case teste2:
bloco de código a ser executado se a expressão = teste2;
break;
default:
código a ser executado se a expressão é diferente de teste1
e teste2;
}
capítulo 3 • 78
Estruturas de repetição
While
while (condição) {
bloco de código a ser executado enquanto a condição é verdadeira;
}
Exemplo:
<?php
$i = 0;
$num = 50;
while($i < 10) {
$num--;
$i++;
}
echo ("O loop começou em i = $i e num = $num" );
?>
O resultado será:
O loop começou em i=10 e num=40
Do-While
do {
código a ser executado enquanto a condição é verdadeira;
}
while (condição);
Exemplo:
<?php
$i = 0;
$num = 0;
capítulo 3 • 79
do {
$i++;
}
while( $i < 10 );
echo ("O loop começou em i = $i" );
?>
O resultado será:
O loop começou em i = 10
For
Exemplo:
<?php
$a = 0;
$b = 0;
for($i = 0; $i<5; $i++) {
$a += 10;
$b += 5;
}
echo ("No final do loop a=$a e b=$b" );
?>
O resultado será:
No final do loop a=50 e b=25
Foreach
capítulo 3 • 80
Exemplo:
<?php
$array = array( 1, 2, 3, 4, 5);
foreach($array as $valor) {
echo "O valor é $valor <br />";
}
?>
O resultado é:
O valor é 1
O valor é 2
O valor é 3
O valor é 4
O valor é 5
Funções
Dica: Existem mais de 1000 funções pré-definidas em PHP. Para você ter uma ideia
e explora-las, acesse a Referência de Funções em PHP no link http://php.net/ma-
nual/pt_BR/funcref.php.
Vamos aprender a criar funções de uma maneira prática e direta. Suponha que
você queira criar uma função em PHP que apenas mostre uma mensagem na tela
do navegador do usuário. Veja o código a seguir:
capítulo 3 • 81
10. <html>
11. <head>
12. <title>Teste</title>
13. </head>
14. <body>
15. <?php
16. /* Criando a função */
17. function escreve() {
18. echo "É isso aí pe-pe-pe-pessoal!";
19. }
20.
21. /* Chamando a função */
22. escreve();
23. ?>
24. </body>
25. </html>
A função está definida nas linhas 9 a 10. A palavra chave function é obrigató-
ria para definir a função seguida de parênteses onde podemos ou não ter uma lista
de argumentos. O corpo da função deve ficar entre chaves “{“ e “}”.
A chamada da função ocorre na linha 13.
Veja que, de fato, não é muito diferente do que já conhecemos das outras
linguagens, o que muda basicamente é a sintaxe. Vamos ver outros exemplos. O
próximo exemplo mostra a definição da função soma() na linha 8 com dois argu-
mentos: $n1 e $n2.
Estes argumentos são passados na linha 14 onde ocorre a chamada. Como
você já deve saber, $n1=2 e $n2=3. Dentro da função os valores são substituídos
e o resultado da conta é armazenado na variável $soma, na linha 9. A chamada da
função ocorre na linha 14.
1. html>
2. <head>
3. <title>Teste</title>
4. </head>
capítulo 3 • 82
5. <body>
6. <?php
7. /* Função com argumentos */
8. function soma($n1, $n2) {
9. $soma = $n1 + $n2;
10. echo "A soma é $soma";
11. }
12.
13. /* Chamando a função */
14. soma(2,3);
15. ?>
16. </body>
17. </html>
Você deve saber que toda função deveria retornar um valor e deve ter per-
cebido que até agora não fizemos isto. Então você deve lembrar das suas aulas
básicas de programação que existem funções que não retornam valor chamadas
de procedimentos ou procedures. Logo, concluímos em PHP que é possível criar
procedimentos em PHP usando a mesma estrutura de uma função, ou seja, tanto
funções quanto procedimentos são criados por meio da palavra chave function e
demais regras.
Observe o código a seguir. Veja a linha 11 especialmente.
1. <html>
2. <head>
3. <title>Funções</title>
4. </head>
5. <body>
6. <?php
7. function soma($n1, $n2) {
8. $soma = $n1 + $n2;
9. return $soma;
10. }
11. $retorno = soma(10, 20);
12.
capítulo 3 • 83
13. echo "Valor retornado pela função: $retorno";
14. ?>
15. </body>
16. </html>
Está vendo como faz o retorno? Assim como outras linguagens de programação,
usamos a palavra chave return. A chamada da função é feita na linha 11 onde temos
uma variável chamada $retorno que vai guardar o valor retornado pela função.
O valor guardado na variável $retorno é usado na linha 13 onde uma mensa-
gem simples é mostrada na tela:
Passar uma variável por referência significa usar uma forma de trabalhar com
funções onde a variável usada na chamada da função será modificada dentro da
função. Ou seja, é diferente de uma cópia da variável como ocorre na passagem por
valor. Qualquer modificação na variável do argumento vai afetar o valor da variá-
vel original. Isto pode ser útil em alguns casos. Observe bem o próximo exemplo:
1. <html>
2. <head>
3. <title>Passagem de parâmetros por referência</title>
4. </head>
5. <body>
6. <?php
7. function soma5($num) {
8. $num += 5;
9. }
10.
11. function soma6(&$num) {
12. $num += 6;
13. }
capítulo 3 • 84
14.
15. $numero_original = 10;
16. soma5($numero_original);
17.
18. echo "O valor original é $numero_original <br />";
19.
20. soma6($numero_original);
21. echo "O valor original é $numero_original <br />";
22. ?>
23. </body>
24. </html>
Veja a linha 11. Percebeu o “&” na frente da variável? Temos aqui uma in-
dicação que o argumento $num da função será uma referência da variável
$numero_original da linha 20. Veja como fica a execução do código e perceba
como é a passagem de parâmetros por referência:
O valor original é 10
O valor original é 16
1. <html>
2. <head>
3. <title>Valor padrão</title>
capítulo 3 • 85
4. </head>
5. <body>
6. <?php
7. function escreve($par = NULL) {
8. print $par;
9. }
10. escreve("Isto é um teste");
11. escreve();
12. ?>
13. </body>
14. </html>
O resultado será:
Isto é um teste → (pois passou o parâmetro na linha 10)
____________ → (não vai escrever nada, pois não passamos o
parâmetro na linha 11)
Arrays
Assim como outros elementos vistos até agora da linguagem PHP, estamos
certos que você tem bons conhecimentos do conceito de arrays.
Em PHP, temos 3 diferentes tipos de arrays que podem ser usados:
• Arrays numéricos: onde o índice de cada posição é um número. Os valores
são armazenados e acessados de uma maneira linear;
• Arrays associativos: estes podem ser novos para você pois os índices podem
ser strings. Este tipo de array armazena valores de elementos em associação com
valores-chave em vez de em uma ordem de índice linear rígida como é feita no
array numérico;
• Arrays multimensionais: são as famosas matrizes.
capítulo 3 • 86
Arrays numéricos
O resultado será:
O valor é 1
O valor é 2
O valor é 3
O valor é 4
O valor é 5
O valor é um
O valor é dois
O valor é três
O valor é quatro
O valor é cinco
capítulo 3 • 87
Arrays associativos
1. <?php
2. /* Uma forma de criar o array. */
3. $salarios = array("pedro" => 2000, "tiago" => 1000, "joao"
=> 500);
4.
5. echo "O salario de Pedro é ". $salarios['pedro'] . "<br />";
6. echo "O salario de Tiago é ". $salarios['tiago']. "<br />";
7. echo "O salario de Joao é ". $salarios['joao']. "<br />";
8.
9. /* Outra forma de criar o array. */
10. $salarios['pedro'] = "alto";
11. $salarios['tiago'] = "medio";
12. $salarios['joao'] = "baixo";
13.
14. echo "O salario de Pedro é ". $salarios['pedro'] . "<br />";
15. echo "O salario de Tiago é ". $salarios['tiago']. "<br />";
16. echo "O salario de Joao é ". $salarios['joao']. "<br />";
17. ?>
capítulo 3 • 88
Figura 3.5 – Array associativo.
Arrays Multidimensionais
1. <?php
2. $notas = array(
3. "pedro" => array (
4. "fisica" => 8,
5. "matematica" => 7,
6. "quimica" => 9
7. ),
8.
9. "tiago" => array (
10. "fisica" => 6,
11. "matematica" => 9,
12. "quimica" => 8
13. ),
14.
15. "joao" => array (
16. "fisica" => 10,
17. "matematica" => 9,
18. "quimica" => 8
19. )
20. );
21.
capítulo 3 • 89
22. /* Acessando os valores na matriz */
23. echo "Notas de pedro em fisica : " ;
24. echo $notas['pedro']['fisica'] . "<br />";
25.
26. echo "Notas de tiago em matematica : ";
27. echo $notas['tiago']['matematica'] . "<br />";
28.
29. echo "Notas de joao em quimica : " ;
30. echo $notas['joao']['quimica'] . "<br />";
31. ?>
O resultado será:
Notas de pedro em fisica: 8
Notas de tiago em matematica : 9
Notas de joao em quimica : 8
ATIVIDADES
01. Como você obtém informações de um formulário que é submetido usando o método
"get"?
02. Ao usar o método POST, as variáveis são exibidas no URL (verdadeiro ou falso?)
capítulo 3 • 90
03. Como você escreve "Hello World" em PHP?
05. Como aprendemos a acessar os dados enviados por POST em um formulário HTML?
REFERÊNCIAS BIBLIOGRÁFICAS
DALL'OGLIO, P. PHP: Programando com orientação a objetos. 2 ed. São Paulo: Novatec, 2009.
DEITEL, P. Ajax: Rich Internet Applications e desenvolvimento web para programadores. São
Paulo: Pearson, 2008.
LAWSON, B. Introdução ao HTML5. Rio de Janeiro: Alta Books, 2011.
THE PHP GROUP. Documentation. Manual do PHP. Disponivel em: <https://secure.php.net/
manual/pt_BR/introduction.php>. Acesso em: 30 jul. 2017.
W3SCHOOLS. PHP 5 Tutorial. PHP Tutorial. Disponivel em: <https://www.w3schools.com/php/>.
Acesso em: 30 jul. 2017.
capítulo 3 • 91
capítulo 3 • 92
4
Programação
orientada a objetos
em PHP
Programação orientada a objetos em PHP
A orientação a objetos é um tema presente em várias linguagens de programa-
ção atuais. E saber usá-la corretamente faz com que o desenvolvedor e a equipe
que ele participa tenha ganhos de produtividade e reusabilidade muito grandes,
basta ter uma boa arquitetura de software.
A linguagem PHP é muito popular e como consequência várias iniciativas na
criação de frameworks existem como por exemplo o CakePHP, CodeIgniter, Zend
Framework, Laravel e outros. Todos eles dependem da orientação a objetos para
poderem ser produtivos.
Sabemos que você já deve ter aprendido os conceitos deste paradigma em
outras disciplinas e com outras linguagens e agora vamos aplicar o que você já
sabe no PHP. Você vai ver que é bem fácil e tranquilo. Basta praticar e praticar!
O que você tem que ter em mente é um slogan que a orientação a objetos sempre
persegue: o famoso DRY (Don’t repeat Yourself – Não se repita), ou seja, criando as
classes e suas estruturas corretamente você terá condições de desenvolver código
reusável e reaproveitável facilmente.
Outra dica importante é usar a UML a seu favor. A UML possui diagramas
muito importantes para ajudá-lo a criar uma boa estrutura de classes. Bem, vamos
ao que interessa! Boa leitura e se puder fazer os exemplos no seu computador,
melhor ainda!
OBJETIVOS
• Aplicar os conceitos de orientação a objetos em PHP;
• Criar programas orientados a objeto em PHP.
Introdução
capítulo 4 • 94
• Interfaces;
• Abstração;
• Métodos mágicos (Magic Methods).
32. <?php
33. class Celular {
34. /* atributos */
35. var $preco;
36. var $titulo;
37.
38. /*métodos de acesso*/
39. function setPreco($p){
40. $this->preco = $p;
41. }
42.
capítulo 4 • 95
43. function gePreco(){
44. return $this->preco;
45. }
46.
47. function setTitulo($t){
48. $this->titulo = $t;
49. }
50.
51. function getTitulo(){
52. return $this->preco ;
53. }
54. }
55. ?>
Código 1 – Celular.php.
Como vimos no código 1, criar uma classe em PHP é muito fácil e bem pa-
recido com outras linguagens, muda somente a sintaxe, é claro. Podemos, agora,
criar outro arquivo, chamado teste.php e nele incluir o arquivo da classe e criar-
mos objetos:
ATENÇÃO
Lembre-se: para testar os seus exemplos, você tem que estar com o Apache ligado e se
estiver usando o XAMPP, criar uma pasta para os seus exemplos dentro dos diretórios que
o Apache está configurado como Virtual Host. Caso tenha dúvida nisso, se estiver usando o
Windows, use a pasta htdocs dentro do XAMPP. Tudo que estiver dentro desta pasta irá ser
encarado como pasta válida para execução do PHP.
1. <?php
2. include 'Celular.php';
3.
4. $samsung = new Celular();
5. $iphone = new Celular();
6.
7. $samsung->setNome("Galaxy");
capítulo 4 • 96
8. $samsung->setPreco("100.00");
9.
10. $iphone->setNome("IPhone 7");
11. $iphone->setPreco("200.00");
12.
13. echo "Celular: ".$samsung->getNome()." Preco: "
.$samsung->getPreco();
14. echo "<br>";
15. echo "Celular: ".$iphone->getNome()." Preco: "
.$iphone->getPreco();
16. ?>
Código 2 – Teste.php.
• protected
protected $outra = “outro teste”;
capítulo 4 • 97
• private
private $mais_uma = “novo teste”;
Herança
Herança Simples
Usuário
nome_usuário
logado
login()
logout()
esta_logado()
Administrador
criar_forum()
banir()
capítulo 4 • 98
A implementação em PHP do diagrama da figura 4.1 é mostrada a seguir:
1. <?php
2. class Usuario{
3.
4. public $nome_usuario = "";
5. private $logado = false;
6.
7. public function login() {
8. $this->logado = true;
9. }
10.
11. public function logout() {
12. $this->logado = false;
13. }
14.
15. public function estaLogado() {
16. return $this->logado;
17. }
18. }
19.
20. class Administrador extends Usuario {
21. public function criaForum( $nomeForum ) {
22. echo "$this->nome_usuario criou um forum: $nomeForum<br>";
23. }
24.
25. public function banir( $usuario ) {
26. echo "$this->nome_usuario baniu o usuario: $usuario-
>nome_usuario<br>";
27. }
28. }
29. ?>
Código 3 – Usuario.php.
capítulo 4 • 99
A classe Usuario é bem simples de ser entendida. Veja alguns detalhes:
• Na linha 5 usamos o private no atributo logado, conforme havíamos comen-
tado anteriormente que poderíamos usar este tipo de modificador;
• Temos um atributo chamado nome_usuario que somente foi usado na classe
Administrador, definida no mesmo arquivo que a classe Usuario. Perceba a palavra
chave extends na linha 20 indicando que Administrador é uma subclasse de Usuario;
• Na classe Administrador, o atributo nome_usuario foi usado, lembrando que
este atributo pertence à superclasse.
1. <?php
2. include 'Usuario.php';
3. // Cria um novo usuário e faz o login dele
4. $usuario = new Usuario();
5. $usuario->nome_usuario = "Sr Smith";
6. $usuario->login();
7. echo $usuario->nome_usuario." ".($usuario->estaLogado()?"es-
ta logado":"nao esta logado")."<br>";
8.
9. // Cria um novo administrador e faz seu login
10. $admin = new Administrador();
11. $admin->nome_usuario = "Neo";
12. $admin->login();
13. echo $admin->nome_usuario." ".($usuario->estaLogado()?"esta
logado":"nao esta logado")."<br>";
14.
15. // Mostra: Neo criou um novo fórum: Matrix"
16. $admin->criaForum("Forum da Matrix");
17.
18. // Mostra "Neo baniu o usuário: Sr Smith"
19. $admin->banir($usuario);
20. ?>
Código 4 – Teste de Usuário.
capítulo 4 • 100
No código 4 temos o teste da herança. Perceba que uma vez que já conhece-
mos bem a linguagem PHP e somando aos seus conhecimentos de orientação a
objetos, não é complicado de entender a dinâmica do teste.
Essa é, realmente, a essência da herança no PHP. No restante deste capítulo,
você explorará várias maneiras de ajustar a herança para fins específicos, incluindo
a substituição, as classes e métodos finais, as classes abstratas e as interfaces.
A execução do código 3 está mostrada na figura4. 2:
Herança multinível
A figura 4.3 mostra uma herança multinível, ou seja, que contém mais do que
um nível, além do nível pai-filho.
Pai
idade()
Filho
idadeFilho()
Neto
idadeNeto()
capítulo 4 • 101
A implementação da hierarquia mostrada na figura 4.3 está mostrada no có-
digo 5.
1. <?php
2. class Pai {
3. public function idade() {
4. return ' idade: 80';
5. }
6. }
7. class Filho extends Pai {
8. public function idadeFilho() {
9. return ' idade: 50';
10. }
11. }
12. class Neto extends Filho {
13. public function idadeNeto() {
14. return 'idade: 20';
15. }
16. public function geracoes() {
17. echo "Pai " .$this->idade();
18. echo "<br>Filho ".$this->idadeFilho();
19. echo "<br>Neto ".$this->idadeNeto();
20. }
21. }
22. $obj = new Neto();
23. $obj->geracoes();
24. ?>
Código 5 – Herança multinível.
capítulo 4 • 102
Figura 4.4 – Execução da herança multinível.
Interfaces
Uma interface é como uma descrição das ações que um objeto pode fazer.
Ela é escrita da mesma forma que uma classe, mas com o uso da palavra-chave
interface. Vamos lembrar de alguns detalhes sobre as interfaces.
• Todos os métodos declarados em uma interface devem ser públicos;
• Todos os métodos em uma interface devem ser implementados dentro de
uma classe. Se não fizer isso, ocorrerá um erro;
• A classe que implementa uma interface deve usar as mesmas assinaturas de
métodos definidas na interface;
• As interfaces podem ser estendidas usando o operador extends.
capítulo 4 • 103
15. $teste = new Teste();
16. $teste->setPropriedade("oculos");
17. $teste->descricao();
18. ?>
Código 6 – Interface:
No código 6 temos um exemplo bem simples de uma interface “A”. Ela possui
dois métodos: setPropriedade() e descricao(). Eles, obrigatoriamente, devem apare-
cer em qualquer classe que implementa a interface A. E isto ocorre na classe Teste,
nas linhas 8 e 11.
O atributo x aparece na classe Teste e é usado no teste da classe, entre as linhas
15 a 17.
Portanto, o uso de interfaces em PHP é bem parecido com outras linguagens.
Lembre-se que o conceito de orientação a objetos é mantido, o que estamos vendo
aqui neste capítulo não deve ser novidade para você, a única diferença deve ser
a sintaxe.
CONEXÃO
Caso você tenha alguma dúvida sobre orientação a objetos, sugerimos os seguintes links:
http://www.devmedia.com.br/os-4-pilares-da-programacao-orientada-a-objetos/9264.
O da Wikipedia está bem interessante. Nele você vai encontrar links para outras referên-
cias: <https://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objetos>.
Classes abstratas
Uma classe abstrata é uma classe que contém pelo menos um método abstrato.
Este, por sua vez, é a declaração de função sem nenhum código e tem apenas o
capítulo 4 • 104
nome do método e seus parâmetros. Pode haver vários métodos na classe e deve-
mos declarar a classe como abstrata somente quando existir um método abstrato.
Vamos a um exemplo:
1. <?php
2. abstract class Carro {
3. public abstract function getMontadora();
4. public abstract function getPreco();
5. }
6. class Corolla extends Carro {
7. public function getMontadora() {
8. return "Toyota" . '<br/>';
9. }
10. public function getPreco() {
11. return 100000 . '<br/>';
12. }
13. }
14. class Uno extends Carro {
15. public function getMontadora() {
16. return "Fiat" . '<br/>';
17. }
18. public function getPreco() {
19. return 35000 . '<br/>';
20. }
21. }
22. $carro1 = new Corolla();
23. $carro2 = new Uno();
24. echo $carro1->getMontadora();
25. echo $carro1->getPreco();
26. echo $carro2->getMontadora();
27. echo $carro2->getPreco();
28. ?>
Código 7 – Classe abstrata.
capítulo 4 • 105
Nas classes Corolla e Uno temos novamente os métodos, porém agora
implementados.
O resultado do teste das linhas 22 a 27 está mostrado na figura 4.5.
Agora já sabemos como criar uma classe, definir objetos para a classe e criar
métodos em PHP.
Métodos “mágicos”
Você pode achar que este tópico tem um nome peculiar, afinal, o que são
métodos mágicos? A gente não estuda este conceito em orientação a objetos. Mas
a própria documentação do PHP se refere a alguns métodos especiais como “má-
gicos”. Confira no link: http://php.net/manual/pt_BR/language.oop5.magic.php.
Apendemos nos tópicos anteriores sobre diferentes conceitos de programação
orientada a objetos, como herança, interface e abstração em PHP. Os métodos
capítulo 4 • 106
mágicos começam com o prefixo __, por exemplo __call, __get, __set. Existem
vários métodos mágicos em PHP. Vamos apresentar alguns destes métodos mági-
cos usados em programação orientada a objetos. A Tabela 1 mostra alguns destes
métodos e uma breve descrição:
NOME DESCRIÇÃO
Lembra que na seção 1 deste capítulo falamos que mais tarde che-
__construct() garia a hora de ver sobre construtores? Este método define o cons-
trutor de uma classe.
Os nomes: __construir (), __destruir (), __call (), __callStatic (), __get (),
__set (), __isset (), __unset (), __sleep (), __wakeup (), __toString (), __ invoke
() , __set_state (), __clone () e __debugInfo () são os métodos mágicos do PHP.
Logo, não podemos ter funções com esses nomes em nenhum programa, a não ser
que você deseje usar a funcionalidade deles.
Construtores
Você já deve saber bem o que faz um construtor em uma classe. Mas apenas
para lembrá-lo, o construtor é o primeiro método a ser executado quando um
novo objeto é criado. É muito importante que toda classe que você definir tenha
um construtor, pois trata-se de uma boa prática de programação.
Lembre-se que o construtor é chamado automaticamente quando um objeto
é criado.
capítulo 4 • 107
1. <?php
2. class Animal {
3. public function __construct($nome){
4.
5. $this->nome =$nome;
6. }
7. }
8. $animal = new Animal("Ornitorrinco");
9. echo $animal->nome;
10. ?>
Código 8 – Exemplo de construtor.
1. <?php
2. class Superclasse {
3. function __construct() {
4. echo "Construtor da classe pai <br>";
5. }
6. }
7. class Subclasse extends Superclasse {
8. function __construct() {
9. parent::__construct();
10. echo "Construtor da classe filho <br>";
11. }
12. }
13. $obj = new Superclasse();
14. $obj = new Subclasse();
15. ?>
Código 9 – Construtores com herança.
Antes de espiar o que vai ser impresso na execução deste exemplo, tente olhar
e estudar o código. Na linha 13 é criado um novo objeto da superclasse. O cons-
trutor da superclasse imprime “Construtor da classe pai”.
capítulo 4 • 108
Na linha 14, é criado outro objeto, porém com o mesmo nome da linha 13, da
subclasse. O construtor da subclasse chama o construtor da superclasse na linha 9,
e este imprime a sua mensagem, e depois na linha 10, é impressa uma mensagem
do construtor da subclasse. Logo, a execução é mostrada na figura 4.6:
ATENÇÃO
Na linha 9 apareceu algo diferente chamado de Operador de Resolução de Escopo ou
dois pontos duplo “::”. Este operador permite acessar métodos ou propriedades estáticas,
constantes, e sobrecarregadas de uma classe. Neste caso, o construtor.
Destrutores
1. <?php
2. class Destrutor {
3. function __construct() {
4. echo "Chamando o construtor <br>";
5. $this->nome = "objeto";
6. }
7. function __destruct() {
8. echo "Chamando o destrutor:" . $this->nome . "\n";
9. }
10. }
capítulo 4 • 109
11. $obj = new Destrutor();
12. ?>
Código 10 – Exemplo de destrutor.
__get() e __set()
1. <?php
2. class Aluno {
3. private $nome;
4. private $idade;
5.
capítulo 4 • 110
6. public function __construct() {}
7.
8. public function __set($var, $valor) {
9. $this->$var = $valor;
10. }
11.
12. public function __get($valor) {
13. return $this->$valor;
14. }
15. }
16. ?>
Código 11 – __get() e __set().
1. <?php
2. include 'Aluno.php';
3.
4. $aluno = new Aluno();
5. $aluno->nome = 'Nabucodonosor';
6. $aluno->idade = 28;
7. echo 'O aluno: '.$aluno->nome.' tem '.$aluno->idade.' anos de
idade';
capítulo 4 • 111
__toString()
Este método é usado quando queremos que um determinado objeto seja tra-
tado como uma string. Ele não possui argumentos e deve retornar uma string.
Observe a pequena inserção que fizemos nas linhas 16 a 18 na classe Aluno:
1. <?php
2. class Aluno {
3. private $nome;
4. private $idade;
5.
6. public function __construct() {}
7.
8. public function __set($nome, $valor) {
9. $this->$nome = $valor;
10. }
11.
12. public function __get($nome) {
13. return $this->$nome;
14. }
15.
16. public function __toString(){
17. return 'Nome: '.$this->$nome.' Idade:'.$this->$idade;
18. }
19. }
20. ?>
1. <?php
2. include 'Aluno.php';
3.
4. $aluno = new Aluno();
5. $aluno->nome = 'Nabucodonosor';
6. $aluno->idade = 28;
7. echo $aluno;
capítulo 4 • 112
E tem como resultado:
Percebeu no teste que demos um echo no objeto e ele retornou como se fosse
uma string? O toString() normalmente cria uma linha ou um array percorrendo
todas as variáveis de instância da classe e mostra o valor de cada uma delas. Em
alguns casos, nem todas as variáveis são mostradas, mas dependerá do caso. É inte-
ressante criar uma variável desta para cada classe, pois existem várias situações que
o valor das variáveis de instância podem ser usadas.
Você deve saber que a orientação a objetos é um grande campo de estudo na
área de programação. E em PHP, por ser uma linguagem bastante difundida, te-
mos várias aplicações nas quais a orientação a objetos pode ser usada.
Atualmente, na programação para web é impensável não ter algum tipo de
framework para nos ajudar nos projetos de desenvolvimentos de portais, aplicati-
vos e sites. frameworks como:
• Yii (www.yiiframework.com);
• Laravel (laravel.com);
• Code Igniter (codeigniter.com);
• CakePHP (cakephp.org);
• Zend Framework (framework.zend.com).
capítulo 4 • 113
class News_model extends CI_Model {
public function __construct() {
$this->load->database();
}
public function get_news($id) {
if($id != FALSE) {
$query = $this->db->get_where('news', array('id' => $id));
return $query->row_array();
}
else {
return FALSE;
}
}
}
Viu como o framework usa a orientação a objetos? Embora possa ser compli-
cado na primeira vista, o framework é bem fácil de mexer e aprender.
Nosso objetivo aqui é mostrar o básico para você sobre como usar a orientação
a objetos em PHP. Temos a certeza que com os ensinamentos apresentados aqui
aliada à sua experiência e dedicação, além de pesquisas e estudos, você conseguirá
criar muitos projetos de sucesso com a linguagem neste paradigma.
ATIVIDADES
01. Observe a classe a seguir.
class Usuario {
private $nome;
private $sobrenome;
}
02. Usando a classe do exercício anterior, crie um construtor para iniciar os valores de
$nome e $sobrenome
capítulo 4 • 114
03. Crie um método que retorne o nome completo do usuário
04. Crie um novo objeto, $usuario1 e passe para o construtor os valores do primeiro e último
nome. O primeiro nome é "Nabuco" e o sobrenome é "Donosor" (o usuário pode escolher o
nome e sobrenome).
REFERÊNCIAS BIBLIOGRÁFICAS
DALL'OGLIO, P. PHP: Programando com orientação a objetos. 2 ed. São Paulo: Novatec, 2009.
DEITEL, P. Ajax: Rich Internet Applications e desenvolvimento web para programadores. São Paulo:
Pearson, 2008.
LAWSON, B. Introdução ao HTML5. Rio de Janeiro: Alta Books, 2011.
THE PHP GROUP. Documentation. Manual do PHP. Disponível em: <https://secure.php.net/manual/
pt_BR/introduction.php>. Acesso em: 30 jul. 2017.
W3SCHOOLS. PHP 5 Tutorial. PHP Tutorial. Disponível em: <https://www.w3schools.com/php/>.
Acesso em: 30 jul. 2017.
capítulo 4 • 115
capítulo 4 • 116
5
Integração de PHP
com banco de
dados
Integração de PHP com banco de dados
Dê uma olhada no sumário do nosso livro e veja o que já fizemos até agora:
estudamos HTML, CSS, Javascript, Jquery, PHP ... É bastante coisa. Está na hora
da gente embrulhar o pacote com uma embalagem bacana para completar o nosso
aprendizado: acessar e conversar com banco de dados. Temos certeza que a maio-
ria absoluta dos projetos que você participar envolvendo programação para inter-
net vai usar um banco de dados para armazenar as informações do seu sistema.
Este capítulo vai requerer que você tenha conhecimentos básicos de manipu-
lação de banco de dados como criação de tabelas, comandos de inserção, consulta,
remoção e edição de registros, bem como conhecer algum cliente de banco de
dados da sua preferência, mas aqui vamos usar o PHPMyAdmin. Estamos usando
o ambiente Windows com o XAMPP instalado, pois é bem simples de instalar
e usar.
Com os conhecimentos que vamos introduzir aqui mais o que você já acumu-
lou neste tempo, e mais sua criatividade, você terá condições de criar aplicações
bem bacanas, interativas e modernas. Só que este capítulo é apenas o começo. É
muito importante que você vá além dos limites deste capítulo e procure formas
de desenvolvimento em PHP mais produtivas como algum dos vários frameworks
que existem no mercado.
E conte conosco para ajudar na sua jornada. Bons estudos!
OBJETIVOS
• Criar programas com interação com banco de dados;
• Criar telas de cadastro completas em PHP e MySQL.
capítulo 5 • 118
Introdução
Já vimos vários recursos nas nossas aulas. Já temos condições de criar aplica-
ções para a internet bem interativas no lado cliente com Javascript e JQuery, criar
scripts orientados a objetos em PHP no servidor, mas falta uma parte super im-
portante: a conexão com banco de dados. E isto o PHP faz muito bem.
Neste capítulo vamos mostrar a ciação de um CRUD (Create, Read, Update,
Delete) completo, envolvendo uma aplicação bem simples em PHP com banco
de dados MySQL.
No caso do MySQL, é possível fazer a conexão com o banco de dados por
meio de duas formas:
• com a extensão MySQLi;
• por meio do PDO (PHP Data Objects).
Vamos usar o PDO porque ele consegue trabalhar com vários tipos de bancos
de dados. Se você estiver usando o Postgres, por exemplo, os exemplos que vamos
desenvolver aqui servirão para você. Idem se usar MariaDB etc. E como você pode
deduzir, o MySQLi só funciona com MySQL.
É claro que dependendo do seu projeto você pode usar o MySQLi desde que
o banco de dados seja MySQL. A maioria dos frameworks existentes para PHP
usam o PDO.
No nosso exemplo, vamos usar vários scrips em PHP para criar o projeto. E
vamos começar pelo script de conexão com o banco de dados.
Antes de começar, é obrigatório que o banco de dados esteja criado.
Se você estiver usando o XAMPP como recomendamos no início dos estu-
dos de PHP, execute-o e em seguida crie o banco de dados no PHPMyAdmin.
Normalmente ele fica instalado na seguinte URL: http://localhost/phpmyadmin/.
O banco de dados pode ser chamado Teste e nele vamos criar uma tabela cha-
mada Pessoa com os seguintes campos (e seus respectivos tipos):
• Id (integer, autonumérica);
• Nome (varchar(100);
• Idade (integer);
• Salario (double);
• Data de nascimento (date).
capítulo 5 • 119
Figura 5.1 – Tela do PHPMyAdmin com o banco de dados criado.
Operações do cadastro
CONEXAO.PHP
8. <?php
9. $servidor = "localhost";
10. $usuario = "root";
11. $senha = "";
12.
13. try {
capítulo 5 • 120
14. $con = new PDO("mysql:host=$servidor;dbname=test", $usua-
rio, $senha);
15. $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
16. echo "Conexão OK";
17. }
18. catch(PDOException $e) {
19. echo "Erro na conexao: " . $e->getMessage();
20. }
21. ?>
Ótimo! Temos um banco conectado para trabalhar. Agora vamos partir para o
formulário de entrada de dados.
capítulo 5 • 121
Entrada de dados
A tabela Pessoa é bem simples, temos apenas 5 campos sendo que um deles
é o campo Data de Nascimento o qual requer alguns detalhes que vamos tratar
mais tarde.
Portanto, precisamos de um formulário com apenas quatro campos. Epa! Não
são cinco campos? Por que está faltando um? Lembre-se que o campo Id é do tipo
integer e automático, logo, não vamos precisar inserir dados para ele.
Vamos criar um formulário bem simples, sem formatações usando CSS (de-
pois a gente deixa ele mais bonito). Veja como ele vai ficar:
FORM.PHP
1. <!doctype html>
2. <html>
3. <head>
4. <title> Formulário para inclusão de dados</title>
5. </head>
6. <body>
7. <form action="insere.php" method="post">
8. <label for="nome">Nome:</label>
9. <input type="text" id="nome" name="nome" placeholder="Di-
gite seu nome">
10. <br><br>
capítulo 5 • 122
11. <label for=idade> Idade:</label>
12. <input type="number" id="idade" name="idade" placeholder="-
Digite sua idade">
13. <br><br>
14. <label for="salario"> Salario:</label>
15. <input type="number" id="salario" name="salario" step="0.01"
placeholder="Digite seu salario">
16. <br><br>
17. <label for=data> Data de nascimento:</label>
18. <input type="date" id="data" name="data_nascimento" pla-
ceholder="Digite sua data de nascimento">
19. <br><br>
20. <input type="submit" value="Salvar Formulário">
21. </form>
22. </body>
23. </html>
INSERE.PHP
1. <?php
2. include 'conexao.php';
3.
4. $nome = $_POST['nome'];
5. $idade = $_POST['idade'];
6. $salario = $_POST['salario'];
7. $nascimento=$_POST['data_nascimento'];
8.
9. $sql = "insert into pessoa(nome, idade, salario, data_nas-
cimento) values('$nome', $idade, $salario, '$data_nascimento') ";
10. $count = $con->exec($sql);
11. echo "<p> $count registro foi incluído</p>";
12. ?>
capítulo 5 • 123
Para testar este script, é recomendável apagar a linha 09 do script conexao.php
para evitar que a frase “Conexao OK” apareça toda hora.
capítulo 5 • 124
Script de consulta
O script de consulta aos dados será chamado de consulta.php. Ele é bem sim-
ples e poderia ser mais completo e complexo. Por enquanto vamos optar pela
simplicidade para poder entender como ele funciona. Depois a gente aprimora
ele. Veja o código:
CONSULTA.PHP
1. <?php
2. include 'conexao.php';
3.
4. $sql = 'SELECT id, nome, idade, salario, data_nascimento
FROM pessoa ORDER BY nome';
5. echo "<table border=1>";
6. echo " <caption>Consulta aos dados das pessoas
cadastradas</caption>";
7. echo "
8. <thead>
9. <tr>
10. <th>Nome</th>
11. <th>idade</th>
12. <th>Salario</th>
13. <th>Data de nascimento</th>
14. <th> </th>
15. <th> </th>
16. </tr>
17. </thead>";
18. echo " <tbody>";
19. foreach ($con->query($sql) as $row) {
20. echo "<tr>";
21. echo "<td>". $row['nome'] . "</td>";
22. echo "<td>". $row['idade'] . "</td>";
23. echo "<td>". $row['salario'] . "</td>";
24. echo "<td>". $row['data_nascimento'] . "</td>";
25. echo "<td>";
26. echo "<a href=editar.php?id=".$row['id'].">Editar</a>";
capítulo 5 • 125
27. echo "</td>";
28. echo "<td>";
29. echo "<a href=excluir.php?id=".$row['id'].">Excluir</a>";
30. echo "</td>";
31. echo "</tr>";
32. }
33. echo "</tbody>";
34. echo "</table>"
35. ?>
A tela formada pelo script é mostrada na figura 5.6. Novamente não estamos
usando nenhuma formatação com CSS e inserimos outros registros para deixar a
tela um pouco mais representativa.
Lembre-se que para poder inserir outros registros, temos que usar a URL
apontando para o script form.php toda vez que quisermos inserir um novo registro.
capítulo 5 • 126
linha 19. O array é associado à variável array $row, a qual vai receber como valores
os registros. Os índices de $row[] são os nomes dos campos presentes no comando
SQL da linha 4. Veja uma representação desse contexto na figura 5.7:
• Perceba que montamos uma linha da tabela HTML para cada registro en-
contrado no banco de dados combinando com os dados obtidos pela query. Veja
ainda que temos 2 links, um para editar o registro (linha 26) e outro para apagá-lo
(linha 29). Nestes casos, passamos o id de cada registro por get pela URL para o
script respectivo.
A função strtotime() converte strings para o fomato data. Ela é necessária por-
que o $row[] de cada linha será uma string quando recuperada do banco de dados,
assim como qualquer outro valor. Lembre-se disso para outros tipos de campos. A
função date() por sua vez, formata uma data para um padrão pré-definido. Neste
caso, “d/m/Y” é o equivalente ao formato que queremos. A função date() neste
caso tem como parâmetro a data convertida pela função strtotime().
capítulo 5 • 127
CONEXÃO
Para conhecer outros formatos de data, acesse o link: <http://php.net/manual/pt_
BR/function.date.php>.
Script de Alteração
A tela de consulta contém links para editar os registros de cada linha da tabela.
Vamos criar a tela para edição dos dados. O arquivo terá como nome editar.php
para ficar compatível com o link de edição presente na linha 26 do script
consulta.php.
EDITAR.PHP
1. <?php
2. include 'conexao.php';
3. $id = $_GET['id'];
4.
5. $sql = "SELECT id, nome, idade, salario, data_nascimento
FROM pessoa where id=$id ";
6. echo "<html>";
7. echo "<body>";
8. echo "<form action='edita.php' method='post'>";
9. foreach ($con->query($sql) as $row) {
10. echo "<input type='hidden' name='id' value='$id' >";
11. echo "<label for='nome'>Nome:</label>";
12. echo "<input type='text' id='nome' name='nome' placehol-
der='Digite seu nome' value='".$row['nome']."' >";
13. echo "<br><br>";
14. echo "<label for='idade'> Idade:</label>";
15. echo "<input type='number' id='idade' name='idade' pla-
ceholder='Digite sua idade' value='".$row['idade']."' >";
16. echo "<br><br>";
capítulo 5 • 128
17. echo "<label for='salario'> Salario:</label>";
18. echo "<input type='number' id='salario' name='salario'
step='0.01' placeholder='Digite seu salario' value='".$row['sala-
rio']."' >";
19. echo "<br><br>";
20. echo "<label for='data_nascimento'> Data de
nascimento:</label>";
21. echo "<input type='date' id='data' name='data' pla-
ceholder='Digite sua data de nascimento' value='".$row['data_nasci-
mento']."' >";
22. echo "<br><br>";
23. echo "<input type='submit' value='Salvar Formulário'>";
24. }
25. echo "</form>";
26. echo "</body>";
27. echo "</html>";
28. ?>
capítulo 5 • 129
edição (update). Lembre-se que os campos hidden também são enviados via post
para o script relacionado no action do formulário. A figura 5.8 mostra um exemplo
da tela de edição destacando o id recuperado por get pela URL.
EDITA.PHP
1. <?php
2. include 'conexao.php';
3.
4. $id=$_POST['id'];
5. $nome = $_POST['nome'];
6. $idade = $_POST['idade'];
7. $salario = $_POST['salario'];
8. $nascimento=$_POST['data_nascimento'];
9.
10. $sql = "update pessoa set nome='$nome', idade=$idade, sa-
lario=$salario, data_nascimento=$nascimento where id=$id ";
11. $count = $con->exec($sql);
12. echo "<p> $count registro foi atualizado</p>";
13. ?>
capítulo 5 • 130
Como exemplo, alteramos o salário do John Isnou para 999. Veja o resultado
na figura 5.9:
Script de exclusão
Excluir um registro é uma tarefa que pode ser feita de várias formas também.
Vamos optar por mostrar um formulário no qual não seja possível modificar os
valores e pedir a confirmação do usuário para apagar o registro. É uma questão de
segurança. Vamos ao formulário:
EXCLUIR.PHP
1. <?php
2. include 'conexao.php';
3. $id = $_GET['id'];
4.
5. $sql = "SELECT id, nome, idade, salario, data_nascimento
FROM pessoa where id=$id ";
6. echo "<html>";
7. echo "<body>";
8. echo "<form action='exclui.php' method='post'>";
9. foreach ($con->query($sql) as $row) {
10. echo "<input type='hidden' name='id' value='$id' >";
11. echo "<label for='nome'>Nome:</label>";
12. echo "<input type='text' id='nome' name='nome' value='".$ro-
w['nome']."' readonly>";
13. echo "<br><br>";
14. echo "<label for='idade'> Idade:</label>";
15. echo "<input type='text' id='idade' name='idade' value='".$ro-
w['idade']."' readonly>";
16. echo "<br><br>";
capítulo 5 • 131
17. echo "<label for='salario'> Salario:</label>";
18. echo "<input type='text' id='salario' name='salario'
value='".$row['salario']."' readonly>";
19. echo "<br><br>";
20. echo "<label for='data_nascimento'> Data de
nascimento:</label>";
21. echo "<input type='text' id='data_nascimento' name='da-
ta_nascimento' value='".date('d/m/Y',strtotime($row['data_nascimen-
to']))."' readonly>";
22. echo "<br><br>";
23. echo "<input type='submit' value='Apagar registro'>";
24. }
25. echo "</form>";
26. echo "</body>";
27. echo "</html>";
28. ?>
capítulo 5 • 132
A figura 5.10 mostra a sequência de telas que geram a exclusão do registro.
Temos o formulário de exclusão, a tela com a confirmação da exclusão e por fim a
tela de consulta dos dados após a exclusão. Perceba que “John Isnou” foi excluído
do banco de dados. A seguir temos o script que executa o comando SQL para
excluir o registro.
EXCLUI.PHP
1. <?php
2. include 'conexao.php';
3.
4. $id=$_POST['id'];
5. $sql = "delete from pessoa where id=$id ";
6. $count = $con->exec($sql);
7. echo "<p> $count registro foi remvido</p>";
8. ?>
Melhorando a aplicação
O nosso cadastro está completo, mas não está muito funcional para o usuário.
Seria legal que houvesse um pouco de interatividade e até mesmo uma tela mais
bonita e navegável para o usuário.
Uma forma rápida, elegante e atual de fazer isso é usar o Bootstrap. O Bootstrap
(http://www.getbootstrap.com) é um framework que contempla HTML, CSS e
Javascript para desenvolver sites responsivos.
Vamos aplicá-lo no nosso projeto agora. Lembra que falamos no capítulo 2
sobre importar códigos externos no nosso projeto ou fazer o download e usá-los
localmente? Agora é uma boa hora para tomar essa decisão e vamos usar um CDN
para incluir os arquivos necessários do Bootstrap no nosso projeto.
O próximo passo é criar um arquivo index.php, que será o responsável por
chamar os outros scripts por meio de um menu que vamos criar.
No arquivo index.php insira o seguinte código, observe o uso dos CDN nas
linhas 12, 32 e 33.
capítulo 5 • 133
INDEX.PHP
1. <?php
2. $pagina="consulta";
3. if(isset($_GET["pagina"]))
4. $pagina=$_GET["pagina"];
5. ?>
6. <!DOCTYPE html>
7. <html lang="pt-br">
8. <head>
9. <meta charset="utf-8">
10. <meta name="viewport" content="width=device-width, ini-
tial-scale=1, shrink-to-fit=no">
11. <title>CRUD</title>
12. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.
com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYii-
SIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous">
13. <link rel="stylesheet" href="estilo.css">
14. </head>
15. <body>
16. <!-- conteudo -->
17. <?php
18. include 'nav.php';
19. ?>
20. <div id="main" class="container-fluid">
21. <?php
22. if ($pagina == "consulta"){
23. include 'consulta.php';
24. }
25. else{
26. $url = $pagina.'.php';
27. include "$url";
28. }
29. ?>
30. </div>
31. <!-- fim conteudo -->
capítulo 5 • 134
32. <script src="https://ajax.googleapis.com/ajax/libs/
jquery/1.12.4/jquery.min.js"></script>
33. <script src="https://maxcdn.bootstrapcdn.com/
bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5I-
Qib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
crossorigin="anonymous"></script>
34. </body>
35. </html>
ESTILO.CSS
body {
padding-top: 50px;
}
.crud {
padding: 40px 15px;
text-align: center;
}
capítulo 5 • 135
Colocamos a formatação específica para tabelas do Bootstrap. É muito im-
portante, se você não estiver acostumado com o Bootstrap, consultar a página de
documentação do framework para escolher a formatação mais adequada e que vi-
sualmente agrada. Neste caso, usamos a tabela listrada (table-striped). Poderíamos
colocar outras formatações para acrescentar mais detalhes visuais, mas só esta for-
matação já vai ficar legal, veja como ficou agora (não vamos mais executar o script
diretamente, a partir de agora, vamos só usar o index.php).
NAV.PHP
1. <nav class="navbar navbar-inverse navbar-fixed-top">
2. <div class="container-fluid">
3. <div class="navbar-header">
4. <button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#navbar" aria-expanded="false"
aria-controls="navbar">
5. <span class="sr-only">Toggle navigation</span>
6. <span class="icon-bar"></span>
7. <span class="icon-bar"></span>
8. <span class="icon-bar"></span>
9. </button>
10. <a class="navbar-brand" href="#">Nosso CRUD</a>
11. </div>
12. <div id="navbar" class="navbar-collapse collapse">
13. <ul class="nav navbar-nav">
14. <li><a href="#">Início</a></li>
capítulo 5 • 136
15. </ul>
16. </div>
17. </div>
18. </nav>
...
15. <body>
16. <!-- conteudo -->
17. <?php
18. include 'nav.php';
19. ?>
20. <div id="main" class="container-fluid">
...
Vamos estilizar os links “Editar” e “Excluir” com uma classe para botões.
Altere as linhas dos links no arquivo consulta.php para:
capítulo 5 • 137
E olhe o resultado:
As alterações nos links vão fazer com que o nome do respectivo script seja
enviado via get para o index.php juntamente com outro parâmetro id referente ao
índice do registro.
Vamos agora alterar os formulários nos arquivos: editar.php, excluir.php e
form.php. A alteração que vamos fazer no form.php serve como base para os outros
arquivos. Perceba que as tags iniciais de HTML foram removidas, pois agora estes
scripts serão adicionados ao index.php, o qual já contém as tags.
capítulo 5 • 138
17. <input type="number" id="salario" name="salario"
step="0.01" placeholder="Digite seu salario" class="form-control">
18. </div>
19. </div>
20. <div class="row">
21. <div class="form-group col-md-4">
22. <label for=data> Data de nascimento:</label>
23. <input type="date" id="data_nascimento" na-
me="data_nascimento" placeholder="Digite sua data de nascimento"
class="form-control">
24. </div>
25. </div>
26. <input type="submit" value="Salvar Formulário"
class="btn-btn-default">
27. </form>
O resultado será:
capítulo 5 • 139
O arquivo editar.php ficará com as seguintes alterações (observe as alterações
em relação às formatações do Bootstrap).
EDITAR.PHP
1. <?php
2. include 'conexao.php';
3. $id = $_GET['id'];
4.
5. $sql = "SELECT id, nome, idade, salario, data_nascimento
FROM pessoa where id=$id ";
6. echo "<form action='edita.php' method='post'>";
7. foreach ($con->query($sql) as $row) {
8. echo "<input type='hidden' name='id' value='$id' >";
9. ?>
10. <div class="row">
11. <div class="form-group col-md-4">
12. <label for="nome">Nome:</label>
13. : <input type="text" id="nome" name="nome"
placeholder="Digite seu nome" class="form-control" value="<?php echo
$row['nome'];?>">
14. </div>
15. </div>
16. <div class="row">
17. <div class="form-group col-md-4">
18. <label for=idade> Idade:</label>
19. <input type="number" id="idade" name="idade"
placeholder="Digite sua idade" class="form-control" value="<?php echo
$row['idade'];?>">
20. </div>
21. </div>
22. <div class="row">
23. <div class="form-group col-md-4">
24. <label for="salario"> Salario:</label>
25. <input type="number" id="salario" name="sa-
lario" step="0.01" placeholder="Digite seu salario" class="form-con-
trol" value="<?php echo $row['salario'];?>">
capítulo 5 • 140
26. </div>
27. </div>
28. <div class="row">
29. <div class="form-group col-md-4">
30. <label for=data> Data de nascimento:</label>
31. <input type="date" id="data_nascimento" name="-
data_nascimento" placeholder="Digite sua data de nascimento" class="-
form-control" value="<?php echo $row['data_nascimento'];?>">
32. </div>
33. </div>
34. <?php
35. }
36. echo "<input type='submit' value='Salvar Formulário' clas-
s='btn btn-primary'>";
37. echo "</form>";
38. ?>
Você deve se lembrar que a cada vez que inserimos, editamos ou excluimos um
registro, após a operação no banco de dados, aparece uma mensagem dizendo que
um registro foi incluído, editado ou excluído. Podemos alterar os scripts e colocar
uma função em PHP que redireciona a navegação para o index.php. A alteração
deve então remover a mensagem e inserir a seguinte linha nos arquivos: insere.php,
edita.php e exclui.php.
header("location:index.php");
capítulo 5 • 141
Vamos ver como ficou nossa aplicação:
capítulo 5 • 142
Figura 5.17 – Aplicação final: Tela de edição de dados.
capítulo 5 • 143
Considerações finais
ATIVIDADES
01. Durante o nosso texto, ao recuperar datas do banco de dados, optamos por formatar a
data no código PHP. Como poderia ser feito pelo banco de dados para que este envie a data
já formatada para o PHP?
03. No nosso texto, trabalhamos com MySql. Como seria a forma de se conectar com o
PostgreSQL usando PDO?
04. Se o usuário tiver os valores a serem inseridos em um array, como você faria para inserir
o array no banco de dados? (Em alguns frameworks é assim que os dados são inseridos).
capítulo 5 • 144
REFERÊNCIAS BIBLIOGRÁFICAS
DALL'OGLIO, P. PHP: Programando com orientação a objetos. 2 ed. São Paulo: Novatec, 2009.
DEITEL, P. Ajax: Rich Internet Applications e desenvolvimento web para programadores. São Paulo:
Pearson, 2008.
LAWSON, B. Introdução ao HTML5. Rio de Janeiro: Alta Books, 2011.
THE PHP GROUP. Documentation. Manual do PHP. Disponível em: <https://secure.php.net/manual/
pt_BR/introduction.php>. Acesso em: 30 jul. 2017.
W3SCHOOLS. PHP 5 Tutorial. PHP Tutorial. Disponível em: <https://www.w3schools.com/php/>.
Acesso em: 30 jul. 2017.
GABARITO
Capítulo 1
01.
<script src="xxx.js">
02.
alert("Alô Mundo");
03. D
04.
Capítulo 2
01. E 05. A
02. C
03. E
04. No cliente
capítulo 5 • 145
Capítulo 3
01.
$_GET[];
02. Falso
03.
echo “Hello World”
04.
function nome() { ... }
05. Quando os dados são enviados por um formulário HTML via método POST (<form ...
method="POST">), podemos usar o array $_POST, que usa como chaves os nomes dos
campos do formulário. Por exemplo: os dados do campo "nome" do formulário podem ser
acessados por $_POST["nome"].
Capítulo 4
01.
class Usuario {
private $nome;
private $sobrenome;
public function __construct($nome) {
$this -> nome = $nome;
}
}
02.
class Usuario {
private $nome;
private $sobrenome;
capítulo 5 • 146
}
}
03.
class Usuario {
private $nome;
private $sobrenome;
04.
$usuario1 = new Usuario("Nabuco", "Donosor");
05.
echo $usuario1->getNomeCompleto();
Capítulo 5
02. Falso
capítulo 5 • 147
} catch (PDOException $e) {
print $e->getMessage();
}
?>
04. Existem várias formas. Segue uma sugestão com a função prepare()
$prep = array();
foreach($dados_insercao as $k => $v ) {
$prep[':'.$k] = $v;
}
$sth = $db->prepare("INSERT INTO table (".implode(', ',array_keys($da-
dos_insercao)).") VALUES (".implode(', ',array_keys($prep)) . ")");
$res = $sth->execute($prep);
capítulo 5 • 148
ANOTAÇÕES
capítulo 5 • 149
ANOTAÇÕES
capítulo 5 • 150
ANOTAÇÕES
capítulo 5 • 151
ANOTAÇÕES
capítulo 5 • 152