Escolar Documentos
Profissional Documentos
Cultura Documentos
DE INFORMAÇÃO
de Programação
www.esab.edu.br
Linguagem de
Programação
Diretor Geral
Nildo Ferreira
Diretora Acadêmica
Beatriz Christo Gobbi
Coordenadora do Núcleo de Educação a Distância
Beatriz Christo Gobbi
Coordenadora do Curso de Administração EAD
Rosemary Riguetti
Coordenador do Curso de Pedagogia EAD
Claudio David Cari
Coordenador do Curso de Sistemas de Informação EAD
David Gomes Barboza
Copyright © Todos os direitos desta obra são da Escola Superior Aberta do Brasil.
www.esab.edu.br
Av. Santa Leopoldina, nº 840
Coqueiral de Itaparica - Vila Velha, ES
CEP 29102-040
Apresentação
Caro estudante,
Bons estudos!
Objetivo
Proporcionar, de maneira prática, conhecimentos para que você seja capaz de
desenvolver aplicações web com interação com o usuário, controle de seções e
gerenciamento de arquivos. Dessa forma, ao final da disciplina, você deverá contar
com a capacidade de desenvolver aplicações completas voltadas para web em
linguagem PHP. Os temas serão apresentados, principalmente, através de exercícios
práticos.
Habilidades e competências
• Desenvolver aplicações web utilizando PHP, compreendendo a sua arquitetura.
• Desenvolver aplicações web gerenciando arquivos.
• Desenvolver aplicações web com verificação de formulários, gerenciamento de
cookies, seções, upload de arquivos e segurança.
• Analisar as aplicações web estruturadas e organizadas, interativas.
• Analisar, planejar, projetar, desenvolver e testar sistemas em ambientes web.
• Compreender os critérios de bom funcionamento de aplicações web, com
gerenciamento de seções e arquivos, buscando o seu uso.
Ementa
Introdução à programação para web utilizando a linguagem PHP (Personal
Home Page). Arquitetura de aplicações para internet. JavaScript para a criação
de websites dinâmicos e interativos. Programação com execução na máquina-
cliente e na máquina-servidor, bem como vantagens, desvantagens e limitações.
Definição e implementação das funcionalidades: verificação de formulários,
gerenciamento de cookies, seções, upload de arquivos e segurança.
Sumário
1. Desenvolvimento prático de website - parte 1.................................................................7
2. Desenvolvimento prático de website - parte 2...............................................................13
3. Introdução à PHP...........................................................................................................23
4. História da linguagem PHP............................................................................................30
5. Arquitetura de aplicação web com PHP..........................................................................34
6. Efetuando a instalação e a configuração do servidor Apache
e de ferramenta de edição PHP......................................................................................39
7. Embutindo PHP no HTML...............................................................................................48
8. Tipos de dados PHP........................................................................................................53
9. Utilizando operadores em PHP.......................................................................................60
10. Utilizando instruções condicionais – parte 1..................................................................67
11. Utilizando instruções condicionais – parte 2..................................................................74
12. Utilizando instruções de repetição – parte 1..................................................................80
13. Utilizando instruções de repetição – parte 2..................................................................86
14. Desenvolvendo uma página simples com uso de PHP....................................................92
15. Armazenando e recuperando dados – parte 1.............................................................100
16. Armazenando e recuperando dados – parte 2.............................................................106
17. Utilizando vetores e matrizes – parte 1........................................................................112
18. Utilizando vetores e matrizes – parte 2........................................................................118
19. Manipulando strings....................................................................................................125
20. Desenvolvendo aplicativo, manipulando strings..........................................................134
21. Manipulando expressões regulares – parte 1...............................................................140
22. Manipulando expressões regulares – parte 2...............................................................145
23. Desenvolvendo uma aplicação e manipulando dados
em forma de arquivos – parte 1...................................................................................151
24. Desenvolvendo uma aplicação e manipulando dados
em forma de arquivos – parte 2...................................................................................156
25. Reutilizando o código..................................................................................................163
26. Escrevendo funções – parte 1......................................................................................171
27. Escrevendo funções – parte 2......................................................................................179
28. Escrevendo funções – parte 3......................................................................................184
29. Escrevendo funções – parte 4......................................................................................191
30. Desenvolvendo aplicação utilizando funções...............................................................198
31. Utilizando orientação a objetos....................................................................................207
32. Escrevendo classes com herança..................................................................................215
33. Escrevendo classe, sobrecarregando e sobrescrevendo métodos..................................223
34. Tratando exceções........................................................................................................229
35. Exercícios resolvidos – parte 1.....................................................................................234
36. Exercícios resolvidos – parte 2.....................................................................................244
37. Desenvolvendo uma aplicação coesa – parte 1............................................................255
38. Desenvolvendo uma aplicação coesa – parte 2............................................................262
39. Controlando sessões.....................................................................................................269
40. Definindo padrões de codificação................................................................................278
41. Depurando o código.....................................................................................................284
42. Gerando documentos RTF e PDF...................................................................................290
43. Desenvolvendo aplicações completas com PHP – parte 1............................................298
44. Desenvolvendo aplicações completas com PHP – parte 2............................................309
45. Desenvolvendo aplicações completas com PHP – parte 3............................................316
46. Desenvolvendo aplicações completas com PHP – parte 4............................................326
47. Desenvolvendo aplicações completas com PHP – parte 5............................................332
48. Desenvolvendo aplicações completas com PHP – parte 6............................................336
Glossário.............................................................................................................................342
Referências.........................................................................................................................351
Desenvolvimento prático de
1 website - parte 1
Objetivo
Desenvolver uma aplicação prática de site, considerando os
conhecimentos de HTML e CSS.
www.esab.edu.br 7
o início e o fim da tag poderão ser inseridos valores ou outras tags (filhos,
que podem ser outros elementos ou texto).
Salve esse documento com a extensão .html. Para fazer isso no bloco
de notas, você pode utilizar as aspas (por exemplo, use o menu Salvar e
digite “teste.html” e clique no botão “Salvar”).
www.esab.edu.br 8
O resultado desse documento, ao ser aberto no navegador Internet
Explorer, bem como a sua definição no bloco de notas, pode ser visto na
Figura 1.
Agora você deve criar o documento HTML usando formatos, por meio
das tags <h1>, <h2>, ..., <h6>, em que <h2> é um subtítulo de <h1>,
<h3> é um subtítulo de <h2> e, assim, até o limite de seis. Dizer que h1
é subtítulo de h2 implica na formatação de subtópicos e visa criar, de
forma automática, uma diferenciação de tamanho da fonte, para que seja
dada importância maior a títulos de hierarquia maior.
www.esab.edu.br 9
O Código 2 apresenta um documento HTML com uso de formatos,
como pode ser observado na criação do formato 1, iniciado na linha 8,
com seu conteúdo na linha 9 e o encerramento na linha 10. Da mesma
forma, o formato 2 é criado na linha 11, tem seu conteúdo na linha 12 e
é encerrado na linha 12. O resultado pode ser visto na Figura 2.
Figura 2 – Documento HTML com uso de formatos no bloco de notas e seu resultado no navegador.
Fonte: Elaborada pelo autor (2014).
Estudo complementar
O uso do “ç” tem como objetivo inserir o
caractere “ç”, utilizando o padrão ISO. Sem isso não
temos a garantia de que, quando da alteração do
idioma ou do navegador, o caractere será escrito
de forma correta.
A tabela de acentos e caracteres pode ser obtida
clicando aqui.
www.esab.edu.br 10
1.2 Formatando a página utilizando CSS
Os estilos que você aplicará na formatação podem ser definidos de modo
interno (uso das tags <style> como conteúdo de <head>) ou de modo
externo, com a criação de um arquivo de formatação CSS. Com o CSS você
é capaz de estabelecer padrões de formatação e aplicá-los no seu documento.
A formatação dos estilos h1, h2 e p são feitas das linhas 6 a 10, de forma
a especificar uma formatação padrão para cada um deles. Ao utilizar um
estilo, como o uso do h1 na linha 13, ele assume a formatação definida
no estilo. O resultado desse teste pode ser visto na Figura 3.
www.esab.edu.br 11
Figura 3 – Documento HTML com uso de formatos e estilo, no bloco de notas e seu resultado no navegador.
Fonte: Elaborada pelo autor (2014).
Estudo complementar
A documentação relacionada aos padrões HTML e
CSS pode ser obtida no sítio da W3C, clicando aqui. A
página da W3C no Brasil é encontrada clicando aqui.
www.esab.edu.br 12
Desenvolvimento prático de
2 website - parte 2
Objetivo
Desenvolver uma aplicação prática de site considerando os
conhecimentos de formulários e JavaScript, elaborando páginas com
certo dinamismo e executando validações do lado-cliente.
Para criar tabelas, você deve utilizar a tag <table>. Para gerar uma linha
dentro da tabela, usamos a tag <tr> e, para criar uma coluna, usamos a
tag <td>. O número de linhas se dá pelo número de ocorrências da tag
<tr>, enquanto o número de colunas é determinado pelo número de
vezes que utilizamos a tag <td>. Meloni (2000) alerta que o fechamento
incorreto de uma tag de tabela (ou o seu não fechamento) pode causar
grandes problemas no layout do documento.
www.esab.edu.br 13
O Código 4 apresenta uma tabela com duas linhas e duas colunas.
Observe:
www.esab.edu.br 14
O resultado desse teste pode ser visto na Figura 4.
www.esab.edu.br 15
O valor padrão desse parâmetro é application/x-www-form-urlencoded,
no qual os dados são enviados de forma codificada. Quando se remete
um arquivo (entrada de dados do tipo file), você deve usar o valor
multipart/form-data para esse parâmetro (dados são passados em
multipartes, ou seja, em pacotes). Segundo Manzano e Toledo (2008), é
comum o uso do valor text/plain para esse parâmetro, de modo a mandar
os dados de maneira formatada.
Por sua vez, a tag <input> é utilizada para criar campos de entrada de
dados. Você pode usar os parâmetros:
www.esab.edu.br 16
• maxlegth: tamanho máximo de caracteres. Usado para caixas de
texto e senhas.
• value: valor-padrão do conteúdo do campo, podendo ser um texto
digitado, predefinido ou o título de um botão.
• checked: utilizado em botões do tipo radio e checkbox, referindo a
opção selecionada.
• accesskey: tecla de atalho.
Você pode usar entradas de dados por meio da tag <select>, que
permite a criação de uma lista de opções predefinidas, aceitando valores
para os parâmetros name, size (número de linhas que aparecerão na
tela) e multiple, devendo, este último, ser definido quando houver a
possibilidade de seleção de mais de uma opção, usando a tecla “Ctrl”.
Deve-se usar a tag interna <option> para se definir as opções.
Meloni (2000) alerta que, quando você cria formulários, os atributos name
devem ser únicos, pois se tornam variáveis interpretadas pelo seu script.
www.esab.edu.br 17
Figura 5 – Documento HTML com formulário, no bloco de notas e seu resultado no navegador.
Fonte: Elaborada pelo autor (2014).
Código 5 – Documento HTML com formulário no bloco de notas e seu resultado no navegador
01 <html>
02 <body>
03 <form action=»mailto:seuemail@seuemail.
com” method=”post” enctype=”text/plain”>
04 <h1>Este formulário envia um e-mail
para o endereço especificado.</h1>
05 <table border=0>
06 <tr>
07 <td> Nome:</td>
08 <td> <input type=”text” name=”name”
value=”seunome” size=”20”></td>
09 </tr>
10 <tr>
11 <td> Endereço:</td>
12 <td> <input type=”text”
name=”email” value=”seumail” size=”20”></td>
13 </tr>
14 <tr>
15 <td> Mensagem:</td>
16 <td> <textarea rows=5 cols=60
name=”comentario”>comentario</textarea></td>
17 </tr>
18 <tr>
www.esab.edu.br 18
19 <td colspan=2> Eu tenho uma
bicicleta: <input type=”checkbox” name=”bike”
checked></td>
20 </tr>
21 <tr>
22 <td colspan=2> Eu tenho um
carro: <input type=”checkbox” name=”carro”
checked></td>
23 </tr>
24 <tr>
25 <td> Qual é o seu estado? </td>
26 <td>
27 <select name=”estado”>
28 <option>RS</option>
29 <option>SC</option>
30 <option>PR</option>
31 <option>RJ</option>
32 <option>SP</option>
33 </select>
34 </td>
34 </tr>
36 </table>
37 <input type=”submit” value=”Enviar”>
38 <input type=”reset” value=”Limpar”>
39 </form>
40 </body>
41 </html>
www.esab.edu.br 19
2.2 Desenvolvendo validações utilizando JavaScript
Além de dar dinamismo à página executando uma ação – que, no exemplo
anterior, a ação realizada era a de enviar um e-mail com os dados do
formulário, feita diretamente usando apenas componentes do formulário – ,
a utilização de scripts permite agregar certa lógica de programação à pagina,
através de testes condicionais e de laços de repetição, entre outros. Os
scripts são executados do lado do cliente (navegador).
E-mail
Usar @. Possuir pelo menos um ponto
Possuir algum caractere após o caractere depois do @ e
Não possuir espaços.
antes e algum caractere após possuir algum caractere após
o @. o ponto.
www.esab.edu.br 20
07 && (dominio.indexOf(“.”) >=1)&&
(dominio.lastIndexOf(“.”) < dominio.length -
1)) {
08 alert(“E-mail valido”);
09 } else {
10 alert(“E-mail invalido”); }
11 }
12 </script>
www.esab.edu.br 21
• (usuario.search(“ ”)==-1) teste se existe espaço na variável usuário,
segundo explicação dada acima
• (dominio.search(“.”)!=-1) teste se existe o símbolo “.” na variável
usuário, segundo explicação dada acima. Nesse caso retorna
verdadeiro, caso exista.
• (dominio.indexOf(“.”) >=1) testa se a posição onde se encontra o “.”
não é a primeira posição da variável domínio
• (dominio.lastIndexOf(“.”) < dominio.length - 1)) testa se a posição
onde encontra o “.” da variável é menor que seu tamanho. O
resultado disto consiste em testar se a última posição não é “.”
O resultado do Código 6 pode ser visto na Figura 6:
Agora você está pronto para iniciar a programação PHP, que é o assunto
da próxima unidade. Vamos em frente?
www.esab.edu.br 22
3 Introdução à PHP
Objetivo
Apresentar os conceitos da linguagem de programação PHP,
diferenciando linguagem de programação interpretada e linguagem
de programação compilada.
www.esab.edu.br 23
O PHP permite que você utilize scripts de forma embutida ao
documento HTML, ou seja, contém HTML juntamente com códigos
que “executam scripts” ou “comandos”. A linguagem PHP possibilita
também o desenvolvimento de aplicativos GUI, por meio de uma
biblioteca chamada PHP-GTK. Porém, o seu propósito principal é o
desenvolvimento de aplicativos web velozes, simples e eficientes. Suas
principais características são:
• velocidade e robustez;
• pode-se desenvolver de forma estruturada e ou utilizar-se de
orientação a objetos;
• é independente de plataforma (portabilidade);
• tipagem dinâmica: você pode criar as variáveis de qualquer tipo a
qualquer parte do código;
• sintaxe similar a C/C++ e ao Perl;
• open-source: você não precisa pagar licenças para desenvolvê-lo
ou distribuí-lo e pode contribuir para a melhoria da linguagem de
forma voluntária (e se aproveitar das melhorias realizadas por outros
desenvolvedores);
• server-side: o cliente faz a requisição e o servidor devolve o
documento HTML processado.
A Figura 7 mostra um exemplo de código PHP integrado ao HTML.
Acompanhe:
www.esab.edu.br 24
3.2 Diferenças de programação compilada e
interpretada
Como você já estudou anteriormente em outras disciplinas, o
processador do computador entende apenas a linguagem de máquina.
Dessa forma, quando criamos um programa em uma Linguagem de
Programação de alto nível, precisamos de uma ferramenta que traduza o
programa para a linguagem de máquina, permitindo que o processador
o compreenda. Dois tipos comuns de ferramentas que realizam essa
tradução são os compiladores e os interpretadores.
www.esab.edu.br 25
Quando falamos de linguagens de programação, porém, poucas
linguagens no mundo possuem tanto um compilador quanto um
interpretador. Criar um compilador ou um interpretador é uma tarefa
difícil, e geralmente os criadores da linguagem desenvolvem apenas
um dos dois. Além disso, a maioria das linguagens são criadas com um
objetivo em mente, e para cumprir esse objetivo, muitas vezes é mais
apropriado usar um compilador ou um interpretador.
www.esab.edu.br 26
Execução
PS
Programa
Fonte
IM
Saída
Interpretador
Dados de
Entrada
Execução
PM
Dados de
Programa Saída
Entrada
Objeto
www.esab.edu.br 27
A linguagem PHP, foco de nosso estudo, é uma linguagem interpretada,
o que possibilita maior flexibilidade no desenvolvimento de soluções,
dada a maior interação no momento de se gerar os códigos computáveis
pelo sistema operacional, o que é feito no momento de seu uso.
www.esab.edu.br 28
Da mesma forma, podemos observar o uso de PHP na rede social
Facebook. Veja a Figura 10:
www.esab.edu.br 29
4 História da linguagem PHP
Objetivo
Apresentar a história da linguagem PHP.
Segundo Meloni (2000), o PHP foi criado por Rasmus Lerdorf em 1995,
com o nome Personal Home Page Tools, a fim de substituir um conjunto
de scripts de linguagem Perl que ele utilizava no desenvolvimento de
sua página pessoal. Como mais funcionalidades foram requeridas,
Lerdorf escreveu uma implementação C muito maior, que era capaz
de comunicar-se com base de dados e que possibilitava aos usuários
www.esab.edu.br 30
desenvolver simples aplicativos dinâmicos para a internet. Em 1997 foi
lançado o novo pacote da linguagem com o nome de PHP/FI, trazendo a
ferramenta Forms Interpreter (FI), um interpretador de comandos SQL.
www.esab.edu.br 31
Para sua reflexão
Qual foi a importância da disponibilização e da
abertura dos códigos para a comunidade, de
forma a tornar o PHP um software aberto? Você
acha que esse formato continua contribuindo para
a evolução da PHP?
A resposta a essa reflexão forma parte de sua
aprendizagem e é individual, não precisando ser
comunicada ou enviada aos tutores.
www.esab.edu.br 32
verdade não se copia o objeto, mas sim um apontador para ele (um
ponteiro para o conteúdo original). Se se modificar o objeto original,
todas as outras referências a ele também sofrerão a alteração.
PH
PH
PH
5.4
“PH
www.esab.edu.br 33
Arquitetura de aplicação web com
5 PHP
Objetivo
Apresentar as diferenças da programação com execução na máquina-
cliente e na máquina-servidor, bem como vantagens, desvantagens e
limitações.
Agora que passou por uma contextualização, você pode se perguntar: por
que devo usar o PHP? Por que não usar JavaScript? Algumas respostas
podem ser dadas com relação à arquitetura de aplicações web. Nessa
unidade você poderá comparar as arquiteturas client-side, lado-cliente,
por exemplo, com uso de JavaScript, e a arquitetura server-side, ou seja,
com o processamento do lado do servidor, como acontece no PHP.
www.esab.edu.br 34
Ação client-side
Requisição
Cliente Servidor
Página
Normal
Arquivos
www.esab.edu.br 35
5.2 Validações de dados com PHP: vantagens e
desvantagens
Algumas linguagens, como o PHP, funcionam em arquitetura server-
side, ou seja, geram conteúdos dinâmicos, processados no servidor, e os
transformam em HTML, que são então enviados para o cliente. Assim, o
cliente não tem acesso ao código-fonte da aplicação.
Requisição
Cliente Página Dinâmica Servidor
Arquivos Dados
www.esab.edu.br 36
Formulário Banco de dados
1
Requisição
HTTP / HTTPs Script PHP
2
3
Interpretador
Navegador PHP Arquivo
4
HTML
Resultado
5 HTML
Página Web
E-mail
Figura 14 – Arquitetura de aplicação PHP.
Fonte: <www.php.net>.
www.esab.edu.br 37
Porém, observamos que a robustez e, principalmente, que a segurança
proporcionada pela arquitetura são grandes vantagens, suficientes para
levarem à escolha dessa linguagem, principalmente se os formulários são
muito complexos.
www.esab.edu.br 38
Efetuando a instalação e a
6 configuração do servidor Apache e
de ferramenta de edição PHP
Objetivo
Apresentar o servidor Apache, demonstrando a sua necessidade
para o desenvolvimento de aplicações web com PHP, e demonstrar
a instalação do servidor Apache e de ferramentas de edição de PHP
gratuitas (Eclipse).
www.esab.edu.br 39
6.2 Instalando o servidor Apache
Para proceder com a instalação, acesse o site da apache <http://httpd.
apache.org/> e encontre, na lateral esquerda, o hiperlink “download”.
Na página a ser aberta, selecione a versão para instalação no sistema
operacional que você usa. Selecione as versões com o radical “x86”, caso
seu MS-Windows seja 32 bits, ou “x64”, caso use uma versão 64 bits. Se
você utiliza Linux, deverá encontrar versões com “UNIX source”.
www.esab.edu.br 40
Inicie o servidor, executando o arquivo httpd.exe na pasta bin, dentro da
pasta de instalação padrão do servidor apache, escolhida na instalação.
Modifique a entrada de ServerRoot para que aponte para o nível máximo do diretório
Apache;
Modifique a entrada de ServerAdminpara configurar e-mail do administrador;
Modifique a entrada de ServerName para ajustar o nome do servidor;
Modifique a entrada de DocumentRoot para que ele aponte para o diretório onde
estão os documentos HTML. (MELONI, 2000, p. 8)
www.esab.edu.br 41
Figura 16 – Mensagem de retorno do Apache, demostrando que está funcionando corretamente.
Fonte: Elaborada pelo autor (2014).
Agora você pode configurar o PHP para rodar sobre o Apache. Caso
você esteja usando Windows, você deve baixar uma versão estável
(preferencialmente a mais recente) do PHP contida em <http://windows.
php.net/download/>. Selecione as versões com o radical “x86” caso
seu MS-Windows seja 32 bits, ou “x64”, caso use uma versão 64 bits.
Você pode escolher a versão “instalador” que fará todo o trabalho para
você, configurando o PHP no Apache. Caso escolha a versão “binários e
fonte”, você deve seguir esses passos:
www.esab.edu.br 42
AddType application/x-httpd-php .php
# Para o PHP 4
Actionapplication/x-httpd-php “/php/php.exe”
ou
# Para o PHP 5
Actionapplication/x-httpd-php “/php/php-cgi.exe”
Se estiver utilizando Linux, Meloni (2000) ensina que você deve copiar
o arquivo para um diretório acessível (/usr/local/) e descompactar o
arquivo baixado, utilizando “gunzip [nome_do_arquivo].gz”. Esse
comando irá criar um arquivo *.tar, que deverá ser executado com “tar
–xvf [nome_do_arquivo].tar” para gerar o subdiretório /usr/local/php/
com os diretórios.
www.esab.edu.br 43
Adicione as linhas no arquivo de configuração httpd.conf do Apache:
# Para o PHP 4
Action application/”x-httpd-php4/cgi-bin/php”
ou
# Para o PHP 5
Estudo complementar
A documentação sobre Apache e a instalação
do servidor HTTP Apache e PHP podem ser
encontradas clicando aqui ou, na sua versão em
português, clicando aqui.
www.esab.edu.br 44
6.3 O que é eclipse?
Eclipse é um projeto com vários subprojetos relacionados ao
desenvolvimento de sistemas. Para PHP, existe o Eclipse PHP
Development Tools Project (PDT), uma Integrated Development
Environment (IDE), ou seja, uma ferramenta para desenvolvimento.
Para fazer a instalação, baixe a versão mais recente em <http://www.
eclipse.org/pdt/downloads/> e descompacte-a, deixando-a pronta para o
uso. Não são necessários outros passos para a instalação.
Fórum
Caro estudante, dirija-se ao Ambiente Virtual de
Aprendizagem da instituição e participe do nosso
Fórum de discussão. Lá você poderá interagir com
seus colegas e com seu tutor de forma a ampliar,
por meio da interação, a construção do seu
conhecimento. Vamos lá?
www.esab.edu.br 45
Resumo
www.esab.edu.br 46
de segurança foi abordada quando do estudo da arquitetura da PHP,
mostrando que o servidor recebe uma requisição do cliente, monta o
documento HTML (podendo acessar banco de dados, arquivos ou outras
fontes) e devolve somente esse documento HTML processado, que é
apresentado ao cliente (navegador).
www.esab.edu.br 47
7 Embutindo PHP no HTML
Objetivo
Apresentar o uso das tags PHP nas páginas HTML.
www.esab.edu.br 48
Requisição
Cliente Servidor
Página Dinâmica
Arquivos Dados
Figura 17 – Arquitetura server-side.
Fonte: Elaborada pelo autor (2014).
www.esab.edu.br 49
Agora, vamos desenvolver nosso primeiro código PHP embutido em
um documento HTML. Para isso, iremos desenvolver um documento
comum; porém, o seu corpo conterá um comando PHP simples.
Acompanhe no código a seguir:
www.esab.edu.br 50
Figura 18 – Resultado da requisição.
Fonte: Elaborada pelo autor (2014).
www.esab.edu.br 51
Dessa forma, observa-se que o usuário não tem acesso ao código-fonte
da PHP, mas ao documento processado como resposta. O código que
retorna ao navegador pode ser visto no próximo código.
www.esab.edu.br 52
8 Tipos de dados PHP
Objetivo
Apresentar a declaração e o uso de variáveis conhecendo o escopo.
As variáveis escalares contêm somente um valor por vez, enquanto os vetores contêm
uma lista de valores ou outros vetores (produzindo um vetor multidimensional).
www.esab.edu.br 53
• Inteiros: números inteiros sem decimais, como 1, 2013, 999987 ou
-345. Utiliza 8 bits da memória para guardar seus valores, tendo,
portanto um limite que depende da plataforma, mas gira em torno
de 2 bilhões (positivo e negativo). Pode ser representado pela
notação decimal, mais natural para nós, mas aceita notações octal e
hexadecimal. Por exemplo, o decimal 981 é igual ao octal “01725” e
o hexadecimal “0x3D5”.
• Número com ponto flutuante ou duplo (float ou double): números
com casas decimais. Exemplos de números decimais: -1.56,
568.9887 e 9 (sim, você pode utilizar números com ponto flutuante
para receber valores inteiros, mas reservará maior espaço em
memória para ele – apesar de que a PHP faz a conversão para você.
Veremos isso mais à frente). Quando o limite do inteiro é alcançado
(número muito grande), ele usará um número com ponto flutuante.
• Strings: informações de texto e/ou números (inclusive símbolos),
especificados com uso de aspas simples (‘) ou duplas (“).
• Booleano ou lógico: pode receber valores true (verdadeiro) ou false
(falso). É composto por um bit, ou seja, representado por 0 (falso,
desligado) e 1 (verdadeiro, ligado).
• Objetos: utilizado quando aplicamos programação orientada a objeto,
recebe valores de propriedades e métodos definidos na classe a que
esse objeto faz parte. Utilizaremos mais à frente (unidades 31 a 33).
• Recursos: tipo especial de variável. É utilizado para controlarmos
arquivos, conexões de internet e conexão com banco de dados.
Também será visto mais à frente.
Agora que você conhece os tipos de variáveis, vamos aplicar?
www.esab.edu.br 54
O nome das variáveis deve seguir algumas características, como
observamos em Meloni (2000, p. 274):
Inteiros
$a = 1;
$b = -534;
Reais
$c = 15.098;
$d = -9874.098;
Você pode se referir a outra variável dentro de uma string, que será
trocada no momento da execução do script, por exemplo:
www.esab.edu.br 55
$num = 86; //inteiro
Quando executar o script, a variável $text receberá valor “Eu vou repetir
esse processo 86 vezes”.
Dica
Utilize nomes de variáveis que sejam fáceis de
serem entendidos. Por exemplo, se você usar $u
para armazenar a string que contém o nome de
usuário e $s para armazenar a string com a senha,
poderá perder tempo para efetuar alterações.
Se utilizar $usuario e $senha, por exemplo, o
entendimento é facilitado, principalmente quando
se trata de desenvolvimento em equipe, no qual
uma pessoa deve entender o código desenvolvido
por outra pessoa.
www.esab.edu.br 56
O Código 10 cria um script PHP que, ao ser processado, retornará um
HTML ao cliente – um documento, como pode ser visto no código a
seguir.
www.esab.edu.br 57
como pode ser visto na Figura 20. Para processar o arquivo e testar,
abra o seu editor de textos, copie o conteúdo do Código 10 e salve-o na
pasta htdocs de seu servidor Apache HTTP Server com o nome variavel.
php para distribuí-lo (logo esse processo será natural, quando se quiser
“distribuir” a página). Para abrir em seu navegador, utilize o endereço
<http://localhost/variavel.php> ou <http://127.0.0.1/variavel.php>.
www.esab.edu.br 58
Assim como as variáveis locais, a variável global é definida no
fluxo normal da execução do script, porém, pode ser utilizada em
subprogramas (funções), os quais serão vistos mais adiante.
Nesta unidade você viu como criar e utilizar variáveis, ou seja, como
armazenar dados atribuindo valores e, assim, definindo o seu tipo. Na
unidade 9 veremos operações para manipular e alterar os valores dessas
variáveis.
Tarefa dissertativa
Caro estudante, convidamos você a acessar o
Ambiente Virtual de Aprendizagem e realizar a
tarefa dissertativa.
www.esab.edu.br 59
9 Utilizando operadores em PHP
Objetivo
Apresentar a utilização de operadores matemáticos e lógicos em PHP.
$soma = 9 + 1;
www.esab.edu.br 60
Código 12 – Operação de adição utilizando variáveis
01 $a = 5;
02 $b = 4;
03 $soma = $a + $b;
Para concatenar, ou seja, somar duas (ou mais) strings, o operador é “.”,
como pode ser visto no próximo código.
www.esab.edu.br 61
Além dos operadores aritméticos e do operador de atribuição “=”, temos
outros valores de atribuição combinados com operadores aritméticos. Os
operadores de atribuição incluem também “+=”, “-=“ e “.=”.
A linha 4 atribui valor “eu quero ” para a nova variável $s, que é
concatenada, na linha 5, com a string “café”, e o novo valor é atribuído a
essa variável, que passa a ter como valor “eu quero café”.
www.esab.edu.br 62
9.2 Operadores Lógicos
Os operadores lógicos efetuam comparações que sempre retornam valores
lógicos (booleanos) verdadeiros ou falsos. São usados, geralmente, com
comandos condicionais ou de repetição – tais comandos serão abordados
nas próximas unidades.
Por sua vez, algumas operações lógicas são mais complexas, sendo
necessária mais de uma comparação. Para isso, são utilizados conectores.
O “e” é representado por “&&” e retorna valor verdadeiro quando as
sentenças que ele conecta têm valor verdadeiro.
www.esab.edu.br 63
O operador “ou” (“||”) retorna verdadeiro quando ao menos um dos
valores da sentença é verdadeiro. A Tabela 3 apresenta os valores que
seriam retornados a partir dos valores 1 e 2, com os conectores “e” e “ou”.
www.esab.edu.br 64
Código 15 – Exemplo de script PHP com operações matemáticas e lógicas
01 <html>
02 <body>
03 <?php
04 $a = 5;
05 $b = 9;
06 $soma = $a + $b;
07 echo ‘resultado da soma: ‘ . $soma;
08 echo ‘<br>’;
09 $subtracao = $a - $b;
10 echo ‘resultado da subtracao: ‘ . $subtracao;
11 echo ‘<br>’;
12 $multiplicacao = $a * $b;
13 echo ‘resultado da multiplicacao: ‘ .
$multiplicacao;
14 echo ‘<br>’;
15 $divisao = $a / $b;
16 echo ‘resultado da divisao: ‘ . $divisao;
17 $maior = $a > $b;
18 $menor = $a < $b;
19 ?>
20 </body>
21 </html>
www.esab.edu.br 65
na linha 18, recebe o valor verdadeiro, pois 5<9 (cinco é menor que nove).
Não executamos ação com essas variáveis, neste momento, pois, para isso,
precisamos estudar os testes lógicos, assunto da próxima unidade.
Atividade
Chegou a hora de você testar seus conhecimentos
em relação às unidades 1 a 9. Para isso, dirija-se ao
Ambiente Virtual de Aprendizagem (AVA) e responda
às questões. Além de revisar o conteúdo, você estará
se preparando para a prova. Bom trabalho!
www.esab.edu.br 66
Utilizando instruções condicionais
10 – parte 1
Objetivo
Apresentar o uso de condicionais if, else, elseif.
Saiba mais
Você pode assistir a um vídeo com a abertura do
Eclipse PDT, configuração do workspace, criação de
um código PHP e seu uso, clicando aqui.
www.esab.edu.br 67
Essa função de executar testes lógicos e, caso a condição seja atendida
(valor verdadeiro), é realizada através do comando “if ” (se traduzido para
a língua portuguesa, seria equivalente a “se”). Sua sintaxe é:
www.esab.edu.br 68
e $nota3) e dividindo por 3, atribuindo o valor da operação (cujo
resultado é 8, para esse caso) à variável $media. Na linha 8 é feito o teste
lógico (media >=7), cujo resultado é verdadeiro (8 é maior ou igual a
7), provocando a execução do bloco que está entre {“ (na linha 8) e “}
(na linha 10), ou seja, o comando da linha 9 é executado, escrevendo “o
aluno está reprovado” no documento que retornará ao cliente.
Para testar essa aplicação, no Eclipse PDT crie um novo projeto local
(através do menu File -> New -> “Local PHP Project”) com o nome
“unidade10”. Dentro do projeto “unidade10”, crie um novo Arquivo
PHP (“PHP File”) com o nome “media.php” e copie o texto do Código
9. Você pode salvar o arquivo e executar através do seu navegador
através do endereço <http://localhost/unidade10/media.php> ou
<http://127.0.0.1/unidade10/media.php>. Porém, o Eclipse PDT tem
um navegador interno que abre diretamente o seu arquivo através do
botão “Run media”, do menu Run -> Run ou do atalho “Ctrl + F11”.
Observe a Figura 21:
Figura 21 – Eclipse PHP com arquivo “media.php” e do navegador interno, com o resultado da execução.
Fonte: Elaborada pelo autor (2014).
www.esab.edu.br 69
No próximo tópico, veremos instruções que complementam o comando “if”.
www.esab.edu.br 70
caso o aluno não seja aprovado, mas a média seja superior a 5, o aluno
estará em exame. Caso essa condição também não seja satisfeita, o aluno
estará reprovado. O código a seguir apresenta o bloco de comandos que
satisfaz o algoritmo requisitado.
Porém, se a $media tiver valor 6.5, o primeiro teste não será satisfeito
(será falso, porque 6.5 não é maior ou igual a 7) e o fluxo continuará
com o teste da linha 3, que, dessa vez satisfará a condição (6.5 é maior ou
igual a 5) e executará o comando da linha 4.
www.esab.edu.br 71
10.3 Exemplo prático de utilização de condicionais
Para a fixação dos conhecimentos, vamos desenvolver um problema e
construir o script PHP para resolvê-lo. O problema é referente a um
processo de venda.
www.esab.edu.br 72
O Código 21 traz a resolução do problema proposto. As linhas 7 e
8 apresentam a atribuição dos valores às variáveis $valor_unitario e
$quantidade. Na nona linha é atribuído à variável $valor_total o valor
da multiplicação das variáveis citadas anteriormente. O teste lógico é
encontrado na linha 10, ou seja, se o $valor_total for maior ou igual a
100, o comando da linha 11 é executado. Caso o resultado seja falso, é
executado o comando da linha 13. Tanto a linha 11 quanto a linha 13
atribuem valor à variável $desconto. Em seguida, o valor final é calculado
e são apresentadas as saídas com o comando echo nas linhas 16 a 19.
www.esab.edu.br 73
Utilizando instruções condicionais
11 – parte 2
Objetivo
Apresentar o uso de condicionais: switch.
Caso a variável não seja igual à <opcao1>, será feito o teste de igualdade
com a <opção2>, que, caso tenha resultado verdadeiro, executará o bloco
composto por <comandos2> e o comando break, das linhas 6 e 7.
www.esab.edu.br 75
Código 23 – Resolução do problema com if
01 <html>
02 <body>
03 <?php
04 $codigo = 1;
05 if ($codigo = 1) {
06 $meio_de_transporte = 'bicicleta';
07 }
08 elseif ($codigo = 2) {
09 $meio_de_transporte = 'carro';
10 }
11 elseif ($codigo = 3) {
12 $meio_de_transporte = 'ônibus';
13 }
14 elseif ($codigo = 4) {
15 $meio_de_transporte = 'taxi';
16 }
17 else {
18 $meio_de_transporte = ' caminhando';
19 }
20 echo 'meio de transporte: ' . $meio_de_
transporte;
21 ?>
22 </body>
23 </html>
www.esab.edu.br 76
Código 24 – Resolução do problema com switch
01 <html>
02 <body>
03 <?php
04 $codigo = 1;
05 switch ($codigo){
06 case 1:
07 $meio_de_transporte = 'bicicleta';
08 case 2:
09 $meio_de_transporte = 'carro';
10 case 3:
11 $meio_de_transporte = 'ônibus';
12 case 4:
13 $meio_de_transporte = 'taxi';
14 default:
15 $meio_de_transporte = ' caminhando';
16 }
17 echo 'meio de transporte: ' . $meio_de_
transporte;
18 ?>
19 </body>
20 </html>
www.esab.edu.br 77
Código 25 – Resolução do problema com switch e break
01 <html>
02 <body>
03 <?php
04 $codigo = 1;
05 switch ($codigo){
06 case 1:
07 $meio_de_transporte = 'bicicleta';
08 break;
09 case 2:
10 $meio_de_transporte = 'carro';
11 break;
12 case 3:
13 $meio_de_transporte = 'ônibus';
14 break;
15 case 4:
16 $meio_de_transporte = 'taxi';
17 break;
18 default:
19 $meio_de_transporte = ' caminhando';
20 }
21 echo 'meio de transporte: ' . $meio_de_
transporte;
22 ?>
23 </body>
24 </html>
www.esab.edu.br 78
11.3 Operador ternário
O operador ternário é, basicamente, uma forma de se escrever teste
lógico “if ” e “else” em uma única linha, com a sintaxe:
O Código 20, por exemplo, poderia ser escrito em somente uma linha,
sendo:
echo $media >= 7 ? ‘o aluno está aprovado’ : ‘o aluno não está aprovado’;
www.esab.edu.br 79
Utilizando instruções de repetição
12 – parte 1
Objetivo
Apresentar a estrutura de fluxo de repetições: while, for, foreach.
www.esab.edu.br 80
Observe que seria necessário repetir o conteúdo da linha 4 cem vezes! De
outro modo, utilizando o comando while, podemos controlar a repetição
do comando dessa linha, utilizando um teste lógico e uma variável
para determinar o número de vezes, que deve ser repetido. A sintaxe do
comando “while” é apresentada no código a seguir.
www.esab.edu.br 81
executando, então, o bloco que compreende o comando while (linhas 6 a
8). Executando a linha 6, o retorno será ‘1 - eu aprenderei PHP <br>’. Na
linha 7, é incrementada a variável $i, que passa a ter valor 2. Ao encontrar
o fim do bloco do comando while, na linha 8, retorna-se à linha 5 e faz-
se um novo teste. Como o resultado é verdadeiro (2 é menor ou igual a
100), ele volta a executar o bloco das linhas 6 a 8 (escrevendo a frase “2
- eu aprenderei PHP <br>” e incrementando a variável $i, que agora tem
valor 3) e retorna à linha 5. Ele repete isso até que o valor de $ seja igual a
101. Nesse caso, ao retornar à linha 5, o teste lógico terá resposta falsa e o
fluxo do programa continua a partir da linha 9.
www.esab.edu.br 82
• expressão a ser executada no final de cada interação: normalmente usada
para alterar o valor da variável, incrementando ou decrementando.
Assim, a sintaxe é apresentada através do exemplo, no Código 29, que
traz a repetição da frase usando o comando for.
www.esab.edu.br 83
Resumo
www.esab.edu.br 84
As instruções de repetição foram estudadas na unidade 12. Essas
estruturas são utilizadas para efetuar comandos, ou blocos de comandos,
repetidas vezes. Foram abordadas as instruções while e for. A instrução
foreach foi citada.
www.esab.edu.br 85
Utilizando instruções de repetição
13 – parte 2
Objetivo
Apresentar a estrutura de fluxo de repetições “do..while” e
desenvolver um exemplo.
www.esab.edu.br 86
No Código 30 observamos que, com a sintaxe do comando “do..while”,
o bloco de comandos é executado uma vez e o teste lógico só é realizado
após a execução. Caso a condição seja verdadeira, o fluxo do programa
promove a volta à linha 1 e executa novamente o bloco de comandos.
Isso é feito enquanto a condição tiver resultado verdadeiro. Quando a
condição for falsa, o fluxo volta a seguir normalmente, ou seja, segue na
linha logo abaixo da linha 3.
1 – eu aprenderei PHP
2 – eu aprenderei PHP
(...)
www.esab.edu.br 87
Vamos imaginar que, na linha 4, atribuímos 150 à variável $i, ou seja,
escrevemos “$i = 150;”. O fluxo do programa iria executar o bloco do
comando do..while (visto que ele ainda não realizou o teste lógico) e,
com a execução da linha 6, teríamos a saída “150 - eu aprenderei PHP”.
Somente na linha 8 encontraremos o teste lógico que, com o valor falso
(150 não é menor ou igual a 100), não se repetiria mais, seguindo o fluxo
natural na linha 9.
www.esab.edu.br 88
A sequência inicia com 0 e 1 e o termo posterior é equivalente à soma
dos dois anteriores, ou seja, o terceiro termo é a soma do primeiro e o
segundo, formando uma série infinita (0, 1, 1, 2, 3, 5, 8, 13 ...), cuja
tendência de aproximação da dízima periódica é 0,33333(...).
Dessa forma, temos que obter os dois primeiros termos e a sua soma, que
equivalerá ao terceiro termo. Na próxima interação, devemos guardar
o segundo e terceiro termos, cuja soma atribuirá valor ao quarto e
assim sucessivamente, repetindo 18 vezes (como já conhecemos os dois
primeiros termos, para encontrarmos 20 termos, teremos que repetir 18
vezes). O Código 32 apresenta a solução desse problema.
www.esab.edu.br 89
Código 32 – Repetindo a frase utilizando o comando while
01 <html>
02 <body>
03 <?php
04 /* Inicializa variáveis com os primeiros
05 valores da sequência Fibonacci */
06 $a = 0;
07 $b = 1;
08 $cont = 3;
09 /* para mostrar os primeiros 2 termos*/
10 echo $a."<br>".$b."<br>";
11 while ($cont <= 20)
12 {
13 /* Define novos valores a partir dos dois
anteriores */
14 $soma = $a + $b;
15 /* mostra na tela o termo referente a
soma*/
16 echo $soma."<br>";
17 /* o segundo item de uma interação, será o
primeiro termo da próxima intereção*/
18 $a = $b;
19 /* a soma de uma interação (próximo termo),
será o segundo termo da próxima intereção*/
20 $b = $soma;
21 $cont++;
22 }
23 ?>
24 </body>
25 </html>
www.esab.edu.br 90
da interação atual, recebendo, nesse ponto, valor 1. O segundo termo (da
próxima interação) recebe o valor da soma na linha 20 e, nesse ponto,
$a tem valor 1 e $b tem valor 2. A variável $cont é incrementada em 1
(armazenando, agora, 4) e o fluxo é retornado à linha 11 para executar
novamente o teste lógico. O teste lógico é verdadeiro e o fluxo repetirá
a execução, cuja soma será 3 (apresentada na tela) e $a e $b receberão,
portanto, 2 e 3 para a próxima interação. Na décima oitava interação, o
valor de $cont, ao ser incrementado, armazenará valor 21 e, ao retornar
ao teste lógico, este será falso. Dessa forma, o fluxo volta a ser executado
após o bloco do comando “while” e vai para a linha 23, que encerra a
execução do script.
Salve seu script na pasta “htdocs” do seu servidor Apache HTTP (se
você estiver utilizando Eclipse PDT e tiver configurado o workspace
para apontar para essa pasta, ao salvar o arquivo ele ficará disponível para
execução, ou seja, será distribuído automaticamente).
www.esab.edu.br 91
Desenvolvendo uma página
14 simples com uso de PHP
Objetivo
Desenvolver uma aplicação simples de pedido com uso de PHP e
aplicar os conhecimentos aprendidos nesta unidade.
Imagine que você vai comprar uma bebida. Para isso, precisa escolher
uma bebida em uma caixa de seleção (combobox) e também a
quantidade desta. Dessa maneira, a resposta deve ser a quantidade de
bebida, bem como a hora em que foi feito o pedido.
www.esab.edu.br 92
Código 33 – Formulário em HTML para seleção de bebidas
01 <html>
02 <head>
03 <title> Formulário de compra de bebidas. </
title>
04 </head>
05 <body>
06 <form method="POST" action="">
07 <table border=0>
08 <tr>
09 <td> Escolha uma bebida:</td>
10 <td> <SELECT name="bebida">
11 <OPTION value="1"> Café </OPTION>
12 <OPTION value="2"> Suco </OPTION>
13 <OPTION value="1"> Refrigerante
</OPTION>
14 <OPTION value="1"> Cerveja </
OPTION>
15 </SELECT>
16 </td>
17 </tr>
18 <tr>
19 <td> Quantidade: </td>
20 <td> <INPUT type="text"
name="quantidade" size=5> </td>
21 </tr>
22 </table>
23 <INPUT type="submit" value="Enviar">
24 </form>
25 </body>
26 </html>
www.esab.edu.br 93
Agora vamos descrever o script PHP que processará os valores lidos nesse
formulário e escreverá a resposta solicitada. O Código 34 apresenta o
script PHP que fará esse processamento.
Estudo complementar
A lista de parâmetros possíveis para a função
date() pode ser obtida clicando aqui.
www.esab.edu.br 94
Para chamar esse código, devemos alterar a linha 6 do Código 34,
de modo a chamar o script “bebida.php”. Isso é feito incluindo-se a
chamada do script no parâmetro “action”, que passa a ser escrito da
seguinte forma: “<form method=”POST” action=”bebida.php”>”. Salve
novamente esse formulário e execute (com o botão “Run” do seu Eclipse
PDT ou abrindo o endereço no seu navegador). Lembre-se de confirmar
se o seu servidor Apache HTTP Server está ativo.
www.esab.edu.br 95
14.2 Utilizando comando “if..else” para determinar
um retorno
Vamos continuar utilizando o aplicativo de escolha da bebida. Mas agora,
com base nessa escolha, o script deve apresentar o valor total da compra,
considerando que cada opção tem um preço. As opções de bebida são:
“café”, “suco”, “refrigerante” e “cerveja”, que custam, respectivamente,
1.50, 3.00, 2.50 e 3.50 (utilizamos pontos para separar as casas decimais,
pois essa é a notação da linguagem PHP – e maioria das linguagens).
www.esab.edu.br 96
Dessa forma, foram inseridas as linhas de 6 a 14, a fim de realizar o teste
lógico com base no valor da variável $bebida, atribuindo valor referente à
variável $valor_unitário, conforme descrito. A linha 15 atribui à variável
$valor_total o valor da multiplicação das variáveis $valor_unitario e
$quantidade, apresentando seu valor na linha 16.
www.esab.edu.br 97
Código 36 – Script PHP para o processamento do pedido de bebida
01 <?php
02 $quantidade = $_POST["quantidade"];
03 $bebida = $_POST["bebida"];
04 date_default_timezone_set('America/Sao_
Paulo');
05 echo "Você comprou $quantidade
unidades de bebida $bebida na data " .
date('d-m-Y H:i:s');
06 if ($bebida = 1) {
07 $valor_unitario = 1.50;
08 } elseif ($bebida = 2) {
09 $valor_unitario = 3.00;
10 } elseif ($bebida = 3) {
11 $valor_unitario = 2.50;
12 } else {
13 $valor_unitario = 3.50;
14 }
15 $valor_total = $valor_unitario *
$quantidade;
16 echo "Valor total da compra é $valor_
total";
17 for($n_copo=1; $n_copo <= $quantidade; $n_
copo++){
18 echo “<br> servindo copo $n_copo”;
19 }
20 ?>
www.esab.edu.br 98
Nesta unidade desenvolvemos um aplicativo dinâmico e interativo, que
contém um formulário que chama um script PHP, processando o pedido
de bebida, utilizando os valores passados pelos formulários e efetuando
testes lógicos e estruturas de repetição.
www.esab.edu.br 99
Armazenando e recuperando dados
15 – parte 1
Objetivo
Apresentar o uso de arquivos externos, salvando dados e
possibilitando a sua recuperação posterior.
www.esab.edu.br 100
• w: Abre um arquivo somente para gravação, criando o arquivo caso não exista, ou
deletando todo seu conteúdo, caso exista. Coloca o ponteiro no início do arquivo;
• w+: Abre o arquivo existente para ler dados existentes e gravar novos dados. O
ponteiro é colocado no início do arquivo, antes de qualquer dado;
• a: Abre um arquivo somente para gravação, criando o arquivo caso não exista, mas
não deleta o conteúdo, caso o arquivo exista. Coloca o ponteiro no final do arquivo,
depois de todos os dados;
• a+: Abre o arquivo existente para ler dados existentes e gravar novos dados, criando
um novo arquivo, caso não exista, mas não deleta o conteúdo, caso o arquivo exista.
Coloca o ponteiro no final do arquivo, depois de todos os dados.
Portanto, caso queira abrir o arquivo apenas para leitura, você pode
utilizar o modo r (read – escrever). Para gravar dados, você pode utilizar
o modo a (append – acrescentar). Estes serão os modos mais utilizados.
Dica
É necessário que o arquivo seja acessível ao servidor,
ou seja, que não se trate de uma pasta protegida.
Normalmente, você deve apontar o caminho do
arquivo para alguma pasta do Apache ou que
esteja “aberta” a esse servidor por meio de suas
configurações, de modo a possibilitar o acesso.
Caso esteja utilizando Windows (ou ambiente do
servidor), use a barra invertida, como no endereço
“c:\\Apache\\htdocs\\arquivo.txt”.
Caso esteja utilizando Linux, use o formato desse
sistema operacional, como no exemplo “usr/local/
apache/htdocs/arquivo.txt”.
fwrite(<variavel_ponteiro>, <dados>);
www.esab.edu.br 101
Ao abrir, utilizar (para leitura ou gravação de dados) e finalizar o uso do
arquivo é necessário fechá-lo, de modo a salvá-lo e deixá-lo novamente
disponível. A sintaxe é:
fclose(<variavel_ponteiro>);
Caso não feche o arquivo, ele pode ficar indisponível para uso ou não
salvar suas alterações.
Para abrir ou criar um arquivo, caso não exista, é necessário salvar dados
e fechar, para isso, executar as operações anteriormente citadas (fopen,
fwrite e fclose).
www.esab.edu.br 102
Figura 24 – Eclipse PHP com código ao fundo e arquivo txt salvo com a execução.
Fonte: Elaborada pelo autor (2014).
fread(<variavel_ponteiro>, <tamanho>);
www.esab.edu.br 103
Código 38 – Script PHP para recuperar dados de um arquivo
01 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/
loose.dtd">
02 <html>
03 <head>
04 <meta http-equiv="Content-Type" content="text/
html; charset=ISO-8859-1">
05 <title> Formulário de compra de bebidas. </
title>
06 </head>
07 <body>
08 <?php
09 $arquivo = fopen('c:\\Apache\\htdocs\\
cliente.txt', 'r');
10 $textoLinha=fread($arquivo,
filesize('c:\\Apache\\htdocs\\cliente.txt'));
11 echo $textoLinha;
12 ?>
13 </body>
14 </html>
www.esab.edu.br 104
A Figura 25 traz o Eclipse PDT com o Código 40 ao fundo e sua
execução, em navegador, apresentando o resultado do processamento.
Observe que os dados que foram apresentados são os mesmos que foram
inseridos no arquivo através do Código 38 (Figura 24). Dessa forma,
salvamos um dado em um arquivo e recuperamos esse mesmo dado para
apresentar na tela.
www.esab.edu.br 105
Armazenando e recuperando dados
16 – parte 2
Objetivo
Desenvolver a aplicação e o uso de arquivos externos, salvando dados
e possibilitando a sua recuperação posterior.
Mãos à obra!
www.esab.edu.br 106
Código 39 – Formulário para obter dados de cliente
01 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/
loose.dtd">
02 <html>
03 <head>
04 <meta http-equiv="Content-Type" content="text/
html; charset=ISO-8859-1">
05 <title> Formulário de compra de bebidas. </
title>
06 </head>
07 <body>
08 <form action="cliente_salvar.php"
method="POST" id=form_bebida>
09 <table border=0>
10 <tr>
11 <td> Nome: </td>
12 <td> <INPUT type="text" name=nome
size=50 id=quantidade> </td>
13 </tr>
14 <tr>
15 <td> Idade: </td>
16 <td> <INPUT type="text" name=idade
size=4> </td>
17 </tr>
18 <tr>
19 <td> Sexo:</td>
20 <td> <SELECT name=sexo id=sexo>
21 <OPTION value="1"> Masculino </
OPTION>
22 <OPTION value="2"> Feminino </
OPTION>
23 </SELECT>
24 </td>
25 </tr>
26 <tr>
27 <td> E-mail: </td>
28 <td> <INPUT type="text" name=email
size=30> </td>
29 </tr>
30 </table>
31 <INPUT type="submit" value="Enviar">
32 </form>
33 </body>
34 </html>
www.esab.edu.br 107
Vamos salvar o Código 39 com o nome “cliente_formulario.php”.
Observe que na linha 8 a ação do formulário chama o script “cliente_
salvar.php”, que será desenvolvido a seguir.
www.esab.edu.br 108
Figura 26 – Navegação em “cliente_formulario.php”, resposta com o
processamento de “cliente_salvar.php” e arquivo “cliente.txt” salvo.
Fonte: Elaborada pelo autor (2014).
Agora que você pode salvar o arquivo, você também pode recuperar
essas informações a qualquer momento. Veremos como fazer isto no
próximo tópico.
www.esab.edu.br 109
16.2 Desenvolvendo tela para apresentar dados do
cliente
Para recuperar os dados salvos no arquivo, vamos apresentá-los em um
documento que os contenha linha a linha. Como visto na unidade
15, devemos abrir o arquivo, ler seus dados e fechá-los. O Código 41
apresenta o código que executa essa função:
www.esab.edu.br 110
Na linha 11, temos a linha do texto na posição na qual se encontra o
cursor. Dessa vez, utilizando o comando “fgets” que recupera a linha
em que a leitura está posicionada e reposiciona para a linha seguinte,
apresentamos, na tela, o comando “echo” (observe que é concatenado
com “<br>” para inserir uma nova linha no HTML resultante). O
arquivo é fechado na linha 13.
Até agora não vimos como manipular tais textos de modo a separar os
campos, no entanto, isto será feito mais à frente, na unidade 19.
www.esab.edu.br 111
Utilizando vetores e matrizes –
17 parte 1
Objetivo
Apresentar o uso e a manipulação de vetores (arrays) e dos comandos
de manipulação.
$a
www.esab.edu.br 112
Na representação gráfica da Figura 28, uma variável $a (um vetor)
armazena cinco valores (1, 2, 4, 8 e 16).
$a $a[0][0] $a[0][0]
$a[0] 2 0
$a[1] $a[1][0] $a[1][1] $a[1][2]
$a[2] 2 0 0
$a[3] $a[2][0] $a[2][1]
$[4] 2 0
$a[3][0] $a[3][1] $a[3][2]
2 0 0
$a[4][0] $a[4][1] $a[4][2]
2 0 0
Figura 29 – Representação gráfica de uma matriz.
Fonte: Elaborada pelo autor (2014).
www.esab.edu.br 113
Conhecendo as diferenças e tomando esse cuidado quando usamos o
termo matriz, vamos começar a usar esses tipos de variáveis?
www.esab.edu.br 114
Levando em consideração a declaração do Código 42, o Código 43
cria uma variável $i com valor 4 na linha 1 e, ao escrever a posição $i
(com valor 4), buscará o valor da quinta posição, ou seja, $cores[4], que
equivale ao valor “preto”.
www.esab.edu.br 115
operação com a variável $cor utilizará esse valor. Ao terminar o bloco de
comandos, ele retorna ao início do laço de repetição e atribui o valor do
próximo elemento à variável $cor e, assim, repete o bloco de comandos
até o último elemento do vetor.
Observe que, dessa forma, mesmo que você não saiba quantos elementos
temos no vetor, ele percorrerá todos os elementos.
Agora que você já estudou como criar e percorrer um vetor, vamos ver
algumas operações a serem feitas com esses vetores.
Para criar o vetor usando essa função, você pode atribuir a uma variável
o valor da chamada dessa função com os termos a serem inseridos. Ou
seja, podemos inserir vetor $cores com os mesmos valores do Código
44, utilizando o comando “$cores = array(“vermelho”, “azul”, “amarelo”,
“branco”, “preto”);”
www.esab.edu.br 116
Para retirar o último elemento do vetor, você pode usar o comando
array_pop, assim como usar o comando array_shift para retirar o
primeiro elemento.
Estudo complementar
Nas últimas versões, os vetores representam
mapas ordenados, possibilitando o controle
através de uma chave, sem que isto interfira no
modo usado anteriormente para se fazer a gestão
das variáveis vetoriais. Você pode pesquisar mais
sobre isto no material disponível clicando aqui.
Tarefa dissertativa
Caro estudante, convidamos você a acessar o
Ambiente Virtual de Aprendizagem e realizar a
tarefa dissertativa.
www.esab.edu.br 117
Utilizando vetores e matrizes –
18 parte 2
Objetivo
Apresentar o uso e a manipulação de matrizes (arrays) e dos
comandos de manipulação.
www.esab.edu.br 118
$a $a[0][0] $a[0][0]
$a[0] 2 0
$a[1] $a[1][0] $a[1][1] $a[1][2]
$a[2] 2 0 0
$a[3] $a[2][0] $a[2][1]
$[4] 2 0
$a[3][0] $a[3][1] $a[3][2]
2 0 0
$a[4][0] $a[4][1] $a[4][2]
2 0 0
Figura 29 – Representação gráfica de uma matriz.
Fonte: Elaborada pelo autor (2014).
$a[0][0] = 2;
www.esab.edu.br 119
Considerando a matriz representada na Figura 29, ao executar a primeira
linha do Código 46, na primeira interação será atribuído à variável
$linhas_a o primeiro elemento de $a, que, por sua vez, é um vetor
composto pelos valores 2 e 0 (posições $a[0][0] e $a[0][1], com valores
2 e 0 respectivamente). O comando da segunda linha percorre o vetor
$linhas_a, ou seja, para essa interação o vetor composto pelos elementos
2 e 0. Dessa forma, atribui-se o valor 2 para a variável $elemento_a
na primeira interação e imprime seu valor (concatenado com o texto
“<br>”, que fará uma quebra de linha no documento HTML). Por sua
vez, ele termina as interações do comando mais interno, ou seja, percorre
o vetor atribuído $linha_a, atribuindo o valor de $a[0][1] (segundo
elemento do vetor em questão) à variável $elemento_a.
www.esab.edu.br 120
Código 47 – Percorrendo uma matriz utilizando foreach
01 $a = array(
02 array(2,0),
03 array(2,0, 0),
04 array(2,0),
05 array(2,0, 0),
06 array(2,0, 0),
07 );
www.esab.edu.br 121
Código 48 – Atribuindo valores à matriz de notas
01 $nota[0][0] = 7;
02 $nota[0][1] = 8;
03 $nota[0][2] = 7;
04 $nota[1][0] = 6;
05 $nota[1][1] = 7;
06 $nota[1][2] = 8;
www.esab.edu.br 122
Atividade
Chegou a hora de você testar seus conhecimentos
em relação às unidades 10 a 18. Para isso, dirija-se ao
Ambiente Virtual de Aprendizagem (AVA) e responda
às questões. Além de revisar o conteúdo, você estará
se preparando para a prova. Bom trabalho!
www.esab.edu.br 123
Resumo
Para armazenar vários valores de mesmo tipo e uma única variável usamos
variáveis dimensionais, como vetores. Eles são capazes de armazenar um
conjunto de valores e seus usos foram vistos na unidade 17.
www.esab.edu.br 124
19 Manipulando strings
Objetivo
Apresentar comandos para manipulação de strings, formatando,
unindo e dividindo, comparando, localizando e substituindo.
www.esab.edu.br 125
Para eliminar excesso de espaços (no início e/ou no final de uma variável
string), você pode usar as funções trim(), ltrim() e rtrim(). De acordo com
Thomson e Welling (2005, p. 110), os caracteres que essas funções eliminam
“[...] por padrão são nova linha e retorno do carro (\n e \r), tabulações
horizontais (\t e \x0B), caracteres de final de linha (\0) e espaços”.
www.esab.edu.br 126
A função AddSlashes() recebe uma string e retorna uma string
reformatada, aplicando a barra invertida quando necessário. Uma string
“$string = ‘Minha string tem “ uma aspas’;”, ao ser reformatada, por
exemplo, com “$stringReformatada = AddSlashes($string);”, atribuiria
‘Minha string tem \“ uma aspas’ à variável $stringReformatada.
Por sua vez, a função StripSlashes(), que também recebe uma string e
retorna uma string reformatada, remove as barras.
www.esab.edu.br 127
poderíamos tratar melhor os dados e apresentá-los melhor na tela,
conforme apresentado no Código 50 (com base no Código 41).
www.esab.edu.br 129
Além de comparação, essa função pode ser utilizada para ordenação de
variáveis. A função strcasecmp() é idêntica, exceto por não diferenciar
maiúsculas e minúsculas.
Código 51 – Script para localizar parte de uma string em outra mais longa
01 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/
loose.dtd">
02 <html>
03 <body>
04 <?php
05 $palheiro = 'Texto longo a ser procurado,
ser encontrado’;
06 $agulha = 'ser';
07 echo strstr($palheiro, $agulha);
08 ?>
09 </body>
10 </html>
www.esab.edu.br 130
Caso não encontre nenhuma ocorrência, retornará o texto “false”.
A função strchr() funciona da mesma forma e com as mesmas
características da strstr(). As variantes da função strstr() são: stristr(), que
não faz distinção entre maiúsculas e minúsculas; e a função strrch(), que
retorna o texto a partir da última ocorrência da string procurada (caso
seja aplicada no Código 51, trocando a função strstr() por strrch(), o
retorno seria “ser”).
Código 52 – Script para localizar parte de uma string em outra mais longa
01 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/
loose.dtd">
02 <html>
03 <body>
04 <?php
05 $palheiro = 'Texto longo a ser procurado,
ser encontrado';
06 $agulha = 'ser';
07 $achou = true;
08 $intInicio = 0;
09 while ($achou == true) {
10 $achou = strpos($palheiro, $agulha,
$intInicio);
11 if ($achou != false) {
12 echo 'Encontrou na posição '. $achou .
'<br>';
13 $intInicio = $achou + strlen($agulha);
14 $achou = true;
15 }
16 }
17 ?>
18 </body>
19 </html>
www.esab.edu.br 131
O Código 52 apresenta código que procura várias ocorrências da
palavra ‘ser’ em uma string com valor ‘Texto longo a ser procurado,
ser’, armazenada na palavra $palheiro. A primeira interação procura a
palavra iniciando a busca na primeira posição (controlada pela variável
$intInicio, inicializada na linha 8 com o valor 0). O presente código
procura até achar alguma ocorrência, controlado pela variável $achou.
Na linha 10 é armazenado o número inteiro da posição encontrada ou o
valor false, caso não encontre. Caso encontre (teste diferente de false, ou
seja, um número) apresenta, na tela a literal, ‘Encontrou na posição ’ e a
posição que encontrou (armazenada na variável $achou). Na linha 13, ele
soma o tamanho da palavra ‘ser’ ao valor de início, para que a próxima
busca seja iniciada na posição que termina a ocorrência encontrada e
altera novamente a variável de controle, de modo a executar de novo.
Desse modo, você pode localizar uma ou mais ocorrências de uma string
dentro de outra. Mas, e se você precisar substituir uma parte de string?
Vamos ao próximo tópico e veremos como fazer isso.
www.esab.edu.br 132
Fórum
Caro estudante, dirija-se ao Ambiente Virtual de
Aprendizagem da instituição e participe do nosso
Fórum de discussão. Lá você poderá interagir com
seus colegas e com seu tutor de forma a ampliar,
por meio da interação, a construção do seu
conhecimento. Vamos lá?
www.esab.edu.br 133
Desenvolvendo aplicativo,
20 manipulando strings
Objetivo
Desenvolver pequena aplicação, comparando, localizando e
substituindo partes de uma string.
www.esab.edu.br 134
08 <form action="cliente_salvar.php" method="POST"
id=form_bebida>
09 <table border=0>
10 <tr>
11 <td> Nome: </td>
12 <td> <INPUT type="text" name=nome size=50
id=quantidade> </td>
13 </tr>
14 <tr>
15 <td> Idade: </td>
16 <td> <INPUT type="text" name=idade size=4> </td>
17 </tr>
18 <tr>
19 <td> Sexo:</td>
20 <td> <SELECT name=sexo id=sexo>
21 <OPTION value="1"> Masculino </OPTION>
22 <OPTION value="2"> Feminino </OPTION>
23 </SELECT>
24 </td>
25 </tr>
26 <tr>
27 <td> E-mail: </td>
28 <td> <INPUT type="text" name=email size=30> </td>
29 </tr>
30 <tr>
31 <td> Endereço completo: </td>
32 <td> <INPUT type="text" name=endereco size=60> </
td>
33 </tr>
34 <tr>
35 <td> Cidade: </td>
36 <td> <INPUT type="text" name=cidade size=30> </td>
37 </tr>
38 <tr>
39 <td> CEP: </td>
40 <td> <INPUT type="text" name=cep size=8> </td>
41 </tr>
42 <tr>
43 <td> Telefone: </td>
44 <td> <INPUT type="text" name=telefone size=20> </
td>
45 </tr>
46 </table>
47 <INPUT type="submit" value="Enviar">
48 </form>
49 </body>
50 </html>
www.esab.edu.br 135
Foram adicionadas as linhas 30 a 41 para salvar o endereço, a cidade e o
CEP. Vamos alterar o Código 40 de modo a formatar o CEP. Lembre que
o CEP tem oito números e deve ser colocado um hífen na sexta posição.
www.esab.edu.br 136
Figura 32 – Formulário para inserção de dados e resultado, apresentando CEP formatado.
Fonte: Elaborada pelo autor (2013).
www.esab.edu.br 137
Código 55 – Script que recupera as informações enviadas e formata o logradouro
01 <?php
02 $nome = $_POST["nome"];
03 $idade = $_POST["idade"];
04 $email = $_POST["email"];
05 $sexo = ($_POST["sexo"] ==1) ?
'Masculino' : 'Feminino';
06 $endereco = $_POST["endereco"];
07 $cidade = $_POST["cidade"];
08 $cep = $_POST["cep"];
09 $telefone = $_POST["telefone"];
10 $cepFormatado = substr($cep, 0, 5) . '-' .
substr($cep, 5, 3);
11 echo $cepFormatado;
12 $pos = strpos($endereco, ',');
13 if ($pos != false) {
14 $logradouro = substr($endereco, 0, $pos);
15 } else {
16 $logradouro = $endereco;
17 }
18 echo ‘<br>’. $logradouro;
19 ?>
www.esab.edu.br 138
20.3 Substituindo parte do endereço
Caso o $endereco retorne um endereço com parte da string ‘Rua’ e você
queira formatar, substituindo por ‘R.’, usaremos a função str_replace(),
conforme Thomson e Welling (2005). O Código 56 apresenta a solução.
www.esab.edu.br 139
Manipulando expressões regulares
21 – parte 1
Objetivo
Apresentar o uso e expressões regulares, definindo expressões e os
seus conjuntos de caracteres e subexpressões.
www.esab.edu.br 140
21.2 Definindo expressões e seus conjuntos de
caracteres e subexpressões
Para definir uma expressão regular podemos utilizar conjuntos de
caracteres, determinando, dessa forma, um padrão. Encontramos, por
exemplo, junto às palavras cat, nat e mat, um padrão, definido por uma
letra e o radical “at”.
www.esab.edu.br 141
Tabela 4 – Classe de caracteres para utilização nas expressões regulares no estilo POSIX.
Classe POSIX Intervalo Localiza
[:upper:] [A-Z] Letras maiúsculas.
[:lower:] [a-z] Letras minúsculas.
[:alpha:] [A-Za-z] Letras maiúsculas e minúsculas, caracteres alfabéticos.
[:alnum:] [A-Za-z0-9] Letras e números, caracteres alfanuméricos.
[:digit:] [0-9] Números, dígitos decimais.
[:xdigit:] [0-9A-Fa-f] Números, dígitos hexadecimais.
[:punct:] [.,!?:...] Sinais de pontuação.
[:blank:] [ \t] Espaço e TAB (guias).
[:space:] [ \t\n\r\f\v] Caracteres de espaço em branco.
[:cntrl:] - Caracteres de controle.
[:graph:] [^ \t\n\r\f\v] Caracteres imprimíveis.
[:print:] [^\t\n\r\f\v] Imprimíveis e o espaço.
Da mesma forma que você pode definir um tipo e quantas vezes esse tipo
se repete, através de alguns símbolos ou chaves “{“ e “}”; o símbolo “?”
significa zero ou um (uma ou nenhuma ocorrência); o asterisco (“*”)
representa zero, um ou mais; o símbolo “+” representa um ou mais, ou
seja, no mínimo um. Quando usamos chaves, determinamos número
exato, mínimo ou máximo, em que {x} é o número exato de vezes e
{n,m} representa que podemos ter de n até m ocorrências.
Podemos dizer que o CEP deve iniciar com cinco caracteres numéricos,
ter um hífen e terminar com três caracteres numéricos, não aceitando
outros caracteres e podendo ser definido por: “^[0-9]{5}-[0-9]{3}$”.
Nessa expressão, determinamos que números (determinados por [0-9])
são repetidos cinco vezes (determinado por [5]), um hífen, e mais três
números ([0-9]{3}), e não aceita nenhum outro caractere ao final.
www.esab.edu.br 142
Thomson e Welling (2005) apresentam como aplicações possíveis a
busca pela ocorrência de palavras em algum texto – procurando em
uma variável string a ocorrência dos padrões especificados em uma
expressão (por exemplo, em um e-mail de cliente, obter ocorrência de
palavras chaves para encaminhar o e-mail, com palavras como “compra”,
“serviço ao cliente” ou “troca”, ou seja, da expressão “compra| serviço ao
cliente|troca”); e para validação do e-mail.
Fonte: <http://www.ibm.com/developerworks/br/library/os-php-regex1/>.
www.esab.edu.br 143
A Tabela 6 apresenta exemplos de expressões regulares e de sua aplicação.
Fonte: <http://www.marciobrasil.net.br/expressao-regular/exemplos-de-expressoes-regulares-regex-ou-er.html>.
www.esab.edu.br 144
Manipulando expressões regulares
22 – parte 2
Objetivo
Apresentar o uso e expressões regulares, localizando, substituindo e
aplicando para validações.
www.esab.edu.br 145
Código 57 – Script para validação de CEP
01 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/
loose.dtd">
02 <html>
03 <head>
04 <meta http-equiv="Content-Type" content="text/
html; charset=ISO-8859-1">
05 <title> Validação de e-mail. </title>
06 </head>
07 <body>
08 <?php
09 $cep = "88034-000";
10 $padraoCEP = "^[0-9]{5}-[0-9]{3}$";
11 $avaliaCep = ereg($padraoCEP, $cep);
12 if(!$avaliaCep) {
13 echo "CEP nao Valido";
14 }
15 else
16 {
17 echo "CEP Valido";
18 }
19 ?>
20 </body>
21 </html>
Observe o Código 57: na linha 9 é definido um valor string que será usado
para localizar (ou não) uma expressão regular. Na décima linha é definida,
armazenando na variável $padraoCEP, a expressão regular, ou seja, o
padrão do texto. Vamos entender o que significa essa expressão regular.
www.esab.edu.br 146
A Tabela 7 mostra, de forma detalhada, a formação da expressão regular
que representa o CEP brasileiro válido. Ele determina, portanto, que um
CEP tem cinco números, um hífen e três números.
Dica
As funções ereg() e eregi() são consideradas
depreciadas a partir da linguagem PHP 5.3. Logo,
utilize a versão correspondente, aplicando a
função preg_match(), compatível por PCRE.
www.esab.edu.br 147
Podemos observar, no Código 58, a definição da expressão regular,
na linha 10, de forma sinônima ao encontrado no Código 57, apenas
definindo o símbolo de início e fim da expressão, necessário para uso
com a função preg_match(). Essa função é vista na linha 11 e seu
funcionamento é idêntico à função ereg().
Por sua vez, o telefone pode ser visto como uma cadeia de números no
formato (xx)xxxxx-xxxx (considerando o nono dígito para móveis, em
algumas regiões). Temos, portanto, a expressão “/^\([0-9]{2}\)[0-9]{4,5}-
[0-9]{4}$/” definindo o formato de um telefone.
www.esab.edu.br 148
Código 59 – Script para validação de e-mail, telefone e CEP
01 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.
dtd">
02 <html>
03 <head>
04 <meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
05 <title> Validação de e-mail. </title>
06 </head>
07 <body>
08 <?php
09 $cep = "88034-000";
10 $email = 'teste@teste.com.br';
11 $telefone = '(11)99555-5555';
12 $padraoCEP = "/^[0-9]{5}-[0-9]{3}$/";
13 $padraoEmail = "/^[a-z][a-z0-9_\.\-]*@[a-z0-9_\.\-
]*[a-z0-9_\-]+\.[a-z]{2,4}$/i";
14 $padraoTelefone = "/^\([0-9]{2}\)[0-9]{4,5}-[0-9]
{4}$/";
15 $avaliaCep = preg_match($padraoCEP, $cep);
16 $avaliaEmail = preg_match($padraoEmail, $email);
17 $avaliaTelefone = preg_match($padraoTelefone,
$telefone);
18 if(!$avaliaCep) {
19 echo "CEP nao Valido <br>";
20 }
21 Else
22 {
23 echo "CEP Valido <br>";
24 }
25
26 if(!$avaliaEmail) {
27 echo "Email nao Valido <br>";
28 }
29 else
30 {
31 echo "Email Valido <br>";
32 }
33 if(!$avaliaTelefone) {
34 echo "Telefone nao Valido <br>";
35 }
36 else
37 {
38 echo "Telefone Valido <br>";
39 }
40 ?>
41 </body>
42 </html>
www.esab.edu.br 150
Desenvolvendo uma aplicação e
23 manipulando dados em forma de
arquivos – parte 1
Objetivo
Desenvolver uma aplicação empregando os conhecimentos
aprendidos nesta unidade, salvando informações para posterior uso.
www.esab.edu.br 151
08 <form action="salvarClienteValidando.php"
method="POST" id=form_bebida>
09 <table border=0>
10 <tr>
11 <td> Nome: </td>
12 <td> <INPUT type="text" name=nome size=50
id=quantidade> </td>
13 </tr>
14 <tr>
15 <td> Idade: </td>
16 <td> <INPUT type="text" name=idade size=4> </td>
17 </tr>
18 <tr>
19 <td> Sexo:</td>
20 <td> <SELECT name=sexo id=sexo>
21 <OPTION value="1"> Masculino </OPTION>
22 <OPTION value="2"> Feminino </OPTION>
23 </SELECT>
24 </td>
25 </tr>
26 <tr>
27 <td> E-mail: </td>
28 <td> <INPUT type="text" name=email size=30> </
td>
29 </tr>
30 <tr>
31 <td> Endereço completo: </td>
32 <td> <INPUT type="text" name=endereco size=60>
</td>
33 </tr>
34 <tr>
35 <td> Cidade: </td>
36 <td> <INPUT type="text" name=cidade size=30> </
td>
37 </tr>
38 <tr>
39 <td> CEP: </td>
40 <td> <INPUT type="text" name=cep size=8> </td>
41 </tr>
42 <tr>
43 <td> Telefone: </td>
44 <td> <INPUT type="text" name=telefone size=20>
</td>
45 </tr>
46 <tr>
47 <td> Telefone: </td>
48 <td> <INPUT type="text" name=telefone size=12>
</td>
www.esab.edu.br 152
49 </tr>
50 </table>
51 <INPUT type="submit" value="Enviar">
52 </form>
53 </body>
54 </html>
Código 61 – Script que recebe os dados pelo método post e efetua validações
01 <?php
02 $nome = $_POST["nome"];
03 $idade = $_POST["idade"];
04 $email = $_POST["email"];
05 $sexo = ($_POST["sexo"] ==1) ? 'Masculino' :
'Feminino';
06 $endereco = $_POST["endereco"];
07 $cidade = $_POST["cidade"];
08 $telefone = $_POST["telefone"];
09 $cep = $_POST["cep"];
10 if (strlen($cep)== 8){
11 $cepFormatado = substr($cep, 0, 5) . '-' .
substr($cep, 5, 3);
12 } else {
13
14 }
15 $padraoIdade = "/^[0-9]{1,3}/";
16 $padraoCEP = "/^[0-9]{5}-[0-9]{3}$/";
www.esab.edu.br 153
17 $padraoEmail = "/^[a-z][a-z0-9_\.\-]*@[a-z0-9_\.\-
]*[a-z0-9_\-]+\.[a-z]{2,4}$/i";
18 $padraoTelefone = "/^\([0-9]{2}\)[0-9]{4,5}-[0-9]
{4}$/";
19 $avaliaCep = preg_match($padraoCEP, $cepFormatado);
20 $avaliaemail = preg_match($padraoEmail, $email);
21 $avaliaTelefone = preg_match($padraoTelefone,
$telefone);
22 $avaliaIdade = preg_match($padraoIdade, $idade);
23 $erro = false;
24 if(!$avaliaCep) {
25 echo "CEP nao Valido <br>";
26 $erro = true;
27 }
28 if(!$avaliaemail) {
29 echo "Email nao Valido <br>";
30 $erro = true;
31 }
32
33 if(!$avaliaTelefone) {
34 echo "Telefone nao Valido <br>";
35 $erro = true;
36 }
37 if(!$avaliaIdade) {
38 echo "Idade nao Valida <br>";
39 $erro = true;
40 }
41 if (!$erro) {
42 echo "Dados validados com sucesso!";
43 }
44 ?>
www.esab.edu.br 154
Da mesma forma, são feitas validações das variáveis $cep e com o padrão
de CEP ($padraoCEP), estabelecido na linha 16; da variável $email com
o padrão $padraoemail, estabelecido na linha 17; da variável $telefone,
com o padrão $padraoTelefone, estabelecido na linha 18.
www.esab.edu.br 155
Desenvolvendo uma aplicação e
24 manipulando dados em forma de
arquivos – parte 2
Objetivo
Desenvolver uma aplicação empregando os conhecimentos
aprendidos nesta unidade, salvando informações para posterior uso.
Código 62 – Script que recebe os dados pelo método post, efetua validações e salva arquivo
01 <?php
02 $nome = $_POST["nome"];
03 $idade = $_POST["idade"];
04 $email = $_POST["email"];
05 $sexo = ($_POST["sexo"] ==1) ? 'Masculino' :
'Feminino';
06 $endereco = $_POST["endereco"];
07 $cidade = $_POST["cidade"];
08 $telefone = $_POST["telefone"];
09 $cep = $_POST["cep"];
10 if (strlen($cep)== 8){
www.esab.edu.br 156
11 $cepFormatado = substr($cep, 0, 5) . '-' .
substr($cep, 5, 3);
12 } else {
13
14 }
15 $padraoIdade = "/^[0-9]{1,3}/";
16 $padraoCEP = "/^[0-9]{5}-[0-9]{3}$/";
17 $padraoEmail = "/^[a-z][a-z0-9_\.\-]*@[a-z0-9_\.\-
]*[a-z0-9_\-]+\.[a-z]{2,4}$/i";
18 $padraoTelefone = "/^\([0-9]{2}\)[0-9]{4,5}-[0-9]
{4}$/";
19 $avaliaCep = preg_match($padraoCEP, $cepFormatado);
20 $avaliaemail = preg_match($padraoEmail, $email);
21 $avaliaTelefone = preg_match($padraoTelefone,
$telefone);
22 $avaliaIdade = preg_match($padraoIdade, $idade);
23 $erro = false;
24 if(!$avaliaCep) {
25 echo "CEP nao Valido <br>";
26 $erro = true;
27 }
28 if(!$avaliaemail) {
29 echo "Email nao Valido <br>";
30 $erro = true;
31 }
32
33 if(!$avaliaTelefone) {
34 echo "Telefone nao Valido <br>";
35 $erro = true;
36 }
37 if(!$avaliaIdade) {
38 echo "Idade nao Valida <br>";
39 $erro = true;
40 }
41 if (!$erro) {
42 $arquivo = fopen('c:\\Apache\\htdocs\\clienteValidado.
txt', 'a+');
43 fwrite($arquivo, "$nome#$idade#$email#$sexo#$end
ereco#$cidade$telefone\r\n");
44 fclose($arquivo);
45 echo "Os dados de $nome foram salvos
corretamente";
46 } else {
47 echo "Dados não foram validados! Corrija-os.";
48 }
49 ?>
www.esab.edu.br 157
Ao Código 61 foram inseridas as linhas 41 a 48, que, caso nenhuma das
validações seja negativa (e, consequentemente, o valor da variável $erro
seja falso), irá salvar o arquivo, conforme orientações de Meloni (2000).
Dica
Caso você use o símbolo “;” para separar os valores,
você pode salvar o arquivo com o tipo (valores
separados por vírgula, em tradução), que tem
extensão .csv. Desse modo, poderá abrir o arquivo
utilizando Microsoft Excel ou Calc do pacote
LibreOffice.
www.esab.edu.br 158
Agora, veja com atenção a Figura 34.
www.esab.edu.br 159
Código 63 – Apresentação dos dados do cliente
01 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.
dtd">
02 <html>
03 <head>
04 <meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
05 <title> Lista de dados de clientes. </title>
06 </head>
07 <body>
08 <?php
09 $arquivo = fopen('c:\\Apache\\htdocs\\
clienteValidado.txt', 'r');
10 echo '<table>';
11 while (!feof($arquivo)){
12 $cliente = explode('#', fgets($arquivo));
13 echo '<tr>';
14 foreach ($cliente as &$valor){
15 echo '<td style="border:1px solid black">'. $valor.
'</td>';
16 }
17 echo '</td>';
18 }
19 fclose($arquivo);
20 ?>
21 </body>
22 </html>
www.esab.edu.br 160
Figura 35 – Apresentando dados recuperados.
Fonte: Elaborada pelo autor (2013).
Atividade
Chegou a hora de você testar seus conhecimentos
em relação às unidades 19 a 24. Para isso, dirija-se ao
Ambiente Virtual de Aprendizagem (AVA) e responda
às questões. Além de revisar o conteúdo, você estará
se preparando para a prova. Bom trabalho!
www.esab.edu.br 161
Resumo
www.esab.edu.br 162
25 Reutilizando o código
Objetivo
Apresentar a necessidade de reutilização de um código,
demonstrando economia de tempo e custo, bem como facilitando a
manutenção e gerando confiabilidade.
www.esab.edu.br 163
A dificuldade de manutenção soma-se a esses motivos, o que resulta
em um desenvolvimento desorganizado e, caso haja a necessidade de
alteração de um requisito, são demandadas mudanças em códigos.
Dessa forma, um desenvolvimento que não seja bem estruturado ou
organizado exigirá um tempo maior para entendimento do código e,
consequentemente, maior tempo e custo para a elaboração da alteração.
www.esab.edu.br 164
Caso tenhamos uma biblioteca de códigos e nela seja mantida uma
função de validação de e-mail, podemos utilizar essa mesma função a
partir dos três cadastros. Dessa forma, será necessário escrever o código
uma vez, apenas executando a função a partir dos três cadastros, como
podemos ver na Figura 36.
Cadastro de cliente
Cadastro de fornecedor
Agora imagine que, se você trabalhar em outro projeto que também exija
a validação de e-mail, você poderá aproveitar a função já escrita, não
precisando escrevê-la novamente (ou “reinventar a roda”, jargão comum
entre os desenvolvedores).
www.esab.edu.br 165
25.3 Ganhos relacionados à manutenção e à
confiabilidade
Recuperando o exemplo citado, vamos considerar um sistema contendo
três validações de e-mail, uma em cada cadastro. Se a estrutura de nomes
do domínio da internet que compõe o e-mail (após o @) fosse alterada,
seriam necessárias alterações nas três validações. Imagine, agora, que você
altere duas validações e se “esqueça” de alterar a validação do e-mail no
cadastro de clientes. O que aconteceria?
www.esab.edu.br 166
Código 64 – Cabeçalho do aplicativo
01 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/
loose.dtd">
02 <html>
03 <head>
04 <meta http-equiv="Content-Type" content="text/
html; charset=ISO-8859-1">
05 <style>
06 h1 { color:white; font-size:24pt; text-
align:center}
07 .menu {color:white; font-size:12pt; text-
align:center}
08 .dados { color:white; font-size:10pt; text-
align:left}
09 .dados2 { color:white; font-size:14pt; text-
align:center}
10 .creditos {color:white; font-size:8pt; text-
align:center}
11 </style>
12 </head>
13 <body>
14 <table width=100% border=0>
15 <tr bgcolor=black>
16 <td align=left width=100>
17 <img src="http://www.esab.edu.br/wp-content/
uploads/2013/07/icon-biblioteca.png">
18 </td>
19 <td>
20 <h1> Sistema Web Teste </h1>
21 </td>
22 </tr>
www.esab.edu.br 167
Código 65 – Rodapé do aplicativo
01 <table width=100% bgcolor=black border=0>
02 <tr>
03 <td span class="creditos">Desenvolvido por
Egon Sewald Junior </span></td>
04 </tr>
05 </body>
06 </html>
www.esab.edu.br 168
O Código 67 apresenta nova aplicação, também reusando os arquivos.
Observe.
www.esab.edu.br 169
Nesta unidade vimos os benefícios – como a diminuição de tempo e custo
de desenvolvimento e maior facilidade na manutenção – e o exemplo de
reuso de código. Nas próximas unidades vamos fazer reuso por meio da
utilização de funções, de modo a estruturar nossas aplicações.
www.esab.edu.br 170
26 Escrevendo funções – parte 1
Objetivo
Apresentar uso de funções require() e include() para
reaproveitamento de código.
www.esab.edu.br 171
Uma função tem uma assinatura que é composta pelo seu nome, pelos
parâmetros que a função recebe e que regulam seu funcionamento,
por um retorno opcional e pelo seu corpo, ou seja, o algoritmo que a
regula. Na matemática, usamos uma função para associar um conjunto
de domínio e um conjunto de imagem. Por exemplo, usando F(x) =
x*2, podemos dizer que F(2) = 2 * 2, logo, F(2) = 4. Se relacionarmos
com o uso de funções na programação, podemos dizer que o parâmetro
x recebeu valor 2 (substituímos x por 2) e que o retorno da função é 4.
Porém, na matemática, as funções não têm nome e no desenvolvimento
precisamos nomeá-las (o que, nesse caso, poderíamos chamar de dobro).
www.esab.edu.br 172
Várias das funções apresentadas por Meloni (2000) e utilizadas por nós
nas unidades 17 e 18, como as funções de manipulação de arrays (função
array() – que cria um vetor; função array_push() – que adiciona um
elemento ao final do vetor; função array_unshift() – que retira elemento
do vetor; e função reset() – que retrocede o cursor de navegação para a
primeira posição).
www.esab.edu.br 173
As funções de manipulação de datas são apresentadas em Meloni
(2000). Na unidade 14, utilizamos a função date(). Também podemos
utilizar a função time(), que retorna a hora atual do sistema, marcada
em segundos, retornando um número inteiro longo. Sua sintaxe é
simplesmente time(); e, para exibir a hora do sistema, poderíamos usar a
instrução echo time();.
www.esab.edu.br 174
Também são apresentadas, pelo autor, funções para uso de banco de
dados e funções para controle de sessões e cookies. Essas últimas, serão
estudadas mais à frente, com maior atenção.
Saiba mais
A documentação oficial da PHP apresenta
referência de funções e extensões, por categoria,
disponível clicando aqui. É uma ótima fonte de
referência, que pode ser utilizada em caso de
dúvidas no uso de funções da PHP, apresentando
exemplos.
www.esab.edu.br 175
Código 68 – Exemplo de funções predefinidas
01 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/
loose.dtd">
02 <html>
03 <head>
04 <meta http-equiv="Content-Type" content="text/
html; charset=ISO-8859-1">
05 <title> Lista de dados de clientes. </title>
06 </head>
07 <body>
08 <?php
09 $nome_arquivo = 'C:\\wamp\\www\\unidade19\\
numero.txt';
10 if (file_exists($nome_arquivo)){
11 $arquivo = fopen($nome_arquivo, 'r');
12 echo '<table>';
13 while (!feof($arquivo)){
14 $numeros = explode('#', fgets($arquivo));
15 foreach ($numeros as &$valor){
16 echo '<tr><td style="border:1px solid
black">'. $valor. '</td>';
17 echo '<td style="border:1px solid black"> ao
cubo </td>';
18 echo '<td style="border:1px solid black">'.
pow($valor,3). '</td></tr>';
19 }
20 echo '</table>';
21 }
22 fclose($arquivo);
23 unlink($nome_arquivo);
24 } else {
25 echo ‘o arquivo não existe’;
26 }
27 ?>
28 </body>
29 </html>
www.esab.edu.br 176
utilizada, na linha 14, a função explode(). Foram criadas três colunas,
cada uma contendo três linhas: uma linha para o valor, outra com o texto
“ao cubo” e uma terceira com o resultado da função pow(), que eleva
o valor inicial a uma potência, nesse caso, ao cubo (3), como pode ser
visto na linha 18. A linha 22 apresenta a função fclose(), necessária para
efetuar o fechamento do arquivo – caso não seja executada, o arquivo
permanece aberto, não sendo possível efetuar outra leitura (pois estará
em uso). A função unlink() é utilizada na linha 23 com o objetivo de
apagar o arquivo. O resultado de sua execução pode ser visto na Figura
38.
Vale, neste momento, demonstrar, com a Figura 39, que, caso a forma de
usar a função esteja errada, aparecerá um erro no momento da execução
do código.
www.esab.edu.br 177
Isso ocorre, como vimos na Figura 39, porque a linguagem PHP é
interpretada e os erros só aparecem no momento da execução. Na
imagem, podemos observar que são apontadas as posições do código
onde não foram encontradas as funções. Nesse caso, a função não
encontrada (o erro) está na linha 6. Os erros podem ser causados pelo
nome incorreto (ou inexistente), uso de parâmetros incorretos ao chamar
a função ou a não localização de uma função presente em um arquivo
que não foi incluído, o que a torna inacessível. Os erros acontecem de
forma similar com funções predefinidas pela linguagem PHP e funções
definidas pelo desenvolvedor, assunto da unidade 27.
Tarefa dissertativa
Caro estudante, convidamos você a acessar o
Ambiente Virtual de Aprendizagem e realizar a
tarefa dissertativa.
www.esab.edu.br 178
27 Escrevendo funções – parte 2
Objetivo
Apresentar uso de funções, escrevendo e chamando funções escritas.
www.esab.edu.br 179
Código 69 – Declaração comum de função
01 function nome_da_funcao () {
02 bloco_de_comandos_que_serão_executados
03 }
www.esab.edu.br 180
27.2 Chamando funções
Para chamar uma função, como aquela apresentada no Código 70, ou
seja, uma função sem retorno e sem parâmetro, devemos utilizar o nome
da função, seguido de abre e fecha parênteses. Ou seja, para chamarmos a
função definida no Código 69, utilizamos nome_da_funcao();
www.esab.edu.br 181
25 criaTabela();
26 ?>
27 </h1>
28 <table width=100% border=1>
29 <tr>
30 <td>Desenvolvido por Egon Sewald Junior </
td>
31 </tr>
32 </table>
33 <?php
34 criaTabela();
35 ?>
36 </body>
37 </html>
www.esab.edu.br 182
Observe, na Figura 40, que foram executadas duas vezes a função tabela(),
sem que fosse necessário desenvolver duas vezes o mesmo código. Isso fica
visível quando observamos duas tabelas, com uma linha e duas colunas
cada, com o mesmo texto (“Teste” e “Coluna 2”, respectivamente).
Agora que vimos como criar e usar uma função, precisamos entender o
uso dos parâmetros dentro das funções, para que o comportamento da
função possa agir de acordo com esses parâmetros, mas isso é assunto
para a nossa próxima unidade.
Atividade
Chegou a hora de você testar seus conhecimentos
em relação às unidades 19 a 27. Para isso, dirija-se ao
Ambiente Virtual de Aprendizagem (AVA) e responda
às questões. Além de revisar o conteúdo, você estará
se preparando para a prova. Bom trabalho!
www.esab.edu.br 183
28 Escrevendo funções – parte 3
Objetivo
Apresentar o uso e funções com passagem de parâmetros, bem como
o escopo das variáveis.
Uma função pode receber parâmetros, que são definidos por variáveis
e podem ser utilizadas dentro dessa função. A definição de parâmetro é
feita entre parênteses, após o nome da função, como podemos observar
no Código 72.
www.esab.edu.br 184
As variáveis que foram definidas na declaração da função podem ser
utilizadas no corpo da função, representada, no Código 72, pela linha
2, e todas as instruções que a possam substituir, para que o objetivo da
função seja cumprido. Veja o Código 73.
O Código 73 apresenta uma função que recebe dois valores e cria uma
tabela, com uma linha e duas colunas, preenchendo com os valores dos
parâmetros na primeira e segunda coluna, respectivamente.
Para utilizar uma função que usa parâmetros, devemos observar que estas
devem receber valores conforme a sua assinatura (como define a construção
da função), em mesmo número e na mesma ordem em que foi definida.
www.esab.edu.br 185
Código 74 – Exemplo de uso do script, chamando função
01 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/
loose.dtd">
02 <html>
03 <head>
04 <meta http-equiv="Content-Type" content="text/
html; charset=ISO-8859-1">
05 </head>
06 <body>
07 <?php
08 function criaTabela ($coluna1, $coluna2) {
09 echo '<table width=100% border=1>';
10 echo '<tr>';
11 echo '<td>’. $coluna1. ’</td>';
12 echo '<td>’. $coluna2. ’</td>';
13 echo '</tr>';
14 }
15 ?>
16 <table width=100% border=1>
17 <tr>
18 <td align=left width=100>
19 <img src="http://www.esab.edu.br/wp-content/
uploads/2013/07/icon-biblioteca.png">
20 </td>
21 <td> Título </td> </tr>
22 </table>
23 <h1>
24 <?php
25 criaTabela(‘Valor primeira coluna’, ‘Valor
Segunda Coluna’);
26 ?>
27 </h1>
28 <table width=100% border=1>
29 <tr>
30 <td>Desenvolvido por Egon Sewald Junior </
td>
31 </tr>
32 </table>
33 <?php
34 $valor1 = ‘Segunda tabela – valor 1’;
35 $valor2 = ‘ESAB’;
36 criaTabela($valor1, $valor2);
37 ?>
38 </body>
39 </html>
www.esab.edu.br 186
Observe que, no Código 74, ao chamar a função criaTabela() na linha
25, são passadas como parâmetros, diretamente, duas literais, ‘Valor
primeira coluna’ e ‘Valor Segunda Coluna’. Porém, nas linhas 34 e 35
são criadas duas variáveis, que têm seus valores passados como parâmetro
à função criaTabela(). As duas formas são válidas e o funcionamento da
função é idêntico. O resultado da execução do Código 74 pode ser visto
na Figura 41.
Dica
Parâmetro de uma função são todas as variáveis
responsáveis por determinar o comportamento
de uma função, isto é, que definem seu
funcionamento. Se você puder reaproveitar a
função alterando alguma variável para funcionar
para outro valor, essa variável deve ser definida
como parâmetro da função.
www.esab.edu.br 187
28.2 Escopo de variáveis (globais e internas)
“O escopo da variável controla onde ela é visível e utilizável.”
(THOMSON; WELLING, 2005, p. 110). Dessa forma, variáveis criadas
dentro de funções estão no escopo da função, ou seja, são variáveis
locais. Seus valores não podem ser acessados fora da função. Por sua
vez, variáveis globais podem ser criadas fora das funções e ser utilizadas
a partir do momento em que são criadas até o final do arquivo – assim,
essas variáveis têm escopo global. Porém, é possível utilizar a palavra
global para criar uma variável dentro da função que tenha escopo global.
www.esab.edu.br 188
Código 75 – Exemplo explicativo do escopo
01 <?php
02 function fn() {
03 $var = ‘teste interno’;
04 echo ‘fn ’. $var . ‘<br>’;
05 }
06 function fx($var){
07 echo ‘fx ’. $var . ‘<br>’;
08 $var=’novo valor’;
09 echo fx ’.$var . ‘<br>’;
10 }
11 $var = ‘teste externo’;
12 echo $var . ‘<br>’;
13 fn();
14 echo $var . ‘<br>’;
15 fx($var);
16 echo $var . ‘<br>’;
17 ?>
www.esab.edu.br 189
Figura 42 – Resultado de código demonstrando escopo.
Fonte: Elaborada pelo autor (2014).
www.esab.edu.br 190
29 Escrevendo funções – parte 4
Objetivo
Apresentar o uso e as funções com passagem de parâmetros e retorno
de valores.
www.esab.edu.br 191
Código 76 – Função soma retornando valores
01 <?php
02 function somar($n1, $n2) {
03 $total = $n1 + $n2;
04 return $total;
05 }
06 $termo1 = 10;
07 $termo2 = 25;
08 $soma = somar($termo1, $termo2);
09 echo $soma;
10 ?>
www.esab.edu.br 192
Código 77– Utilizando a função soma() de diversas formas
01 <?php
02 function somar($n1, $n2) {
03 $total = $n1 + $n2;
04 return $total;
05 }
06 $termo1 = 10;
07 $termo2 = 25;
08 $soma = somar($termo1, $termo2);
09 echo $soma . '<br>';
10 $termo1 = 124;
11 echo somar(178, $termo1) . '<br>';
12 $soma3numeros = somar(15, somar($termo1,
21));
13 echo $soma3numeros . '<br>';
14 ?>
www.esab.edu.br 193
Código 78 – Função somar()
01 <?php
02 function somar($n1, $n2) {
03 $total = $n1 + $n2;
04 return $total;
05 }
06 ?>
www.esab.edu.br 194
Figura 43 – Resultado de código chamando função reaproveitando código de outro arquivo.
Fonte: Elaborada pelo autor (2014).
Agora, vamos construir um formulário que envia dois dados via método
post e o seu resultado é processado por um código PHP, que recebe esses
dois dados e chama a função somar(), apresentando o seu resultado.
www.esab.edu.br 195
O Código 80 apresenta a criação de um formulário HTML com dois
campos de edição de texto, que lerão os números (caixas de texto nomeadas
como numero1 e numero2, criadas respectivamente nas linhas 12 e 16) e
chamarão o script “calcula_soma.php”, que será apresentado a seguir.
www.esab.edu.br 196
Figura 44 – Resultado de código chamando função reaproveitando código de outro arquivo.
Fonte: Elaborada pelo autor (2014).
www.esab.edu.br 197
Desenvolvendo aplicação
30 utilizando funções
Objetivo
Desenvolver uma aplicação empregando os conhecimentos
aprendidos nesta unidade, utilizando funções.
www.esab.edu.br 198
Código 82 – Cabeçalho padronizado
01 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/
loose.dtd">
02 <html>
03 <head>
04 <meta http-equiv="Content-Type" content="text/
html; charset=ISO-8859-1">
05 <style>
06 h1 { color:white; font-size:24pt; text-
align:center}
07 .menu {color:white; font-size:12pt; text-
align:center}
08 .dados { font-size:12pt; text-align:left}
09 </style>
10 </head>
11 <body>
12 <table width=100% border=0>
13 <tr bgcolor=black>
14 <td align=left width=100>
15 <img src="http://www.esab.edu.br/wp-content/
uploads/2013/07/icon-biblioteca.png">
16 </td>
17 <td>
18 <h1> Sistema Web Teste </h1>
19 </td>
20 </tr>
www.esab.edu.br 199
Código 83 – Rodapé padronizado
01 <table width=100% bgcolor=black border=0>
02 <tr>
03 <td span class="creditos">Desenvolvido por
Egon Sewald Junior </td>
04 </tr>
05 </body>
06 </html>
www.esab.edu.br 200
Código 84 – Formulário para calcular
01 <?php require('header.inc');?>
02 <form action="calcula.php" method="POST"
id=form_bebida>
03 <table border=0>
04 <tr>
05 <td> Primeiro Número: </td>
06 <td> <INPUT type="text" name=numero1
size=12> </td>
07 </tr>
08 <tr>
09 <td> Segundo Número: </td>
10 <td> <INPUT type="text" name=numero2
size=12> </td>
11 </tr>
12 <tr>
13 <td> Operacao: </td>
14 <td>
15 <table>
16 <tr><td><input name="operacao"
type="radio" value="Soma" />Soma</td></tr>
17 <tr><td><input name="operacao"
type="radio" value="Subtração" />Subtração</
td></tr>
18 <tr><td><input name="operacao"
type="radio" value="Multiplicação"
/>Multiplicação</td></tr>
19 <tr><td><input name="operacao"
type="radio" value="Divisão" />Divisão</
td></tr>
20 </table>
21 </td>
22 </tr>
23 </table>
24 <INPUT type="submit" value="Enviar">
25 </form>
26 <?php require('footer.inc');?>
www.esab.edu.br 201
receber os dados enviados e chamar as funções que efetuam os cálculos.
Salve esse código com o nome calculadora_Formulario.php, para que,
após o desenvolvimento do script que efetua o processamento dos
cálculos, possamos executar. O desenvolvimento dessas funções será
visto na sequência.
www.esab.edu.br 202
Mais adiante iremos tratar exceções, evitando que esse tipo de erro (como
o de divisão por zero) seja mostrado na tela e interrompa a execução do
aplicativo.
www.esab.edu.br 203
Código 86 – Processamento das operações e resultado
01 <?php
02 $numero1 = $_POST["numero1"];
03 $numero2 = $_POST["numero2"];
04 $operacao = $_POST["operacao"];
05 require ('matematica.inc');
06 switch ($operacao){
07 case $operacao == "Soma":
08 $resultado = somar($numero1, $numero2);
09 $sinal = '+';
10 break;
11 case $operacao == "Subtração":
12 $resultado = subtrair($numero1, $numero2);
13
14 break;
15 case $operacao == "Multiplicação":
16 $resultado = multiplicar($numero1,
$numero2);
17 $sinal = '*';
18 break;
19 case $operacao == "Divisão":
20 $resultado = dividir($numero1, $numero2);
21 $sinal = '/';
22 break;
23 }
24 require('header.inc');
25 echo '<table width=100% border=0>';
26 echo '<tr>';
27 echo '<td> O resultado da operação '.
$numero1 .' '. $sinal . ' '. $numero2 .' é
</td>';
28 echo '<td>'.$resultado.'</td>';
29 echo '</tr>';
30 require('footer.inc');
31 ?>
www.esab.edu.br 204
tabela, o resultado (criado entre as linhas 25 e 29), além de definir o
rodapé junto à linha 30. Salve esse código como calcula.php, nome
utilizado para chamar o Código 84.
www.esab.edu.br 205
Resumo
Na unidade 26, vimos como estruturar o código por meio de funções, com
o objetivo de melhorar o entendimento e facilitar o reaproveitamento dos
códigos escritos. Estudamos o conceito de funções e sub-rotinas e algumas
funções predefinidas na linguagem PHP, de uso comum.
www.esab.edu.br 206
31 Utilizando orientação a objetos
Objetivo
Apresentar conceitos de orientação a objeto e a sua aplicação para
reaproveitar código.
www.esab.edu.br 207
Num contexto de software OO, um objeto pode ser quase qualquer item ou conceito –
um objeto físico como uma escrivaninha ou um cliente; ou um objeto conceitual que
só exista no software, como uma área de entrada de texto ou um arquivo. Geralmente,
estamos mais interessados em objetos conceituais incluindo objetos do mundo real que
precisam ser representados no software. (THOMSON; WELLING, 2005, p. 117)
Cliente
Cliente Conta
Conta
Agência
Agência
Figura 46 – Representação de Objetos reais.
Fonte: Elaborada pelo autor (2014).
www.esab.edu.br 208
Ao retomarmos o exemplo anterior, João e Ana (dois objetos) têm
comportamentos em comum (se são clientes, fazem compras, pagam
pelas suas compras etc.). Nesse caso, essas operações, em OO, são
chamadas de métodos. João e Ana devem, ainda, ter informações comuns
preenchidas em seu cadastro (como nome, endereço, telefone, cidade,
limite de crédito etc.). A essas características em comum, em OO, damos
o nome de atributos. Podemos ainda dizer que João e Ana são objetos
(instâncias) da mesma classe (classe Cliente).
www.esab.edu.br 209
Classe Cliente Objetos (instâncias) de Cliente
Cliente Joao: Cliente
nome: String nome: Joao
endereço: String endereço: Rua J
cpf: int
alteraNome() Ana: Cliente
alteraEndereco() nome: Ana
alteraCpf() endereço: Rua A
forneceNome()
forneceEndereco()
forneceCpf()
Figura 47 – Representação de objetos reais.
Fonte: http://www.thiagocolares.com.br/?p=261.
www.esab.edu.br 210
Fornecedor; então, caso necessite de alguma manutenção ou alteração
que seja pertinente às classes herdadas, pode-se desenvolvê-las somente
na superclasse (Pessoa) e essas modificações farão efeito nas classes
herdadas (Cliente e Fornecedor), facilitando, dessa forma, a alteração.
www.esab.edu.br 211
31.2 Como herdar uma classe reaproveitando código
Imagine que você deva escrever uma aplicação web para controlar contas
bancárias. Qualquer conta bancária deve ter informações (atributos)
como número da conta, agência, nome do correntista e saldo (valor
monetário que se encontra depositado na conta), e deve apresentar,
como operação (método), o saldo disponível para saque. Para uma
conta corrente normal, o saldo disponível é exatamente o saldo da
conta. Porém, observamos a existência de conta especial, que deve ter
a informação de limite de crédito (ou limite de cheque especial), sendo
que, nesse caso, a operação que apresenta o saldo disponível para saque
deve considerar o saldo da conta somado ao valor do limite de crédito.
Conta
$numero:Integer
$agencia:Integer
$nomeCorrentista:String
$saldo:float
apresentarSaldoDisponível()
ContaNormal ContaEspecial
$limite:float
www.esab.edu.br 212
ContaNormal e ContaEspecial. A ContaNormal herda os atributos
de Conta e implementa apresentarSaldoDisponivel, apresentando o
valor equivalente ao atributo saldo. A classe ContaEspecial, além de
herdar os atributos de Conta, inclui o atributo limite e implementa
apresentarSaldoDisponivel, apresentando o valor equivalente à soma de
saldo e limite.
Conta
$numero:Integer
$agencia:Integer
$nomeCorrentista:String
$saldo:float
apresentarSaldoDisponível()
sacar($valor:float)
depositar($valor:float)
ContaNormal ContaEspecial
$limite:float
www.esab.edu.br 213
A Figura 49 apresenta as alterações relativas à implementação dos métodos
saque e depósito. Observe que, mudando somente a classe Conta, não é
necessário modificar as classes herdadas. Levando em conta que o banco
tenha vários tipos de contas, podemos concluir que economizaríamos
muito tempo de desenvolvimento ao mudar somente a classe Conta. Logo,
podemos dizer que reaproveitamos o código da classe Conta.
Fórum
Caro estudante, dirija-se ao Ambiente Virtual de
Aprendizagem da instituição e participe do nosso
Fórum de discussão. Lá você poderá interagir com
seus colegas e com seu tutor de forma a ampliar,
por meio da interação, a construção do seu
conhecimento. Vamos lá?
www.esab.edu.br 214
32 Escrevendo classes com herança
Objetivo
Apresentar exemplo prático de herança, propriedade importante da
orientação a objeto.
www.esab.edu.br 215
Os atributos são criados como variáveis dentro do bloco de definição
da classe, precedida pela palavra var. Já os métodos devem ser definidos
como funções, também dentro do bloco de definição da classe. Observe o
Código 88, que apresenta uma classe com dois atributos e dois métodos:
Dica
Apesar de não se tratar de uma definição
obrigatória, normalmente utiliza-se nomes de
classes iniciadas com letras maiúsculas e atributos
e métodos com letras minúsculas. Também se
usa letra maiúscula na separação de palavras que
definem o nome da variável, como para classes
(NomeDaClasse), e também para atributos e
métodos (nomeDoAtributo).
www.esab.edu.br 216
de funções e parâmetro métodos). Assim, o metodo2() deve receber
dois parâmetros; caso contrário (utilizar com número diferente de
parâmetros), apresentará um erro. Para utilizar ou atribuir o valor de
um atributo, você tem acesso a uma variável especial chamada $this.
Thomson e Welling (2005, p. 121, grifo dos autores) complementam que
“[...] se um atributo de sua classe se chama $attribute, você o referencia
como $this->attribute quando configurar ou acessar a variável a partir de
operação dentro da classe.” Dessa forma, seguindo o exemplo da classe
Conta, apresentado na unidade 31 por meio da Figura 48, definimos a
classe Conta no Código 89. Observe.
www.esab.edu.br 217
Para utilizar um objeto, devemos criar instância de uma classe. Por
exemplo, para criar a conta de João, devemos criar um objeto – o que
chamamos de instância – da classe Conta (mais tarde, veremos que
Conta é uma classe abstrata e que não pode ser instanciada, porém,
nesse momento, quando não utilizamos a herança, o exemplo é valido).
Para isso, devemos inicializar os atributos principais com os valores
desse novo objeto, passando parâmetros à instrução new, conforme a
definição de método especial chamado construtor (ou constructor, do
inglês). O construtor é executado no momento que se cria (instancia)
o objeto e “[...] normalmente ele realiza tarefas úteis de inicialização,
como configurar atributos com valores iniciais sensíveis ou criar outros
objetos necessários para esse objeto” (THOMSON; WELLING, 2005,
p. 121). Caso a classe não tenha um construtor definido, um objeto da
classe é criado sem inicialização de atributos, e não devem ser utilizados
parâmetros à instrução new.
www.esab.edu.br 218
através de $this->numero) o valor do parâmetro $numero. Da mesma
forma, nas linhas 4, 5 e 6 do Código 90, são atribuídos valores aos outros
atributos do objeto ($this->agencia, $this->nomeCorrentista e $this-
>saldo). Caso não tenha sido definido construtor para a classe, o objeto é
criado sem valores ou inicialização de variáveis.
www.esab.edu.br 219
Para criarmos um objeto da classe ContaNormal (a conta do João, por
exemplo), atribuímos a uma variável o objeto criado com a instrução
new, como, por exemplo, contaJoao = new ContaNormal(10003, 2345,
‘João’, 4500.00);. O comando apresentado cria um objeto da classe
ContaNormal, com o número 10003, a agência 2345 e com saldo inicial
de R$ 4.500,00, cujo correntista chama-se João, e atribui à variável
contaJoao um apontador desse objeto criado.
www.esab.edu.br 220
Código 92 – Exemplo de uso de Classes, instanciando objetos e chamando métodos
01 <?php
02 class Conta{
03 var $numero;
04 var $agencia;
05 var $nomeCorrentista;
06 var $saldo;
07 function apresentarSaldoDisponivel(){
08 echo $this->saldo . '<br>';}
09 function depositar ($valor){
10 $this->saldo = $this->saldo + $valor;}
11 function sacar ($valor){
12 $this->saldo = $this->saldo - $valor;}
13 function Conta ($numero, $agencia,
$nomeCorrentista, $saldoInicial){
14 $this->numero = $numero;
15 $this->agencia = $agencia;
16 $this->nomeCorrentista = $nomeCorrentista;
17 $this->saldo = $saldoInicial;}
18 }
19 class ContaNormal extends Conta{ }
20 $contaJoao = new ContaNormal(10003, 2345,
'João', 4500.00);
21 $contaJoao->apresentarSaldoDisponivel();
22 $contaJoao->depositar(200);
23 $contaJoao->apresentarSaldoDisponivel();
24 ?>
www.esab.edu.br 221
linhas 7 e 8), sem parâmetros de entrada, executando comando echo e
apresentando o valor do atributo $saldo (que, nesse momento, é 4500).
Na linha 22 é chamado o método depositar, passando como parâmetro
valor 200, que é, portanto, como definido na linha 10, somado ao
atributo $saldo, que passa a ter valor 4700. Novamente é chamado o
método apresentarSaldoDisponivel(), que apresenta, na tela, valor 4700.
Você observou como criar uma classe e utilizar a herança. Porém, foi
possível notar que a classe que herdou atributos e métodos não criou
novos atributos ou novos métodos, tampouco alterou o comportamento
de um método. Na unidade 33 vamos herdar uma classe que efetue essas
alterações, sobrecarregando e sobrescrevendo métodos.
www.esab.edu.br 222
Escrevendo classe,
33 sobrecarregando e sobrescrevendo
métodos
Objetivo
Apresentar exemplo prático de herança, sobrescrevendo e
sobrecarregando métodos da superclasse.
www.esab.edu.br 223
Código 93 – Estrutura da classe Conta, com modificadores de acesso
01 class Conta
02 {
03 private $saldo;
04 public setSaldo($value){
05 $this->saldo = $value;
06 }
07 public getSaldo (){
08 return $this->saldo;
09 }
www.esab.edu.br 224
O Código 94 apresenta o uso do __get e __set em dados não acessíveis.
Observe.
O Código 94 define uma classe com o nome Teste, que tem um atributo
privado (logo, não acessível) chamado dados. Apresenta que, ao setar
atributos inacessíveis (atributos que não foram definidos na classe,
como chamado na linha 15), chamará o método __set(), atribuindo o
valor à variável com o nome definido (nesse caso, “a”). Por sua vez, ao
chamar __get(), obtém o valor desse mesmo dado com nome “a”. O
uso da sobrecarga não é tão comum quanto o da sobrescrita, que será
apresentado na próxima seção.
www.esab.edu.br 225
33.3 Sobrescrevendo métodos
Neste momento vamos mostrar uma subclasse declarando novos
atributos ou métodos. Sobrescrevemos métodos quando escrevemos
novos atributos, métodos ou redeclaramos um atributo para que ele
receba um valor inicial diferente, por exemplo.
www.esab.edu.br 226
Código 96 – Estrutura da classe ContaEspecial sobrescrevendo método
01 class ContaEspecial extends Conta
02 {
03 var $limite;
04 function apresentarSaldoDisponivel ()
05 {
06 echo $this->saldo + $this->limite. '<br>';
07 }
08 }
www.esab.edu.br 227
Na linha 8 do Código 97 é definido o construtor (com o nome da
classe), que recebe os cinco valores iniciais dos atributos $numero,
$agencia, $nomeCorrentista, $saldo e $limite. Como na classe pai
(superclasse, ou seja, Conta) o construtor define e atribui o valor para
quatro atributos ($numero, $agencia, $nomeCorrentista e $saldo),
chamamos o construtor da classe pai com uso do parent, na linha 10, e
atribuímos o atributo $limite, específico dessa classe, na linha 11.
Saiba mais
O portal PHP Classes apresenta uma biblioteca
de classes prontas para utilização, com o
intuito de aproveitar o trabalho feito por outros
desenvolvedores e aumentar ainda mais o
potencial de reuso. Clique aqui e conheça, ainda,
alguns tutoriais e fóruns que podem esclarecer
dúvidas e solucionar problemas.
www.esab.edu.br 228
34 Tratando exceções
Objetivo
Apresentar os conceitos de tratamento e exceção, a classe exception e
definições de exceções.
Para tratar exceções você deve “proteger” uma parte do código através de
um bloco try. O Código 98 apresenta a estrutura do bloco try, veja.
www.esab.edu.br 229
Segundo Thomson e Welling (2005, p. 143), “[...] se algo estiver errado
dentro do bloco try, você pode fazer o que chamamos de lançar uma
exceção”. Os autores se referem a erro em código entre as linhas 2 e 4,
representado pelo comentário na linha 3 do Código 98.
www.esab.edu.br 230
O Código 99 apresenta, dentro de um bloco try, o lançamento de uma
exceção com código 0 e mensagem “Erro gerado pelo usuário”, como
mostra a linha 3. Ao encontrar uma exceção, o fluxo é desviado para o
catch, encontrado na linha 5, que obtém a exceção e a controla através
da variável $e. A linha 6 apresenta, na tela, um texto com dados contidos
nessa variável, sendo que tais dados seguem o estabelecido na classe
Exception, assunto da próxima seção.
www.esab.edu.br 231
34.3 Definindo exceções
Assim como estudamos nas unidades anteriores, você pode herdar classes
com sobrescrita de métodos, de forma a resolver problemas específicos,
como, por exemplo, modificar a mensagem de erro padrão. Se você
quiser apresentar o erro em uma tabela (em vez da apresentação de
simples mensagem de erro padrão), você pode sobrescrever o método __
toString(). O método __toString(), definido na classe Exception, retorna
como texto e pode ser chamado simplesmente usando a instrução echo
na variável que guarda a exceção.
www.esab.edu.br 232
herda as definições de Exception. Na linha 3 é sobrescrita a função __
toString(), ou seja, quando usarmos essa classe para gerar uma exceção
e escrevermos usando instrução echo, por exemplo, será retornada uma
tabela, definida entre as linhas 4 e 7, concatenando valores oriundos
dos métodos getCode(), getMessage(), getFile() e getLine() – que não
foram sobrescritos e que retornam no mesmo formato definido na classe
geradora (Exception). A definição do método se encerra na linha 8,
enquanto a da classe se encerra na linha 9. O fluxo principal do Código
100 se inicia na linha 10, protegida com o bloco try, e, na linha 11, é
gerada uma exceção do tipo MinhaExcecao (criada anteriormente), com
a mensagem ‘Um erro terrível aconteceu’ e código 42. O tratamento,
feito no bloco catch (que intercepta os erros e os trata), na linha 13,
trata erros do tipo MinhaExcecao, exatamente o erro criado na linha 11.
Logo, será executada a linha 14, escrevendo o erro – ou seja, chamando o
método __toString(). Dessa forma, é apresentado o erro na tela. Observe.
Nesta unidade você viu como tratar exceções e como lançar novas
exceções, principalmente a partir da classe Exception. Nas próximas
unidades vamos desenvolver exercícios, apresentando resposta possível
para reforçar o aprendizado.
www.esab.edu.br 233
35 Exercícios resolvidos – parte 1
Objetivo
Desenvolver exercícios e apresentar sua solução.
www.esab.edu.br 234
Resposta:
www.esab.edu.br 235
Código 102 – Rodapé
01 <table width=100% border=0> //nome do arquivo
rodape.inc
02 <tr>
03 <td span class="creditos"
align="center">Desenvolvido por Egon Sewald
Junior </td>
04 </tr>
05 </body>
06 </html>
www.esab.edu.br 236
14 $padraoData = "/^ [0-9]{2}\/ [0-9]{2}\/[0-9]
{4}$/i";
15 $avaliaData = preg_match($padraoData,
$data);
16 if(!$avaliaData) {
17 echo 'Data Inválida';
18 } else {
19 return $data;
20 }
21 }
22 function validaTelefone($telefone){
23 $padraoTelefone = "/^\([0-9]{2}\)[0-9]{4,5}-
[0-9]{4}$/";
24 $avaliaTelefone = preg_
match($padraoTelefone, $telefone);
25 if(!$avaliaTelefone) {
26 echo 'Telefone Inválido';
27 } else {
28 return $telefone;
29 }
30 }
31 function validaCPF($cpfOriginal){
32 $cpf = trim($cpfOriginal);
33 $padraoCpf = "/^[0-9]{3}\.[0-9]{3}\.[0-9]
{3}-[0-9]{2}$/";
34 $avaliaCpf = preg_match($padraoCpf, $cpf);
35 $cpf = preg_replace("/[^0-9]/", "", $cpf);
36 if((!$avaliaCpf) || (strlen($cpf) == 11) )
{
37 $d1 = 0;
38 $d2 = 0;
39 for($i = 0; $i < 9; $i++){
40 $d1 += $cpf[$i] * (10 - $i);
41 }
42 $r1 = $d1 % 11;
43 $d1 = ($r1 > 1) ? (11 - $r1) : 0;
44 for($i = 0; $i < 9; $i++) {
45 $d2 += $cpf[$i] * (11 - $i);
46 }
47 $r2 = ($d2 + ($d1 * 2)) % 11;
48 $d2 = ($r2 > 1) ? (11 - $r2) : 0;
49 if (substr($cpf, -2) == $d1 . $d2){
50 return $cpfOriginal;}
51 else {
52 echo 'CPF Invalido';
53 }
54 } else {
55 echo 'CPF Invalido';
www.esab.edu.br 237
56 }
57 }
58 function Aniversariante ($nome, $email,
$caracteristicas, $telefone, $cpf,
$dataNascimento){
59 $this->nome = $nome;
60 $this->email = $this->validaEmail($email);
61 $this->caracteristicas = $caracteristicas;
62 $this->telefone = $this-
>validaTelefone($telefone);
63 $this->cpf = $this->validaCPF($cpf);
64 $this->dataNascimento = $this-
>validaData($dataNascimento);
65 }
66 function salvaArquivo($nomeArquivo){
67 $arquivo = fopen($nomeArquivo, 'a+');
68 fwrite($arquivo, $this->nome.';'.$this-
>email.';'.$this->telefone.';'.$this-
>caracteristicas.';'.$this->cpf.';'. $this-
>dataNascimento. “\r\n”);
69 fclose($arquivo);
70 echo '<table> <tr><td>Os dados de <strong>'
. $this->nome.'</strong> '. ' foram salvos
corretamente</td></tr></table><br />';
71 }
72 }
73 ?>
www.esab.edu.br 238
O Código 104 utiliza a classe Aniversariante criada (constante no
arquivo aniversarianteClasse.inc), recebendo dados enviados pelo método
post (pelo formulário a ser criado) e utilizando-se da classe Cliente para o
processamento das informações. Observe.
Código 104 – Script que recebe dados enviados por método post e utiliza classe Aniversariante
01 <?php //nome do arquivo salvarAniversariante.
php
02 require('aniversarianteClasse.inc');
03 require('cabecalho.inc');
04 $nomeArquivo = 'c:\\wamp\\www\\pacote6\\
aniversariante.txt';
05 $nome = $_POST["nome"];
06 $datanascimento = $_POST["datanascimento"];
07 $email = $_POST["email"];
08 $caracteristicas = $_
POST["caracteristicas"];
09 $telefone = $_POST["telefone"];
10 $cpf = $_POST["cpf"];
11 $aniversariante = new Aniversariante($nome,
$email, $caracteristicas, $telefone, $cpf,
$datanascimento);
12 $aniversariante
->salvaArquivo($nomeArquivo);
13 require('rodape.inc');
14 ?>
www.esab.edu.br 239
Código 105 – Formulário para cadastro dos aniversariantes
1 <?php require('cabecalho.inc');?>
2 <form action="salvarAniversariante.php"
method="POST" id=form_bebida>
3 <table border=0>
4 <tr>
5 <td> Nome: </td>
6 <td> <INPUT type="text" name=nome
size=50 id=nome> </td>
7 </tr>
8 <tr>
9 <td> CPF: </td>
10 <td> <INPUT type="text" name=cpf
size=14> </td>
11 </tr>
12 <tr>
13 <td> Data Nascimento: </td>
14 <td> <INPUT type="text"
name=datanascimento size=10> </td>
15 </tr>
16 <tr>
17 <td> E-mail: </td>
18 <td> <INPUT type="text" name=email
size=30> </td>
19 </tr>
20 <tr>
21 <td> Telefone: </td>
22 <td> <INPUT type="text" name=telefone
size=12> </td>
23 </tr>
24 <tr>
25 <td> Características: </td>
26 <td> <INPUT type="text"
name=caracteristicas size=60> </td>
27 </tr>
28 </table>
29 <INPUT type="submit" value="Enviar">
30 <INPUT type="" value="Limpar">
31 </form>
32 <?php require('rodape.inc');?>
www.esab.edu.br 240
O Código 105 define um documento HTML, que, por sua vez, define
um formulário e envia ao script de processamento. Para isso, são
utilizados elementos de inserção do tipo caixa de textos (text), botão de
submissão (submit) e botão para limpar as informações do formulário
(reset). Observe que o código reaproveita cabeçalho e rodapé, que são
escritos, portanto, uma vez só. O resultado da execução dos códigos pode
ser visto na Figura 51.
www.esab.edu.br 241
35.2 Exercício sobrecarregando métodos
Com base no exercício anterior, utilize a sobrecarga para salvar atributos
não declarados. Você deve, no script que processa o recebimento das
variáveis no método post, obter a data e hora atuais, atribuir a um
atributo não declarado e, ao salvar o arquivo texto, salvar também o valor
dessa variável. Novamente utilizaremos conceitos definidos em Thomson
e Welling (2005) para efetuar a sobrecarga.
Resposta:
www.esab.edu.br 242
>nome.’;’.$this->email.’;’.$this->telefone.’;’.$this->caracteristicas.
‘;’.$this->cpf.’;’.$this->dataNascimento.’;’. $this->data.“\r\n”);, de modo
a gravar a data (adição em negrito), que será criada dentro de $dados.
Tarefa dissertativa
Caro estudante, convidamos você a acessar o
Ambiente Virtual de Aprendizagem e realizar a
tarefa dissertativa.
www.esab.edu.br 243
36 Exercícios resolvidos – parte 2
Objetivo
Desenvolver exercícios e apresentar a sua solução.
Resposta:
www.esab.edu.br 244
Vamos, então, criar uma nova classe AniversarianteExterior, que herda
atributos e métodos da classe Aniversariante, como mostra o Código
101, que deve ser adicionado ao Código 103.
www.esab.edu.br 245
Código 108 – Formulário para cadastro dos aniversariantes
01 <tr>
02 <td> Origem: </td>
03 <td> <select name="origem">
<option value="1">Brasil</option><option
value="2">EUA</option></select> </td>
04 </tr>
www.esab.edu.br 246
36.2 Exercício utilizando exceções
Para o desenvolvimento dos exercícios anteriores, as validações
apresentavam somente uma mensagem de erro. Em caso de erro de
validação, lance uma exceção.
Resposta:
Para a solução deste exercício será alterado somente o Código 103 (com
as mudanças descritas no Código 107, no exercício anterior), de modo
a lançar e tratar as exceções. O Código 110 apresenta as alterações
realizadas para este fim.
www.esab.edu.br 247
24 if(!$avaliaData) {
25 echo 'Data Inválida';
26 } else {
27 return $data;
28 }
29 }
30 function validaTelefone($telefone){
31 $padraoTelefone = "/^\([0-9]{2}\)[0-9]{4,5}-
[0-9]{4}$/";
32 $avaliaTelefone = preg_
match($padraoTelefone, $telefone);
33 if(!$avaliaTelefone) {
34 throw new Exception('Telefone Inválido', 4);
35 } else {
36 return $telefone;
37 }
38 }
39 function validaCPF($cpfOriginal){
40 $cpf = trim($cpfOriginal);
41 $padraoCpf = "/^[0-9]{3}\.[0-9]{3}\.[0-9]
{3}-[0-9]{2}$/";
42 $avaliaCpf = preg_match($padraoCpf, $cpf);
43 $cpf = preg_replace("/[^0-9]/", "", $cpf);
44 if((!$avaliaCpf) || (strlen($cpf) == 11) )
{
45 $d1 = 0;
46 $d2 = 0;
47 for($i = 0; $i < 9; $i++){
48 $d1 += $cpf[$i] * (10 - $i);
49 }
50 $r1 = $d1 % 11;
51 $d1 = ($r1 > 1) ? (11 - $r1) : 0;
52 for($i = 0; $i < 9; $i++) {
53 $d2 += $cpf[$i] * (11 - $i);
54 }
55 $r2 = ($d2 + ($d1 * 2)) % 11;
56 $d2 = ($r2 > 1) ? (11 - $r2) : 0;
57 if (substr($cpf, -2) == $d1 . $d2){
58 return $cpfOriginal;}
59 else {
60 throw new Exception('CPF Invalido', 4);
61 }
www.esab.edu.br 248
62 } else {
63 throw new Exception('CPF Invalido', 4);
64 }
65 }
66 function Aniversariante ($nome, $email,
$caracteristicas, $telefone, $cpf){
67 try {
68 $this->nome = $nome;
69 $this->email = $this->validaEmail($email);
70 $this->caracteristicas = $caracteristicas;
71 $this->telefone = $this-
>validaTelefone($telefone);
72 $this->cpf = $this->validaCPF($cpf);
73 $this->dataNascimento = $this-
>validaData($dataNascimento);
74 }
75 catch (Exception $e){
76 echo '<table> <tr><td><strong>Exceção
' . $e->getCode() .'</strong> '.
$e->getMessage().' em '. $e->getFile().'
na linha '. $e->getLine() .'</td></tr></
table><br />';
77 }
78 }
79 function salvaArquivo($nomeArquivo){
80 $arquivo = fopen($nomeArquivo, 'a+');
81 fwrite($arquivo, $this->nome.';'.$this-
>email.';'.$this->telefone.';'.$this-
>caracteristicas.';'.$this->cpf.';'. $this-
>dataNascimento.';'. $this->data.”\r\n”);
82 fclose($arquivo);
83 echo '<table> <tr><td>Os dados de <strong>'
. $this->nome.'</strong> '. ' foram salvos
corretamente</td></tr></table><br />';
84 }
85 }
86 class AniversarianteExterior extends
Aniversariante{
87 function validaTelefone($telefone){
88 echo $telefone;
$padraoTelefone = "/^[\(0-9\){3} [0-9]{3}-
[0-9]{4}$/";
$avaliaTelefone = preg_
match($padraoTelefone, $telefone);
if(!$avaliaTelefone) {
throw new Exception('Telefone Inválido', 4);
www.esab.edu.br 249
} else {
return $telefone;
}
}
}
?>
www.esab.edu.br 250
14 <td> <INPUT type="text"
name=datanascimento size=10> </td>
15 </tr>
16 <tr>
17 <td> E-mail: </td>
18 <td> <INPUT type="text" name=email
size=30> </td>
19 </tr>
20 <tr>
21 <td> Telefone: </td>
22 <td> <INPUT type="text" name=telefone
size=12> </td>
23 </tr>
24 <tr>
25 <td> Características: </td>
26 <td> <INPUT type="text"
name=caracteristicas size=60> </td>
27 </tr>
28 <tr>
29 <td> Origem: </td>
30 <td> <select name="origem">
<option value="1">Brasil</option><option
value="2">Exterior</option></select> </td>
31 </tr>
32 </table>
33 <INPUT type="submit" value="Enviar">
34 <INPUT type="reset" value="Limpar">
35 </form>
36 <?php require('rodape.inc');?>
No Código 111 são definidas, então, entradas para a seleção dos dados,
os quais serão enviados, via método post, ao script definido no Código
112, que representa o processamento dessas variáveis enviadas, a
instância e o uso das classes:
www.esab.edu.br 251
Código 112 – Script que recebe dados enviados por método post e utiliza classe Aniversariante
1 <?php
2 require('aniversarianteClasse.inc');
3 require('cabecalho.inc');
4 $nomeArquivo = 'c:\\wamp\\www\\pacote6\\
aniversariante.txt';
5 $nome = $_POST["nome"];
6 $email = $_POST["email"];
7 $datanascimento = $_POST["datanascimento"];
8 $caracteristicas = $_
POST["caracteristicas"];
9 $telefone = $_POST["telefone"];
10 $cpf = $_POST["cpf"];
11 $origem = $_POST["origem"];
12 if ($origem == '1'){
13 $aniversariante = new Aniversariante($nome,
$email, $caracteristicas, $telefone, $cpf,
$datanascimento);
14 } else {
15 $aniversariante = new
AniversarianteExterior($nome, $email,
$caracteristicas, $telefone, $cpf,
$datanascimento);
16 }
17 $aniversariante->data = time();
18 $aniversariante->salvaArquivo($nomeArquivo);
19 require('rodape.inc');
20 ?>
www.esab.edu.br 252
Atividade
Chegou a hora de você testar seus conhecimentos
em relação às unidades 28 a 36. Para isso, dirija-se ao
Ambiente Virtual de Aprendizagem (AVA) e responda
às questões. Além de revisar o conteúdo, você estará
se preparando para a prova. Bom trabalho!
www.esab.edu.br 253
Resumo
www.esab.edu.br 254
Desenvolvendo uma aplicação
37 coesa – parte 1
Objetivo
Desenvolver uma aplicação empregando os conhecimentos
aprendidos nesta unidade, utilizando funções, reutilizando código e
tratando exceções.
www.esab.edu.br 255
8 $d1 = 0;
9 $d2 = 0;
10 for($i = 0; $i < 9; $i++){
11 $d1 += $cpfSemFormatacao[$i] * (10 -
$i);
12 }
13 $r1 = $d1 % 11;
14 $d1 = ($r1 > 1) ? (11 - $r1) : 0;
15 for($i = 0; $i < 9; $i++) {
16 $d2 += $cpfSemFormatacao[$i] * (11 -
$i);
17 }
18 $r2 = ($d2 + ($d1 * 2)) % 11;
19 $d2 = ($r2 > 1) ? (11 - $r2) : 0;
20 if (substr($cpfSemFormatacao, -2) == $d1
. $d2){
21 return $cpfSemEspacos;}
22 else {
23 return 0;
24 }
25 } else {
26 return 0;
27 }
28 }
29 ?>
O Código 113 apresenta um arquivo PHP (que pode ser salvo com
qualquer extensão) que será requerido em um ou mais scripts. Na linha
2 é definida a assinatura da função, sendo possível observar que a função
recebe um parâmetro. A linha 3 utiliza o método trim para retirar os
espaços que poderiam estar no início ou no fim do texto e causar erro.
As linhas 4 e 5 determinam, respectivamente, uma expressão regular
e se o padrão é encontrado atribuem o resultado dessa validação à
variável $avaliaCPF. A linha 6 atribui à variável $cpfSemFormatacao
o valor de $cpfSemEspacos, retirando a formatação (pontos e hífen) e
deixando somente os dígitos numéricos. A linha 7 avalia se a resposta
da comparação com a expressão regular é verdadeira e se o tamanho dos
caracteres é igual a 11 (tamanho exato do CPF válido). Caso a expressão
testada na linha 7 seja positiva, continua o fluxo de testes (linhas 8 a 24)
e, caso negativa, retorna valor 0 para a função, como encontrado na linha
26. Os comandos entre 8 e 19 calculam o valor dos dígitos verificadores
www.esab.edu.br 256
do CPF, que são comparados com os últimos dois dígitos do CPF
passado como parâmetro e, em caso positivo, retorna o valor do CPF
(linha 21) e, caso negativo, retorna o valor 0 (linha 23).
www.esab.edu.br 257
29 $cpf = $_POST["cpf"];
30 $cliente = new Cliente($nome, $email,
$endereco, $cidade, $telefone, $cpf);
31 if ($cliente->cpf==0){
32 echo '<table> <tr><td> CPF Invalido</td></
tr></table><br />';
33 } else {
34 $cliente->salvaArquivo($nomeArquivo);
35 }
36 ?>
www.esab.edu.br 258
que é o valor definido em caso de erro na validação do CPF), apresenta
mensagem de erro (“CPF Inválido”); caso contrário, salva em arquivo
texto, chamando a função salvaArquivo(), da linha 34. Para utilizar
esse arquivo, salve com o nome clienteClasse.php, que será utilizado
posteriormente.
www.esab.edu.br 259
Código 115 – Utilizando função de validar CPF definida em outro arquivo
1 <?php require('header.inc');?>
2 <form action="cliente.php" method="POST"
id=form_cliente>
3 <table border=0>
4 <tr>
5 <td> Nome: </td>
6 <td> <INPUT type="text" name=nome
size=50 id=quantidade> </td>
7 </tr>
8 <tr>
9 <td> CPF: </td>
10 <td> <INPUT type="text" name=cpf
size=14> </td>
11 </tr>
12 <tr>
13 <td> E-mail: </td>
14 <td> <INPUT type="text" name=email
size=30> </td>
15 </tr>
16 <tr>
17 <td> Endereço completo: </td>
18 <td> <INPUT type="text" name=endereco
size=60> </td>
19 </tr>
20 <tr>
21 <td> Cidade: </td>
22 <td> <INPUT type="text" name=cidade
size=30> </td>
23 </tr>
24 <tr>
25 <td> Telefone: </td>
26 <td> <INPUT type="text" name=telefone
size=20> </td>
27 </tr>
28 </table>
29 <INPUT type="submit" value="Enviar">
30 </form>
31 <?php require('footer.inc');?>
www.esab.edu.br 260
Caso não sejam aplicados os arquivos determinados, a linguagem gerará
erro do seu uso. Observe atentamente que, na linha 2, é chamado um
script PHP, que se trata do código salvo previamente (Código 115) e
reaproveitado. Dessa forma, quando requisitado, o código definido
executa funções desse formulário.
www.esab.edu.br 261
Desenvolvendo uma aplicação
38 coesa – parte 2
Objetivo
Desenvolver uma aplicação empregando os conhecimentos
aprendidos nesta unidade, utilizando Orientação a Objeto.
www.esab.edu.br 262
8 $d1 = 0;
9 $d2 = 0;
10 for($i = 0; $i < 9; $i++){
11 $d1 += $cpfSemFormatacao[$i] * (10 -
$i);
12 }
13 $r1 = $d1 % 11;
14 $d1 = ($r1 > 1) ? (11 - $r1) : 0;
15 for($i = 0; $i < 9; $i++) {
16 $d2 += $cpfSemFormatacao[$i] * (11 -
$i);
17 }
18 $r2 = ($d2 + ($d1 * 2)) % 11;
19 $d2 = ($r2 > 1) ? (11 - $r2) : 0;
20 if (substr($cpfSemFormatacao, -2) == $d1
. $d2){
21 return $cpfSemEspacos;}
22 else {
23 throw new Exception('CPF Inválido',
1);;
24 }
25 } else {
26 throw new Exception('CPF Inválido', 1);;
27 }
28 }
29 function validaNumeros($numero){
30 $padraoNumeros = "/^[0-9]{1,3}/";
31 $avalianumero = preg_match($padraoNumeros,
$numero);
32 if(!$avalianumero) {
33 throw new Exception('Numero Inválido', 2);
34 } else {
35 return $idade;
36 }
37 }
38 function validaCep($cep){
39 if (strlen($cep)== 8){
40 $cepFormatado = substr($cep, 0, 5) . '-' .
substr($cep, 5, 3);
41 } else {
42
43 }
44 $padraoCEP = "/^[0-9]{5}-[0-9]{3}$/";
45 $avaliaCep = preg_match($padraoCEP,
$cepFormatado);
46 if(!$avaliaCep) {
47 throw new Exception('CEP Inválido', 3);
48 } else {
www.esab.edu.br 263
49 return $cepFormatado;
50 }
51 }
52 function validaEmail($email){
53 $padraoEmail = "/^[a-z][a-z0-9_\.\-]*@[a-z0-
9_\.\-]*[a-z0-9_\-]+\.[a-z]{2,4}$/i";
54 $avaliaemail = preg_match($padraoEmail,
$email);
55 if(!$avaliaemail) {
56 throw new Exception('E-mail Inválido', 4);
57 } else {
58 return $email;
59 }
60 }
61 function validaTelefone($telefone){
62 $padraoTelefone = "/^\([0-9]{2}\)[0-9]{4,5}-
[0-9]{4}$/";
63 $avaliaTelefone = preg_
match($padraoTelefone, $telefone);
64 if(!$avaliaTelefone) {
65 throw new Exception('Telefone Inválido', 5);
66 } else {
67 return $telefone;
68 }
69 }
70 ?>
Ainda assim, a exceção lançada deve ser tratada no código que a chama.
Assim, o Código 117 apresenta as alterações definidas a partir do
Código 114.
www.esab.edu.br 264
Código 117 – Arquivo de validação
1 <?php
2 require('Validacoes.inc');
3 class Cliente {
4 var $nome, $email, $endereco, $cidade,
$telefone, $cpf;
5 function validaCPFInterno($cpf){
6 return validaCPF($cpf);
7 }
8 function validaTelefoneInterno($telefone){
9
10 }
11 function validaemailInterno($email){
12
13 }
14 function Cliente ($nome, $email, $endereco,
$cidade, $telefone, $cpf){
15 try {
16 $this->nome = $nome;
17 $this->email = $this-
>validaemailInterno($email);
18 $this->endereco = $endereco;
19 $this->cidade = $cidade;
20 $this->telefone = $this->validaTelefoneInt
erno($telefone);
21 $this->cpf = $this-
>validaCPFInterno($cpf);
22 }
23 catch (Exception $e){
24 throw $e;
25 }
26 }
27 function salvaArquivo($nomeArquivo){
28 $arquivo = fopen($nomeArquivo, 'a+');
29 fwrite($arquivo, $this->nome.';'.$this-
>email.';'.$this->endereco.';'.$this-
>cidade.';'.$this->telefone.';'.$this-
>cidade.';'.$this->cpf.”\r\n”);
30 fclose($arquivo);
31 echo '<table> <tr><td>Os dados de <strong>'
. $this->nome.'</strong> '. ' foram salvos
corretamente</td></tr></table><br />';
32 }
33 }
34 $nomeArquivo = 'c:\\wamp\\www\\pacote7\\
cliente.txt';
35 $nome = $_POST["nome"];
36 $email = $_POST["email"];
www.esab.edu.br 265
37 $endereco = $_POST["endereco"];
38 $cidade = $_POST["cidade"];
39 $telefone = $_POST["telefone"];
40 $cpf = $_POST["cpf"];
41 try {
42 $cliente = new Cliente($nome, $email,
$endereco, $cidade, $telefone, $cpf);
43 $cliente->salvaArquivo($nomeArquivo);
44 }
45 catch (Exception $e){
46 echo '<table> <tr><td><strong>Exceção
' . $e->getCode() .'</strong> '.
$e->getMessage().' em '. $e->getFile().'
na linha '. $e->getLine() .'</td></tr></
table><br />';
47 }
48 ?>
Observe que, nas linhas 14 a 26, é definido o constructor, que, por sua
vez, chama a validação das variáveis. Das linhas 15 a 22 temos um bloco
que utiliza o try para interceptar a exceção e, nesse caso, a exceção é
novamente lançada. Isso é feito para que, em caso de erros encontrados
nas validações dos valores, a aplicação possa executar o código que monta
a mensagem de erro, como podemos ver nas linhas 34 e 44.
www.esab.edu.br 266
38.2 Testando e encontrando erros
Para confirmar o funcionamento de nossa aplicação e observar se os
erros estão sendo tratados, vamos elaborar um plano de testes. Para isso,
vamos montar uma tabela com quatro testes possíveis: no primeiro teste
criaremos um erro para e-mail; no segundo, forçaremos um erro no
telefone; para o terceiro teste vamos criar um erro para CPF; e, em nosso
último teste, os dados deverão ser validados e o arquivo salvo. Observe
que são validados dados de e-mail, telefone e CPF. A Tabela 10 mostra os
valores inseridos e o resultado esperado.
www.esab.edu.br 267
Continuando o aplicativo desenvolvido na unidade 37, nesta unidade
você complementou a aplicação desenvolvendo tratamento de exceções.
Dessa forma, o aplicativo, que já reaproveitava código utilizando funções
definidas em um arquivo aplicando em método de classe específica,
possibilita código reaproveitável com tratamento de exceções. Na
unidade 39 vamos controlar sessões, de forma a aproveitar dados de um
script em outro, mesmo que em páginas diferentes. Em frente!
www.esab.edu.br 268
39 Controlando sessões
Objetivo
Apresentar sessões com uso de cookies, bem como o uso de variáveis
de sessão.
www.esab.edu.br 269
Para iniciar uma sessão, podemos utilizar a instrução session_start().
Em caso de uso da função sem argumentos, uma sessão é procurada ou
criada, caso não exista.
Sua sintaxe é:
setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string
$domain [, bool $secure = false [, bool $httponly = false ]]]]]])
www.esab.edu.br 270
Apenas o argumento $name é obrigatório e determina o nome do cookie.
O valor do cookie, atribuído à variável $value, pode ser lido através de
$_COOKIE[‘nome do cookie’]. O tempo que expira o cookie, ou seja,
o tempo no qual a informação é valida após o fechamento da sessão, é
definido pelo parâmetro $expire. Caso configurado como 0, a sessão
expira após o fechamento do navegador. Normalmente o controle de
tempo de expiração da sessão é gerido usando a função time() somada
ao tempo, em segundos, para determinar quanto tempo o cookie é
válido após o fechamento. O caminho no servidor é representado pela
variável $path: o valor ‘/’ disponibiliza o cookie por todo o domain e,
se passarmos ‘/foo/’, disponibilizamos o cookie para o diretório ‘/foo/’ e
seus subdiretórios. A variável $domais determina o domínio para qual o
cookie está disponível, como ‘www.exemplo.com.br’. A variável $secure
indica se o cookie poderá ser transmitido somente com uma conexão
segura (https), enquanto a variável httponly determina se o cookie
estará disponível somente sob o protocolo http, não deixando o cookie
disponível, por exemplo, para ser acessível por linguagens de script.
www.esab.edu.br 271
Código 119 – Visualizando o conteúdo do Cookie
1 <?php
2 echo $_COOKIE["CookieTeste"];
3 print_r($_COOKIE);
4 ?>
www.esab.edu.br 272
Deve ter ficado claro para você que o objetivo de demonstrar o uso
de sessão e de cookies, até este momento, é o de possibilitar o uso de
informações oriundas de um script em outro, ou seja, impedir que dados
sejam perdidos com uma nova requisição feita ao servidor, que abre um
novo recurso ou página. Na próxima seção programaremos uma sessão
simples e veremos como a implementamos.
www.esab.edu.br 273
O Código 122 apresenta a definição de formulário, bem como o teste se
existe o cookie.
www.esab.edu.br 274
Para o processamento é necessária a leitura das informações enviadas pelo
método post, o qual deve criar a sessão salvando a variável de sessão e
também o cookie, como pode ser observado no Código 123.
www.esab.edu.br 275
Novamente, lembre-se de salvar o Código 124 como pagina2.php,
como foi definido na linha 7 do Código 123. Na linha 2, chamando o
método session_start(), visto a existência de sessão, é recuperada a sessão
existente. A linha 3 apresenta valor da variável de sessão, mostrando que
é possível recuperar tal informação enquanto mantemos a navegação.
www.esab.edu.br 276
Estudo complementar
O controle de sessões e cookies é assunto de artigo
“Cookies e Sessões em PHP”, escrito por João
Martins. Nele o autor apresenta o uso e alguns
exemplos práticos de cookies e sessões. Você pode
acessar o material clicando aqui.
www.esab.edu.br 277
40 Definindo padrões de codificação
Objetivo
Apresentar a utilização de padrões de desenvolvimento de código
de forma a construir projetos sustentáveis e com boa capacidade de
manutenção.
www.esab.edu.br 278
Uma das grandes necessidades para a manutenção de códigos é a
definição de padrões de codificação. Esses padrões de desenvolvimento
de códigos representam o estilo de escolha de nomes de variáveis e de
métodos, diretivas para comentários em códigos.
www.esab.edu.br 279
• classes: os comentários devem definir o propósito da classe e, para
métodos, deve-se considerar a mesma forma de uso de comentários
de funções;
• fragmentos de código dentro de um script ou função: dependendo
da complexidade, é pertinente comentar códigos de modo a facilitar
o entendimento de suas partes ou conjunto de instruções;
• código completo: quando da definição de códigos complexos,
ou daqueles que demandaram várias horas de desenvolvimento,
é importante descrever o seu funcionamento para facilitar o
entendimento.
Thomson e Welling (2005) completam que os códigos devem ser
comentados à medida que se avança, evitando o retorno para inserir os
comentários após o término da codificação.
www.esab.edu.br 281
Observe que, diminuindo a ocorrência dos elementos mencionados
anteriormente, a percepção de qualidade da aplicação, sob o ponto de
vista do usuário, é alterada positivamente.
www.esab.edu.br 282
Estudo complementar
É crescente o número de ferramentas que
possibilitam o teste automatizado, no qual não é
diretamente utilizado um usuário para efetuar os
testes. O artigo “Automação de testes funcionais
com Selenium”, de Ismayle de Sousa Santos e
Pedro de Alcântara dos Santos Neto, aborda o
conceito dos testes automatizados e apresenta a
ferramenta Selenium. Disponível clicando aqui.
www.esab.edu.br 283
41 Depurando o código
Objetivo
Apresentar o uso de depuradores, de forma a encontrar erros de
sintaxe, erros de tempo de execução e erros de lógica.
www.esab.edu.br 284
Se um script não seguir as regras do PHP – isto é, contiver erros de sintaxe – o
analisador de sintaxe do PHP não será capaz de processar parte do script ou todo
o script. As pessoas são boas em inferir informações a partir de dados parciais ou
contraditórios. Os computadores não.
www.esab.edu.br 285
Dica
O não fechamento de blocos corresponde a um
erro de sintaxe que, ao ser apresentado, define a
linha final como local do erro, no qual é esperado
$end. Dessa forma, procure um bloco que é aberto
(com “{“), mas sem ser devidamente fechado
(com “}”). Nesse caso, o erro é apresentado como
se ocorresse no final do arquivo, apesar de não se
tratar exatamente de uma falha nesse local.
www.esab.edu.br 286
Código 126 – Script com erro de tempo de execução – divisão por zero
01 <?php
02 function divisao ($n1, $n2){
03 return $n1/$n2;
04 }
05 echo divisao(10, 5);
06 echo divisao(10, 0);
07 ?>
www.esab.edu.br 287
41.3 Encontrando erros de lógica
Os erros de lógica são os mais difíceis de encontrar ou eliminar, pois não
apresentam mensagens de erro na tela, visto que a aplicação atende a
todos os quesitos de sintaxe e de tempo de execução. Porém, não atende
às regras de definição da execução, que norteiam a escrita do script.
Como exemplo consideremos o cálculo de médias de alunos, contendo
três notas. Nesse caso, a aplicação calcula a média ponderada entre as
notas e, caso seja maior ou igual a 7, é apresentada na tela a mensagem
de aprovação. O Código 127 apresenta o desenvolvimento desse script,
porém, com erro de lógica.
www.esab.edu.br 288
Nesta unidade foram apresentados conceitos de testes para depuração
e alguns exemplos de como encontrar erros de sintaxe, erros de tempo
de execução e erros de lógica. Na unidade 42 estudaremos a criação de
documentos RTF e PDF para gerar relatórios em nossas aplicações web.
Saiba mais
O Portal de PHP da comunidade portuguesa de
PHP apresenta como configurar o Apache e o
Eclipse PDT para fazer o debug (depuração), ou
seja, efetuar a execução com paradas ou passo a
passo (cada um dos comandos), podendo obter
os valores intermediários das execuções. Dessa
forma, conhecendo os valores intermediários,
o processo de correção de erros é facilitado.
Disponível clicando aqui.
www.esab.edu.br 289
42 Gerando documentos RTF e PDF
Objetivo
Apresentar o desenvolvimento de documentos RTF e PDF.
www.esab.edu.br 290
Figura 55 – Escrevendo modelo de RTF usando Write.
Fonte: Elaborada pelo autor (2014).
Agora vamos desenvolver o script que recebe os dados que serão atribuídos
em nosso documento e que monta o documento final, salvando-o e
disponibilizando ao usuário. O Código 128 apresenta tal definição.
www.esab.edu.br 291
Código 128 – Script com desenvolvimento de documento RTF a partir de modelo
01 <?php
02 $nome = 'seu nome';
03 $curso = 'seu curso';
04 $cidade = 'Florianópolis';
05 $data = '01 de janeiro de 2014';
06 $nomeArquivo = 'testeRelatorio.rtf';
07 $rtf = file_get_contents($nomeArquivo);
08 $rtf = str_replace('<<nome>>', $nome, $rtf);
09 $rtf = str_replace('<<curso>>', $curso,
$rtf);
10 $rtf = str_replace('<<cidade>>', $cidade,
$rtf);
11 $rtf = str_replace('<<data>>', $data, $rtf);
12 header('Content-type: application/rtf');
13 header('Content-Disposition: attachment;
filename=Relatorio.rtf');
14 echo $rtf;
15 ?>
www.esab.edu.br 292
Executando o Código 128 será apresentado o documento. Observe a
Figura 56 com o resultado.
www.esab.edu.br 293
Para utilizar essa biblioteca, primeiramente faça o download de sua
última versão no site <http://www.fpdf.org/>, na seção de downloads.
Em seguida, descompacte os arquivos em uma pasta, sendo preciso
copiar, para a pasta na qual está seu script, o arquivo fpdf.php e a pasta
fonts, necessária para o funcionamento da classe.
www.esab.edu.br 294
arquivo, o qual contém a classe FPDF. Mas atenção! Lembre-se de que o
arquivo deve estar na pasta na qual se encontra o nosso script. Na linha
7 é criada a instância dessa classe e esta é atribuída à variável $pdf. Essa
variável será utilizada para as operações até a geração do PDF. Na linha
8 é executado método que inclui uma nova página, que, nesse caso, é no
formato A4. A linha 9 insere uma imagem usando o método image, que
pode receber como parâmetro o caminho da imagem, as coordenadas
x e y da imagem, a largura da imagem, a altura da imagem, o tipo da
imagem (pdf, png etc.) e um link que será adicionado à imagem –
somente o caminho é obrigatório. A linha 10 altera a configuração de
fonte, definindo tamanho, efeito (‘B’ representa negrito ou bold, em
inglês) e tamanho. Na linha 10 o texto definido é negritado, tamanho
15, enquanto o método SetFont definido na linha 14 define o texto sem
efeito de tamanho 11. A linha 11 apresenta o uso do método Cell() e
define um espaço de texto (chamado célula) que, nesse caso, não tem
texto. O método Cell() é aplicado também na linha 12. Os parâmetros
do método Cell() são, respectivamente: a largura da célula (caso usar
0, estenderá até o lado direito da página, ocupando 100% da largura),
a altura da célula, o texto a ser inserido na célula, a borda (0 para sem
borda, 1 para inserir borda), o local onde será iniciada a escrita após
a função (0 fica à direita, 1 no início da próxima linha, 2 abaixo), o
alinhamento (L à esquerda, C centralizado e R alinhado à direita) e o
fundo que será inserido (true ou false).
www.esab.edu.br 295
Resumo
www.esab.edu.br 296
Na unidade 42 estudamos a criação de documentos RTF e PDF a partir
de modelos para gerar relatórios em nossas aplicações web.
www.esab.edu.br 297
Desenvolvendo aplicações
43 completas com PHP – parte 1
Objetivo
Desenvolver uma aplicação empregando os conhecimentos
aprendidos nesta unidade, desenvolvendo códigos limpos com uso de
sessões e, também, um carrinho de compras.
www.esab.edu.br 298
Código 130 – Cabeçalho da aplicação
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/
loose.dtd">
2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/
html; charset=ISO-8859-1">
5 <style>
6 h1 { color:white; font-size:24pt; text-
align:center}
7 h2 { color:000099; font-size:24pt; text-
align:center}
8 h3 { color:000099; font-size:20pt; text-
align:center}
9 .menu {color:white; font-size:12pt; text-
align:center}
10 .dados { color:black; font-size:12pt; text-
align:left}
11 .creditos {color:white; font-size:8pt; text-
align:center}
12 .dadosLogin {color:white; font-size:8pt;
text-align:left}
13 .produtos {font-size:14; text-align:left;
color:000099}
14 .produto-nome {font-size:36; text-
align:center; color:000099}
15 .produto-valor{font-size:16; text-
align:left; color:000099}
16 .botao{width: 59px;height:18px;border:solid
0px;font-family:Calibri, Arial, sans-serif;
color:#fff; font-weight:bold;
17 </style>
18 </head>
19 <body>
20 <table width=100% border=0>
21 <tr bgcolor=000033>
22 <td align=left width=100><img src="http://
www.esab.edu.br/wp-content/uploads/2013/07/
icon-biblioteca.png"></td>
23 <td><h1> Loja on-line </h1></td>
24 </tr>
25 </table>
www.esab.edu.br 299
O Código 130 apresenta, na linha 2, a abertura de nossos documentos
(lembre-se de que todo documento HTML a ser retornado deve ser
delimitado pelas tags <html> e </html>). Entre as linhas 5 e 17, são
estabelecidas as folhas de estilo, de forma a utilizar tais definições (de
fontes, de tamanhos, de efeitos etc.) em qualquer script que reutilize o
nosso cabeçalho. Ele também apresenta uma tabela, aberta na linha 20,
que contém uma célula, definida na linha 22, com uma imagem (como
se fosse uma logomarca) e outra célula contendo o texto “Loja on-line”,
formatado pelo estilo h1, conforme definido na linha 23. Na linha 25, a
tabela, iniciada na linha 20, é fechada. Observe que as tags <html> (linha
2) e <body> (linha 19) são abertas, porém, não são fechadas, pois serão
inseridas no rodapé. Salve o conteúdo desse código como header.inc.
www.esab.edu.br 300
Código 132 – Script para acesso à aplicação
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/
loose.dtd">
2 <?php session_start();
3 require('header.inc');?>
4 <form name="form1" id="form1" method="post"
action="index.php">
5 <table>
6 <tr>
7 <td>Usuario:</td>
8 <td>
9 <input type="text" name="login" id="login"
size="20" maxlength="20" value =
10 <?php
11 if (isset($_COOKIE["login"])) {
12 echo $_COOKIE["login"];
13 } else {
14 echo “”;
15 }?>/>
16 </td>
17 </tr>
18 <tr>
19 <td>Senha:</td>
20 <td><input type="password" name="senha"
id="senha" size="20" maxlength="20"/>
21 </td></tr>
22 <tr>
23 <td colspan="2">
24 <input type="submit" value="Efetuar Login"
/>
25 </td>
26 </tr>
27 </table>
28 </form>
29 <?php require('footer.inc');?>
www.esab.edu.br 301
o valor “”. Esse valor retornado é atribuído à propriedade value (valor).
São definidos, ainda, componentes para a senha (do tipo password) e
botão para submeter o formulário, além de reaproveitarmos o cabeçalho
e o rodapé, utilizando instrução require().
www.esab.edu.br 302
mensagem de login inválido (linha 17), com link para a tela de login,
em caso contrário. O código deve ser salvo com o nome index.php. A
linha 15 será reescrita para definir links para acesso às telas utilizadas
na administração do sistema, por exemplo, o formulário de cadastro de
clientes, assunto da próxima seção.
www.esab.edu.br 303
O Código 134 mostra um formulário que define componentes de
entrada de dados para a leitura dos campos nome, CPF (ou CNPJ),
e-mail, endereço completo, cidade, telefone, CEP, usuário e senha
(para usar no acesso), entre as linhas 6 e 14. Para o design de nosso
formulário, foi definido o uso de tabela aplicando a folha de estilo com
o nome “dados”, definido no arquivo header.inc. O botão de submissão
executa o método post, chamando o script cliente.php (definido na
linha 4), a ser definido na próxima seção. Salve o arquivo com o nome
“clienteFormulário.php”.
www.esab.edu.br 304
Código 135 – Script com classe Cliente
1 <?php
2 class Cliente {
3 var $nome, $email, $endereco, $cidade,
$telefone, $cpf_cnpj, $criador, $login,
$senha;
4 function Cliente ($nome, $email, $endereco,
$cidade, $telefone, $cep, $cpf_cnpj, $login,
$senha){
5 try {
6 session_start();
7 $this->nome = $nome;
8 $this->email = $email;
9 $this->endereco = $endereco;
10 $this->cidade = $cidade;
11 $this->telefone = $telefone;
12 $this->cep = $cep;
13 $this->cpf_cnpj = $cpf_cnpj;
14 $this->criador = $_SESSION["login"];
15 $this->login = $login;
16 $this->senha = $senha;
17 }
18 catch (Exception $e){
19 throw $e;
20 }
21 }
22 function salvaArquivo($nomeArquivo){
23 $arquivo = fopen($nomeArquivo, 'a+');
24 fwrite($arquivo, $this->nome.”;”.$this-
>email.”;”.$this->endereco.”;”.$this-
>cidade.”;”.$this->telefone.”;”.$this-
>cep.”;”.$this->cpf_cnpj.”;”.$this-
>criador.”;”.$this->login.”;”.$this-
>senha.”;\n”);
25 fclose($arquivo);
26 }
27 }
28 ?>
www.esab.edu.br 305
O Código 135 define a classe Cliente e, na linha 3, são definidos os
atributos. Também é definido, entre as linhas 2 e 21, um constructor,
recebendo dados iniciais necessários (recebidos pelos parâmetros
$nome, $email, $endereco, $cidade, $telefone, $cep, $cpf_cnpj, $login,
$senha), no momento no qual é criado algum objeto instanciado. Nesse
constructor é atribuído, além dos valores recebidos, o valor da variável
de sessão (atribuída quando acessa o sistema) que armazena o login
do usuário que cria o registro, como pode ser observado na linha 14.
Em caso de erro, é lançada uma exceção, definida na linha 19. Ainda é
definido o método salvaArquivo, que salva o arquivo com os dados do
objeto, como o nome recebido como parâmetro. Salve esse script como
clienteClasse.php.
www.esab.edu.br 306
Código 136 – Script que processa formulário, utilizando classe Cliente
1 <?php
2 require('clienteClasse.php');
3 $nome = $_POST["nome"];
4 $email = $_POST["email"];
5 $endereco = $_POST["endereco"];
6 $cidade = $_POST["cidade"];
7 $telefone = $_POST["telefone"];
8 $cpf = $_POST["cpf"];
9 $cep = $_POST["cep"];
10 $login = $_POST["login"];
11 $senha = $_POST["senha"];
12 require('header.inc');
13 try {
14 $cliente = new Cliente($nome, $email,
$endereco, $cidade, $telefone, $cep, $cpf,
$login, $senha);
15 $nomeArquivo = 'c:\\apache\\ htdocs\\
cliente.txt';
16 $cliente->salvaArquivo($nomeArquivo);
17 echo '<table> <tr><td>Os dados de <strong>'
. $nome.'</strong> '. ' foram salvos
corretamente</td></tr></table><br />';
18 echo '<table> <tr><td><a href="Principal.
php">Menu Principal </a></td></tr></table>';
19 }
20 catch (Exception $e){
21 echo '<table> <tr><td><strong>Exceção
' . $e->getCode() .'</strong> '.
$e->getMessage().' em '. $e->getFile().'
na linha '. $e->getLine() .'</td></tr></
table><br />';
22 echo '<table> <tr><td><a
href="clienteFormulario.php">Voltar </a></
td></tr></table>';
23 }
24 require('footer.inc');
25 ?>
www.esab.edu.br 307
Nesta unidade, iniciamos o desenvolvimento de uma aplicação completa,
definindo cabeçalhos e rodapés que serão reutilizados, tela de acesso
e entrada de dados de cliente. Para isso, aplicamos conhecimento de
formulários, programação orientada a objetos, controle de sessão, cookies
e tratamento de exceções. Nas próximas unidades, continuaremos o
desenvolvimento de nossa aplicação.
www.esab.edu.br 308
Desenvolvendo aplicações
44 completas com PHP – parte 2
Objetivo
Desenvolver uma aplicação empregando os conhecimentos
aprendidos nesta unidade, desenvolvendo códigos limpos com uso de
sessões e, também, um carrinho de compras.
www.esab.edu.br 309
Código 137 – Formulário para entrada de dados de produtos
1 <?php
2 session_start();
3 require('header.inc');?>
4 <form enctype="multipart/form-data"
action="produto.php" method="POST" id=form_
produto>
5 <table border=0>
6 <tr><td> Código: </td><td> <INPUT
type="text" name=codigo size=50 id=codigo>
</td></tr>
7 <tr><td> Nome: </td><td> <INPUT type="text"
name=nome size=50 id=nome> </td></tr>
8 <tr><td> Caracteristicas do produto:
</td><td> <INPUT type="text"
name=caracteristicas size=3000
id=caracteristica> </td></tr>
9 <tr><td> Valor: </td><td> <INPUT type="text"
name=valor size=30 id=valor> </td></tr>
10 <tr> <td> <input type="hidden" name="MAX_
FILE_SIZE" value="1000000"> Arquivo: </
td><td><input name="userfile" type="file"></
td></tr>
11 </table>
12 <INPUT type="submit" value="Enviar">
13 <br><a href="index.php">Voltar</a>
14 </form>
15 <?php require('footer.inc');?>
www.esab.edu.br 310
44.2 Salvando arquivo de cadastro de produtos
Para processar o envio de dados, vamos novamente utilizar a orientação
a objeto, defendida por Thomson e Welling (2005). Observe o Código
138, que define a classe Produto.
www.esab.edu.br 311
33 return $this->codigo;
34 }
35 function salvaArquivo($nomeArquivo){
36 $arquivo = fopen($nomeArquivo, 'a+');
37 fwrite($arquivo, $this->nome.”;”.$this-
>caracteristicas.”;”.$this->valor.”;”.$this-
>imagem.”;”.$this->criador.'\n');
38 fclose($arquivo);
39 }
40 }
41 ?>
www.esab.edu.br 312
Código 139 – Script que processa formulário, utilizando classe Produto
1 <?php
2 require('ProdutoClasse.php');
3 $nome = $_POST["nome"];
4 $codigo = $_POST["codigo"];
5 $caracteristicas = $_POST["caracteristicas"];
6 $valor = $_POST["valor"];
7 if (is_uploaded_file($_FILES['userfile']['tmp_
name'])) {
8 $nomeArquivo = 'images/'.$_
FILES['userfile']['name'];
9 if (!move_uploaded_file($_FILES['userfile']
['tmp_name'], $nomeArquivo)){
10 throw new Exception('Erro ao carregar
arquivo', 0);
11 }
12 } else {
13 throw new Exception('Erro ao carregar
arquivo', 0);
14 }
15 try {
16 $produto = new Produto($codigo, $nome,
$caracteristicas, $valor);
17 $produto->setImagem($nomeArquivo);
18 $nomeArquivo = 'c:\\apache\\htdocs\\
produtos.txt';
19 $produto->salvaArquivo($nomeArquivo);
20 require('header.inc');
21 echo '<table> <tr><td>Os dados de <strong>'
. $nome.'</strong> '. ' foram salvos
corretamente</td></tr></table><br />';
22 echo '<table> <tr><td><a href="Principal.
php">Menu Principal </a></td></tr></table>';
23 }
24 catch (Exception $e){
25 require('header.inc');
26 echo '<table> <tr><td><strong>Exceção
' . $e->getCode() .'</strong> '.
$e->getMessage().' em '. $e->getFile().'
na linha '. $e->getLine() .'</td></tr></
table><br />';
27 echo '<table> <tr><td><a
href="produtoFormulario.php">Voltar </a></
td></tr></table>';
28 }
29 require('footer.inc');
30 ?>
www.esab.edu.br 313
O Código 139 recebe os dados enviados pelo formulário no método
post. Porém, para o cadastro de produtos, diferentemente do cadastro de
clientes, é enviado um arquivo (que deve conter a imagem). Na linha 7
é verificado se o arquivo foi enviado, utilizando a função is_uploaded_
file() e acessando parâmetro da variável $_FILES[‘userfile’][‘tmp_name’],
que “[...] é onde o arquivo foi temporariamente armazenado no servidor
Web” (THOMSON; WELLING, 2005, p. 311). Em caso de insucesso
(desviaria para o bloco else, iniciado na linha 9), leva à linha 13, onde é
lançado erro. Na linha 8, é definido o valor do arquivo a ser salvo, sendo
concatenados o nome obtido e o valor ‘images/’, definindo, assim, a pasta
a ser salvo o arquivo. Você deve se lembrar de criar essa pasta dentro da
pasta na qual está o script (por exemplo, a pasta “c:\apache\htdocs”),
de modo a garantir acesso aos arquivos. É verificado, na linha 9, se o
arquivo não foi movido da pasta onde está temporariamente armazenado
para o arquivo com nome definido na linha 8. Em caso de valor
verdadeiro ao teste lógico, significa que não é possível copiar o arquivo
e, por esse motivo, é lançado erro na linha 10. Em caso de sucesso nos
testes lógicos (enviou arquivo e conseguiu mover para a pasta final), é
criado objeto da classe Produto, na linha 16, com dados de inicialização
(new Produto($codigo, $nome, $caracteristicas, $valor);). É atribuído o
nome do arquivo ao atributo $imagem, utilizando a interface definida,
como observado na linha 17; já a linha 18 define o nome do arquivo,
para que, na linha 19, seja chamado o método salvaArquivo(), salvando o
arquivo texto.
www.esab.edu.br 314
O Código 140 apresenta links, nas suas linhas, que levam às telas de
cadastro com os formulários, definidas nos Códigos 134 e 137, com
nomes “clienteFormulario.php” e “produtoFormulario.php”.
www.esab.edu.br 315
Desenvolvendo aplicações
45 completas com PHP – parte 3
Objetivo
Desenvolver uma aplicação empregando os conhecimentos
aprendidos nesta unidade, desenvolvendo códigos limpos com uso de
sessões e, também, um carrinho de compras.
www.esab.edu.br 316
Código 141 – Script com a loja virtual
1 <?php
2 session_start();
3 require("header.inc");
4 $nomeArquivo = 'c:\\apache\\htdocs\\produtos.
txt';
5 if (file_exists($nomeArquivo)){
6 $arquivo = fopen($nomeArquivo, 'r');
7 $contadorColunas = 0;
8 echo '<form action="carrinho.php"
method="post" name="frmcarrinho"><table>';
9 while (!feof($arquivo)){
10 $produto = explode(';', fgets($arquivo));
11 $codigo = $produto[0];
12 $nome = $produto[1];
13 $caracteristica = $produto[2];
14 $valor = $produto[3];
15 $imagem = $produto[4];
16 if ($contadorColunas == 0){
17 echo'<tr>';
18 }
19 echo'<td width=50%><table>';
20 $contadorColunas=+1;
21 echo '<tr><td class="produto-nome"
colspan="2">'.$nome.'</td></tr>';
22 echo '<tr><td><img src="'. $imagem. '"
width="200" length="200" /></td>';
23 echo '<td> <table
class="produtos"><tr><td>Caracteristicas: </
td><td>'.$caracteristica.'</td><tr>';
24 echo '<tr><td> Valor:</td><td
class="produto-valor">'.$valor.'</td><tr>';
25 echo '<input type="hidden"
name="txtprod['.$codigo.'][0]" value="'.
$codigo.'">';
26 echo '<input type="hidden"
name="txtprod['.$codigo.'][1]" value="'.
$nome.'">';
27 echo '<input type="hidden"
name="txtprod['.$codigo.'][2]" value="'.
$caracteristica.'">';
28 echo '<input type="hidden"
name="txtprod['.$codigo.'][3]" value="'.
$valor.'">';
29 echo '<input type="hidden"
name="txtprod['.$codigo.'][4]" value="'.
$imagem.'">';
www.esab.edu.br 317
30 echo '<tr><td> Quantidade:</td><td> <input
type="text" name="txtprod['.$codigo.'][5]"
size=3 id=quantidade value="0"></td><tr>';
31 echo '<tr><td><input type="image"
src="images/carrinho.gif" onClick="java
script: document.forms[0].submit();"></
td><tr></table> </td><tr>';
32 echo '<tr><td colspan="2"> </td></tr>';
33 echo'</table></td>';
34 if ($contadorColunas == 2){
35 echo '</tr>';
36 $contadorColunas = 0;
37 }
38 }
39 fclose($arquivo);
40 echo '</td></tr></table>';
41 } else {
42 echo 'O arquivo não existe';
43 }
44 echo '</form>';
46 ?>
www.esab.edu.br 318
informações da linha (ou seja, equivalente a um produto), separando
pelo símbolo ponto e vírgula, definido no momento que salvamos o
arquivo. A ordem de posição de cada campo no arquivo é equivalente
à ordem segundo a qual eles foram salvos no arquivo, e definidos no
Código 138. Dessa forma, são obtidos os dados e atribuídos em variáveis
com nomes relevantes, para facilitar o entendimento, no trecho entre
as linhas 11 e 15. Caso seja a primeira coluna da linha (teste lógico
realizado na linha 16), insere a tag <tr>, criando uma linha da tabela.
Como teremos duas colunas por linha da tabela, a cada interação (para
cada produto) é criada uma coluna, com tamanho de 50% da largura
da tela. Dentro dessa coluna, é criada uma nova tabela, para que sejam
formatados os dados de cada produto. Essa instrução de definição de
colunas é realizada na linha 19. A linha 20 incrementa 1 ao contador de
colunas. A linha 21 atribui ao conjunto de duas colunas o texto contendo
o nome do produto. Na linha 22 é definida a imagem que será mostrada,
lembrando que guardamos o endereço do arquivo junto aos dados do
produto. As linhas 23 e 24 apresentam os dados de características e valor
do produto. Observe que os dados são formatados com estilos definidos
no cabeçalho (header.inc).
www.esab.edu.br 319
Tal código é capaz de mostrar a tela de pedidos e enviar os dados, via
método post, ao script carrinho.php. definido na próxima seção.
www.esab.edu.br 320
8 $_SESSION["txtprod"] =$produtos;
9 }
10 if (!isset($_SESSION["login"])) {
11 header("Location: login.php", TRUE);
12 }
13 require("header.inc");
14 echo '<table class="produtos">';
15 echo '<tr> <td> </td><td>Produto:</
td><td>Valor: </td><td>Quantidade: </
td><td>Total: </td></tr>';
16 if (isset($_SESSION["cesta"])){
17 $cesta = $_SESSION["cesta"];
18 $contador = count($cesta);
19 foreach ($cesta as $produto){
20 imprimeproduto($produto);
21 }
22 }else {
23 $contador = 0;
24 }
25 if (isset($produtos)){
26 foreach ($produtos as $produto){
27 if ($produto[5]<>0){
28 $produto[6]=$produto[3]*$produto[5];
29 imprimeproduto($produto);
30 $cesta[$contador]=$produto;
31 $contador=+1;
32 }
33 }
34 $_SESSION["cesta"]=$cesta;
35 }
36 echo '<tr> <td colspan="5"><a
href="ConfirmaPedido.php"
class="botao">Confirma Pedido <a></td></tr>';
37 echo '<tr> <td colspan="5"><a href="loja.
php" class="botao">Continuar comprando <a></
td></tr>';
38 echo '</table>';
39 require('footer.inc');
40 ?>
www.esab.edu.br 321
As primeiras linhas do Código 142 definem função com o objetivo
de reutilização de código e serão explicadas quando forem utilizadas,
nas linhas 20 e 29. A linha 6 observa se o script recebe informação via
método post. Tal teste lógico garante que o script não apresente erro
quando for chamado por outra tela sem enviar parâmetros por post.
Caso seja recebida informação pelo método post, enviada por outro
formulário, atribui à variável $produtos o valor da variável txtprod,
enviada por post, que também tem seu valor atribuído à variável de
sessão txtprod. Isto é feito para que, em caso de inexistência de usuário
ativo, o usuário possa ser encaminhado para a tela de acesso e consiga,
posteriormente, continuar a operação. O teste de existência de login
é realizado na linha 10, através da variável de sessão e, caso não seja
encontrado, utiliza a instrução header(“Location: login.php”, TRUE);,
como mostrado na linha 11, para redirecionar para o script de login,
interrompendo a execução do restante do script.
www.esab.edu.br 322
Para o funcionamento da tela de acesso junto à loja virtual (não somente
para a administração do sistema), são necessárias alterações no script
index.php, de forma a considerar o acesso de clientes (e percorrendo a
tabela cliente para encontrar usuário e senha correspondente). O Código
143 apresenta o código do script index.php com as devidas alterações.
www.esab.edu.br 323
33 if (($login == "admin") and ($senha ==
"admin")){
34 $_SESSION["login"] = $login;
35 setcookie("login", $login);
36 require('header.inc');
37 echo '<table> ';
38 echo '<tr><td><a href="clienteFormulario.
php">Cadastro de Clientes </a></td></tr>';
39 echo '<tr><td><a href="produtoFormulario.
php">Cadastro de Produtos </a></td></tr>';
40 echo '</table>';
41 } elseif (($senha == "<>")or
(clienteLogin($login, $senha))) {
42 if (isset($_SESSION["txtprod"])){
43 header("Location: carrinho.php", TRUE);
44 } else {
46 header("Location: loja.php", TRUE);
47 }
48 } else {
49 require('header.inc');
50 echo '<table> <tr><td><strong>Login
inválido </td></tr><tr><td> <a href="login.
php">Voltar</a></td></tr></table>';
51 }
52 ?>
www.esab.edu.br 324
carrinho. Caso não exista uma compra, redireciona à loja e permite
a compra, já com o acesso realizado. Desse modo, o script continua
respondendo ao processamento do login, mas redireciona à loja (em
caso de não existir login e nem variável post), podendo ser usado para
encaminhar ao sistema de administração (cadastro de clientes e produtos)
e à loja virtual.
Estudo complementar
As aplicações de comércio eletrônico vêm
ganhando espaço e a sua utilização tem
aumentado mundialmente. O texto “E-Commerce
como Ferramenta de Vendas”, elaborado pelo Prof.
Vicente Martin Mastrocola, da ESPM-SP, expõe a
utilização dessa ferramenta. Você pode acessar o
material clicando aqui.
www.esab.edu.br 325
Desenvolvendo aplicações
46 completas com PHP – parte 4
Objetivo
Desenvolver uma aplicação empregando os conhecimentos
aprendidos nesta unidade, desenvolvendo códigos limpos com uso de
sessões e, também, um carrinho de compras
www.esab.edu.br 326
Figura 57 – Modelo RTF.
Fonte: Elaborada pelo autor (2014).
www.esab.edu.br 327
17 $rtf = str_replace('<<produto'.$i. '>>', '',
$rtf);
18 $rtf = str_replace('<<valor'.$i. '>>', '',
$rtf);
19 $rtf = str_replace('<<quantidade'.$i. '>>',
'', $rtf);
20 $rtf = str_replace('<<total'.$i. '>>', '',
$rtf);
21 }
22 header('Content-type: application/rtf');
23 header('Content-Disposition: attachment;
filename=Relatorio.rtf');
24 echo $rtf;
25 ?>
www.esab.edu.br 328
Para utilizar a biblioteca, caso não tenha feito o download quando
acompanhou a unidade 42, faça o download da última versão (<http://
www.fpdf.org/>, na seção de downloads). Descompacte os arquivos
(caso não o tenha feito) em uma pasta, sendo necessário copiar, para a
pasta onde está seu script, o arquivo fpdf.php e a pasta fonts, que a classe
utiliza para seu funcionamento.
www.esab.edu.br 329
28 $pdf->Cell(50, 6, $produto[1],0);
29 $pdf->Cell(40, 6, $produto[3],0);
30 $pdf->Cell(50, 6, $produto[5], 0);
31 $pdf->Cell(40, 6, $produto[6], 0);
32 $pdf->Ln(10);
33 $contador=+1;
34 }
35 }
36 $pdf->Ln(30);
37 $pdf->Cell(90, 6, 'Relatório finalizado');
38 $pdf->Output('Pedido.pdf', 'D');
39 ?>
www.esab.edu.br 330
Na linha 25 é inserida a imagem do produto e, para posicioná-la junto
ao relatório, é realizado um cálculo, somando o ponto de início e 30
pontos a cada produto (tamanho da linha inserida ao final), de forma
que a imagem correspondente fique ao lado do texto do produto. Assim,
é definido o relatório, considerando tanto quantos forem os produtos
que façam parte da cesta. Na linha 37 é inserida a mensagem “Relatório
Finalizado” e o arquivo é disponibilizado com a instrução echo, na linha
38. Salve o script como imprimePedido.php. O resultado pode ser visto
com a Figura 58.
www.esab.edu.br 331
Desenvolvendo aplicações
47 completas com PHP – parte 5
Objetivo
Desenvolver uma aplicação empregando os conhecimentos
aprendidos nesta unidade, desenvolvendo códigos limpos com uso de
sessões e, também, um carrinho de compras.
www.esab.edu.br 332
4 foreach ($cestaProdutos as $produto){
5 if ($produto[5]<>0){
6 fwrite($arquivo, $produto[0].”;”
.$produto[1].”;” .$produto[2].”;”
.$produto[3].”;” .$produto[4].”;”
.$produto[5].”;” .$produto[6].”;\n”);
7 }
8 }
9 fclose($arquivo);
10 }
11 require("header.inc");
12 session_start();
13 $cesta=$_SESSION["cesta"];
14 $nomeArquivo = $nomeArquivo = 'c:\\apache\\
htdocs\\ Pedido.txt';
15 salvaPedido($cesta, $nomeArquivo);
16 $html = '<h2>Pedido de Compra</h2><br>';
17 $html = $html. '<h3>Detalhamento da
compra:</h3>';
18 $html = $html. '<table class="produtos">';
19 $html = $html. '<tr> <td> </
td><td>Produto:</td><td>Valor: </
td><td>Quantidade: </td><td>Total: </td></
tr>';
20 foreach ($cesta as $produto){
21 if ($produto[5]<>0){
22 $html = $html. '<tr><td><img src="'.
$produto[4]. '" width="40" length="40"
/></td>><td>'.$produto[1].'</
td> <td>'.$produto[3].'</
td><td>'.$produto[5].'</
td><td>'.$produto[6].'</td> </tr>';
23 }
24 }
25 $html = $html. '</table>';
26 echo $html;
27 echo '<br>';
28 echo '<a href="imprimePedido.php"
class="botao">Imprimir Pedido <a><br>';
29 echo '<a href="enviaEmail.php"
class="botao">Enviar E-mail <a>';
30 echo '<a href="cancelarPedido.php"
class="botao">Cancelar Pedido <a>';
31 require('footer.inc')
32 ?>
www.esab.edu.br 333
O Código 146 apresenta, em suas linhas iniciais, função para salvar o
pedido em arquivo texto, definida entre as linhas 2 e 10. A função recebe
como parâmetro a cesta e o nome do arquivo, percorrendo o vetor de cesta
e salvando no arquivo, onde cada linha equivale a um produto comprado.
Para a definição da cesta, é recuperada, na linha 13, a variável de sessão
$cesta, que contém os dados dos produtos do pedido confirmado.
www.esab.edu.br 334
47.2 Desenvolvendo o cancelamento de pedido
Considerando que o pedido de compra é salvo em arquivo texto, após
a sua confirmação, e fica armazenado em variável de sessão, podemos
cancelar as operações apagando o arquivo que contém os dados e destruir
a variável de sessão que armazena esses dados. Para isso, o uso das funções
unlink() e unset() são apresentadas por Thomson e Welling (2005) e
Meloni (2000). Dessa forma, um script simples pode ser definido, como
consta no Código 147.
Tarefa dissertativa
Caro estudante, convidamos você a acessar o
Ambiente Virtual de Aprendizagem e realizar a
tarefa dissertativa.
www.esab.edu.br 335
Desenvolvendo aplicações
48 completas com PHP – parte 6
Objetivo
Desenvolver uma aplicação empregando os conhecimentos
aprendidos nesta unidade, desenvolvendo códigos limpos com uso de
sessões e, também, um carrinho de compras.
www.esab.edu.br 336
Código 148 – Script envio de e-mail
1 <?php
2 session_start();
3 require_once('PHPMailer/class.phpmailer.php');
4 $cesta=$_SESSION["cesta"];
5 $destinatario = 'emaildocliente@xxx.com;
6 $assunto = 'Pedido de Compra';
7 $html = '<h1>Pedido de Compra</h1><br>';
8 $html = $html. '<h2>Detalhamento da
compra:</h2><br>';
9 $html = $html. '<br><table>';
10 $html = $html. '<td>Produto:</td><td>Valor:
</td><td>Quantidade: </td><td>Total: </td>';
11 foreach ($cesta as $produto){
12 if ($produto[5]<>0){
13 $html = $html. '<tr><td>'.$produto[1].'</
td> <td>'.$produto[3].'</
td><td>'.$produto[5].'</
td><td>'.$produto[6].'</td> </tr>';
14 }
15 }
16 $html = $html. '</table>';
17 $Email = new PHPMailer();
18 $Email->SetLanguage("br");
19 $Email->IsSMTP();
20 $Email->SMTPAuth = true;
21 $Email->Host = 'mail.servidorDeEnvio.com.br;
22 $Email->Username = 'usuarioDoEmail';
23 $Email->Password = SenhaDoEmail';
24 $Email->Port = '587';
25 $Email->IsHTML(true);
26 $Email->From = utf8_decode (strip_
tags(trim(emailDeEnvio)));
27 $Email->FromName = utf8_
decode('nomeDeEnvio’);
28 $Email->AddAddress($destinatario); // para
quem será enviada a mensagem
29 $Email->Subject = $assunto;
30 $Email->Body .= $html;
31 if(!$Email->Send()){
32 echo "<p>A mensagem não foi enviada. </p>";
33 echo "Erro: " . $Email->ErrorInfo;
34 }else{
35 header("Location: index.php", TRUE);
36 }
37 ?>
www.esab.edu.br 337
Na linha 3 do Código 148, observamos que, para possibilitar o envio
do e-mail, é requerido arquivo da biblioteca. Na linha 5, é definido o
e-mail do destinatário, ou seja, para qual endereço o e-mail será enviado,
atribuindo à variável $destinatario. Você também poderia obter o
endereço para o envio no cadastro ou definir uma entrada de dado. A
linha 6 atribui à variável $assunto o valor “Pedido de compra”. O trecho
entre as linhas 7 e 16 define o conteúdo do corpo do e-mail, em formato
HTML, de maneira similar ao definido na tela de acompanhamento
do pedido. Para utilizar a biblioteca, é criada uma instância da classe
PHPMailer e atribuído à variável $Email, na linha 17. São necessárias
configurações de envio, realizadas através de métodos definidos na classe
PHPMailer, acessíveis, portanto, ao objeto criado. Dessa forma, são
configuradas a linguagem (linha 18), a definição que trata de um servidor
SMTP (linha 19) e a definição que trata da autenticação SMTP (linha
20). Ainda são configurados os dados do servidor de envio: na linha
21 você deve definir o servidor de e-mail que será utilizado para fazer
o envio, ou seja, deve trocar a informação do parâmetro; na linha 22,
você deve configurar o usuário de e-mail que será utilizado para enviar;
e, na linha 23, você precisa trocar a informação, inserindo a senha do
usuário, definido na linha 22. Na linha 24 é definida a porta de envio: as
portas mais comuns utilizadas por servidores SMTP são 25 e 587. Como
o corpo do e-mail utilizado é em formato HTML, deve-se configurar
através de método IsHTML com valor verdadeiro. As linhas 26 a 30
definem dados do envio e, na linha 31, é realizado o envio, retornando
valor verdadeiro em caso de sucesso. Em caso de insucesso (valor falso
para o retorno), as linhas 32 e 33 serão executadas, apresentando
mensagem de erro; em caso de sucesso, a página será redirecionada para a
tela principal.
www.esab.edu.br 338
Para sua reflexão
A partir dos conhecimentos adquiridos na
disciplina sobre PHP, como você vê, agora, essa
linguagem? Qual é o seu ponto de vista com
relação ao seu uso?
A resposta a essa reflexão forma parte de sua
aprendizagem e é individual, não precisando ser
comunicada ou enviada aos tutores.
www.esab.edu.br 339
Para acessar a aplicação através de um endereço (por exemplo, <www.
esab.edu.br>), é necessário ter posse de um domínio válido. O domínio
é o nome que compõe o endereço, direcionando o usuário ao endereço
físico no qual a aplicação está hospedada. Para adquirir um domínio
terminado com .br (domínio brasileiro), o registro é realizado pelo
site <registro.br>. Após a confirmação da compra do domínio, deve-
se configurar o servidor de domínio, disponibilizado pela empresa que
hospedará a aplicação.
Atividade
Chegou a hora de você testar seus conhecimentos
em relação às unidades 37 a 48. Para isso, dirija-se ao
Ambiente Virtual de Aprendizagem (AVA) e responda
às questões. Além de revisar o conteúdo, você estará
se preparando para a prova. Bom trabalho!
www.esab.edu.br 340
Resumo
www.esab.edu.br 341
Glossário
Administração do sistema
O termo administração do sistema refere-se à gestão e à configuração
do sistema, em área específica ou com privilégio especial, de modo a
possibilitar a sua utilização com base nos parâmetros configurados. R
Backtrace
Mostra a função que estava sendo executada quando foi gerado o erro. R
Biblioteca de códigos
É uma coleção de subprogramas e rotinas utilizados no desenvolvimento
de software. Contém código e dados auxiliares, de forma a serem
reutilizados em programas independentes, possibilitando o
compartilhamento e a alteração de código e de dados. R
Bug
Erro ou defeito na lógica de um programa de computador que o impede
de funcionar corretamente. R
Código sustentável
O termo refere-se à característica da aplicação de ser facilmente mantida
(efetuar manutenções preventivas e correções, por longo período de
tempo, de forma a possibilitar a sua utilização pelo usuário). R
Combobox
Também chamada de caixa de combinação, é um elemento da interface
gráfica de um programa ou página que combina uma caixa de texto com
uma listagem de opções para preenchimento da caixa. R
www.esab.edu.br 342
Concatenar
É a “soma” de textos, ou seja, a união do conteúdo de duas strings.
Concatenando o texto “php” e “teste”, teríamos uma string com o
conteúdo “phpteste”. R
Criptograficamente
Codificação de dados para impedir a sua compreensão por quem não
conhece o código. R
CSS
Cascading Style Sheets que, em tradução livre, significa “Folha de Estilos
em Cascata”. Permite a determinação dos estilos a serem utilizados e
define o layout de documentos HTML. R
Depuração
Processo de encontrar erros de uma aplicação de modo a melhorar a sua
qualidade, garantindo o bom funcionamento. R
Distribuição
Tradução do termo “deployment”, utilizado de forma frequente dentro
do processo de desenvolvimento (ciclo de vida) do software para designar
o processo de disponibilização ao usuário, para que este possa fazer
uso do software. Para aplicações web, está relacionado à instalação do
documento no servidor, possibilitando a sua utilização. R
Dízima periódica
Um número que, quando escrito no sistema decimal, apresenta uma
série infinita de algarismos decimais que, a partir de certo algarismo, se
repetem em grupos de um ou mais algarismos. R
www.esab.edu.br 343
E-commerce
Comércio eletrônico ou e-commerce é um conceito aplicável a qualquer
tipo de negócio que implique a transferência de informação através de
dispositivos eletrônicos, sobretudo utilizando a internet. Compreende
sítios destinados à negociação entre consumidores, sítios de leilões ou
comércio de bens e serviços entre organizações. R
Estender
Cria uma extensão que, no contexto de orientação a objeto, significa criar
uma subclasse (herança), herdando os métodos e atributos da superclasse,
e podendo adicionar novos métodos e atributos, especializando-a
(definindo de forma mais detalhada). R
Formatação de texto
Preparação do texto através de organização visual, realce e estrutura,
alterando posicionamento, fonte, tamanho etc. R
Formatar
Definir um formato. No contexto de manipulação de variáveis string,
significa especificar a forma através da qual se apresentará a informação,
ou seja, a disposição gráfica. R
Funções
Forma de executar um determinado grupo de códigos com o objetivo de
reaproveitar códigos, melhorando a performance de desenvolvimento. R
GUI
Graphical User Interface que, em tradução livre, significa Interface
Gráfica do Usuário. Permite a utilização de dispositivos digitais e a sua
interação através de elementos gráficos, como ícones. R
www.esab.edu.br 344
Hexadecimal
Sistema de numeração de base 16, no qual cada símbolo pode guardar
valores que podem ser (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F). R
Hiperlink
Uma hiperligação é uma referência de um documento que liga a outro
documento, texto ou imagem. R
Horário de Greenwich
O Greenwich Mean Time, ou horário médio de Greenwich, é conhecido
como o marcador oficial de tempo. Os fusos horários recebem
decréscimo de horas quando percorridos a oeste, e a leste recebem o
incremento. Dizer que o fuso horário é GMT-03:00 significa dizer que a
hora atual equivale a duas horas a menos do horário de Greenwich. R
HTML
Abreviação de HyperText Markup Language, que significa “Linguagem
de Marcação de Hipertexto”. R
IMAP
Internet Message Access Protocol, traduzido como “Protocolo de Acesso
à Mensagem da Internet”. Trata-se de um protocolo de gerenciamento de
correio eletrônico, que permite o envio e o recebimento de e-mails. R
Javascript
Trata-se de uma linguagem de programação interpretada e implementada
como parte dos navegadores web para que as páginas que contenham
scripts pudessem ser executadas do lado do cliente, interagindo com
o usuário sem a necessidade de processamento realizado pelo servidor.
Desse modo, ela controla o navegador, alterando o conteúdo do
documento exibido. R
www.esab.edu.br 345
Layout
É uma palavra inglesa, em português «leiaute». Significa plano, arranjo,
esquema, design, projeto. No contexto de uma página web, significa a
forma como ela está arranjada ou que seus componentes estão alocados
na tela. R
Logado
Palavra criada a partir do uso de sistemas que exigem autenticação
(login). Significa que o usuário foi autenticado (confirmado por algum
método que garanta sua identidade) e está conectado. R
Loop
A tradução de loop, no contexto de programação de computadores, é
“repetição”. R
Manutenção
É o processo de melhoria e otimização de um software já em
funcionamento (produção) e também de correção de erros e defeitos. As
melhorias podem estar relacionadas a solicitações de clientes e a restrições e
regulações oriundas do governo (mudança de legislação, por exemplo). R
Manutenibilidade
Capacidade do software (ou da aplicação) de ser mantido/receber
manutenção, ou seja, alterações preventivas, corretivas e evolutivas para
manter o funcionamento da aplicação. R
Metassignificado
Significa “além do significado”, ou seja, são significados que dão
significados a outras coisas. No contexto do uso de expressões regulares,
significa que o significado do padrão de texto dado auxilia na definição
do significado das palavras que seguem esse padrão. R
www.esab.edu.br 346
Octal
É um sistema de numeração cuja base é 8, ou seja, utiliza 8 símbolos
para a representação de quantidade. Para converter um número decimal
em octal, pode-se efetuar divisões sucessivas por 8. Por exemplo: ao
converter 67 (decimal) para octal, teremos 62/8 = 7 resto 6, ou seja 76.
Na linguagem PHP, a representação do octal inicia com 0. Nesse caso, o
número decimal 62 é igual ao número decimal 062. R
Open-source
Código aberto. Possibilita o acesso a códigos que foram utilizados para
sua construção, permitindo alterações e melhorias, bem como uso livre,
dependendo da sua licença. R
Otimização
Relacionada à melhoria do desempenho da aplicação. Otimizar uma
aplicação significa, portanto, melhorar o seu desempenho. R
Parâmetro
São variáveis que definem o comportamento da função, ou seja, são
dadas na sua entrada e a sua execução depende desses valores. R
PDFlib
É uma biblioteca utilizada para criar documentos PDF a partir do
conteúdo do banco de dados. Esse recurso disponibiliza todas as funções
necessárias para gerar documentos PDF com texto, gráficos, imagens e
elementos interativos. R
Perl
Perl é uma linguagem de programação utilizada em aplicações, sendo
destacado o seu uso no desenvolvimento web. R
www.esab.edu.br 347
Planejamento
Está relacionado às definições de como se deve executar o
desenvolvimento do software, principalmente no que diz respeito
às atividades tipicamente problemáticas, como análise econômica,
organização do projeto (incluindo equipes e responsabilidades),
estruturação das tarefas, cronograma do projeto, análise e gestão de risco
e estimativa de custos. R
Pre-releases
Antes do lançamento; são versões de teste. R
Redundância
No contexto apresentado, esse termo está relacionado à duplicidade
de ambientes, dispositivos ou estruturas, de modo a garantir o seu
funcionamento, para que, em caso de falha da primeira estrutura, a
segunda desempenhe o papel de forma transparente para o usuário. R
Requisitos funcionais
Definem as funções e os objetivos de um sistema ou de parte dele,
determinando as suas entradas (quais informações são entradas) e as
saídas esperadas, bem como o seu comportamento. Definem cálculos,
manipulação de dados e como deve ser efetuado o processamento que
determina o que um sistema, idealmente, será capaz de realizar. R
www.esab.edu.br 348
Requisitos não funcionais
Definem a qualidade do software em relação a desempenho, usabilidade,
confiabilidade, segurança, disponibilidade, manutenibilidade e
tecnologias envolvidas, ou seja, as características do software ou como os
requisitos funcionais devem ser construídos para atender aos padrões de
qualidade definidos. R
Sequência de Fibonacci
É uma sequência de números naturais (inteiros e com sinal positivo)
na qual os primeiros dois termos são 1 e 1 e cada termo subsequente
corresponde à soma dos dois precedentes. R
Similaridade
No conceito de orientação a objetos, a similaridade representa a
semelhança quando duas ou mais classes irão compartilhar os mesmos
atributos e/ou métodos. R
Sintaxe
É o conjunto de regras que definem as sequências corretas dos elementos
e comandos. R
SNMP
Simple Network Management Protocol, traduzido como “Protocolo
Simples de Gerência de Rede”, é um protocolo da camada de aplicação
da gerência típica de redes, a fim de facilitar o intercâmbio de informação
entre os dispositivos. R
Source Forge
Repositório de códigos-fonte fundamentado na web e utilizado por
desenvolvedores para controlar e manter projetos de softwares de código
aberto (open source) de modo colaborativo. R
www.esab.edu.br 349
SQL
Structured Query Language, traduzido como “Linguagem de Consulta
Estruturada”. É a linguagem de pesquisa e de consulta padrão para banco
de dados relacionais. R
Sun
Sun Microsystems é uma subsidiária da Oracle Corporation, fabricante
de computadores e semicondutores. É responsável por uma gama de
produtos open-source. R
UML
Sigla de Unified Modeling Language, ou Linguagem de Modelagem
Unificada. É uma linguagem de modelagem que permite que os
desenvolvedores utilizem seus diagramas padronizados, que usam
denotação gráfica e definem significados, semântica. R
Vulnerabilidade
Brecha de segurança, ou seja, ponto vulnerável que possibilita acesso
indevido ou não autorizado. R
W3C
World Wide Web Consortium, consórcio internacional com cerca de
400 membros, agregando empresas, órgãos governamentais, comunidade
acadêmica e organizações independentes. R
Workspace
Espaço de trabalho do Eclipse, onde são salvos os arquivos referentes ao
código e à configuração de projetos. R
Zend Engine
Interpretador reescrito do PHP. Introduzido na versão 4, foi melhorado
para o PHP 5. R
www.esab.edu.br 350
Referências
www.esab.edu.br 351