Você está na página 1de 304

Sumário

Capa

Folha de rosto

Copyright
Agradecimentos

Sobre a autora

Apresentação

Quem deve ler este livro

Como este livro está organizado

Capítulo Um. Primeiros passos com PHP

1.1 Variáveis

1.2 Operadores

1.3 Estruturas de Controle

1.4 Obtendo Informações do Usuário

1.5 Arrays

1.6 Funções do Usuário e Escopo

1.7 Cookies e Sessions

1.8 Arquivos

1.9 Banco de Dados MySQL

Gabarito do Capítulo 1

Capítulo Dois. Orientação a Objetos

2.1 Classes e objetos

2.2 Associação, agregação e composição

2.3 Herança

2.4 Interface e realização

2.5 Classes e métodos finais

2.6 Atributos e métodos estáticos

2.7 Cookies e sessions

2.8 Dependência

2.9 Arquivos

2.10 Banco de dados MySQL


2.11 MVC

Gabarito do Capítulo 2

Capítulo Três. Tópicos Avançados

3.1 Paginação e tabulação

3.2 Bibliotecas

3.3 Sistema de busca

Gabarito do Capítulo 3

Sobre a autora
Graduada em Ciência da Computação pela Universidade do Vale do Itajaí (2005), mestra em Ciência
da Computação pela Universidade Federal de Santa Catarina (2007), doutora em Informática na
Educação pela Universidade Federal do Rio Grande do Sul (2011) e realiza pós-doutorado na
Universidade de Athabasca, Canadá. Atua como docente superior desde 2007 (disciplinas:
Programação OO, Programação Web, Desenvolvimento Web, Engenharia de Software, entre outras).
Atualmente, leciona no Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Sul.
Possui experiência na área de Programação Web e Informática da Educação, e trabalha com
desenvolvimento de sistemas em PHP desde 2001.

Apresentação
Este livro apresenta 200 questões resolvidas utilizando a linguagem de programação PHP. Você
encontrará desde problemas simples, envolvendo operadores e estruturas de controles, até inclusive
alguns desafios utilizando bibliotecas reconhecidas pela comunidade PHP.

Quem deve ler este livro


O livro se destina a alunos e professores de cursos técnicos e de graduação, podendo ser utilizado como suporte
às aulas. Ele visa suprir uma lacuna existente nas bibliografias atuais carentes de exercícios práticos (e
resolvidos), que se aproximem da realidade.

Como este livro está organizado


Os exercícios foram organizados por nível de dificuldade e considerando-se a ordem em que os conceitos são
aprendidos, tanto em cursos quanto pelos autodidatas. No Capítulo 1, você encontrará exercícios envolvendo o
uso do PHP em programação estruturada. Essa parte é recomendada àqueles que cursam disciplinas como
“Programação 1”, ou seja, iniciantes na linguagem. Entretanto, note que ao final do capítulo você já encontrará
alguns exemplos de persistência de informações, com uso de arquivos textos e banco de dados.
O Capítulo 2 requer o conhecimento de orientação a objetos. É importante que você possua uma base de
classes e relacionamentos para se aventurar nesses exercícios. Aqui você encontrará uma revisão dos conceitos
trabalhados no capítulo anterior, porém com a abordagem de classes e objetos. Por fim, é apresentada uma
proposta de programação genérica usando MVC.
Já o Capítulo 3 destina-se aos programadores avançados, que necessitam expandir o conhecimento,
aplicando bibliotecas reconhecidas para desenvolver gráficos, arquivos PDF, envio de e-mail, etc. Também é
incentivado o uso de técnicas comumente aplicadas em sites, como a paginação/tabulação e sistemas de buscas
simplificados.
Dentro de cada capítulo, encontram-se os subcapítulos que indicam o conceito que será trabalhado nas
questões. Estas foram numeradas sequencialmente e denominadas com títulos, facilitando sua identificação no
gabarito localizado ao final de cada capítulo.
Lembre-se: Na programação, não existe uma resposta única! Os resultados podem variar conforme as
configurações do arquivo php.ini, do servidor, do sistema operacional, etc.
Boa leitura!
CAPÍTULO UM

Primeiros passos com PHP


O PHP é uma linguagem que permite o desenvolvimento de sistemas web. Por meio dele, é possível
conferir maior dinamicidade ao site, possibilitando o armazenamento de informações em bancos de
dados, personalizar o conteúdo e, até mesmo, enviar e-mails e manipular arquivos. O leiaute, isto é, a
apresentação de uma página web, fica por conta das linguagens de marcação HTML e folhas de
estilo CSS. Já a validação de formulários e pequenos códigos geralmente é implementada pela
linguagem JavaScript. Logo, antes de iniciar seus estudos em PHP, sugiro que possua um
conhecimento mínimo de HTML, a fim de compreender os exemplos do livro. Se você já conhece,
vamos em frente!
Esta obra apresenta os conceitos de PHP, enfatizando a prática. Então, antes de começar, é
importante que você tenha um servidor instalado, permitindo executar os códigos. Existem alguns
kits que já oferecem o servidor apache + linguagem PHP + banco de dados MySQL (tecnologias que
utilizaremos no livro). Recomendo a instalação de uma das opções abaixo:
• XAMPP: http://www.apachefriends.org/pt_br/xampp.html (para Windows e Linux)
• WAMP: http://www.wampserver.com/en/ (para Windows 32 e 62 bits)
• LAMP: http://lamphowto.com/ (para Linux)
Observação: Cada instalação tem suas particularidades, podendo apresentar diferenças na
execução de um mesmo código. Para configurações adicionais, é possível alterar o arquivo php.ini, e,
então, reiniciar o servidor.
Atenção: Alguns servidores web utilizam a mesma porta que o Skype. Se o servidor não iniciar, tente
se desconectar do Skype, inicie o servidor e retorne ao Skype.
Cada servidor apresenta sua pasta própria onde os arquivos deverão ser armazenados; no
Xampp, é a “htdocs” e, no Wamp, a “www”. É possível acessar os arquivos lá armazenados em seu
navegador pelo endereço http://localhost/. Para informações adicionais, consulte o site do livro.
Os arquivos PHP são arquivos texto, logo, para criá-los e editá-los, podemos utilizar editores
como o bloco de notas ou outros mais sofisticados como: Notepad + + (http://notepad-plus-plus.org)
ou Sublime (http://www.sublimetext.com). Lembre-se de que é essencial salvá-los com a
extensão .php, caso contrário, o código PHP não será identificado e interpretado pelo servidor.
Dentro dos arquivos, é possível colocar tags HTML e códigos PHP, entretanto, eles devem ser
identificados quanto ao seu início e fim. Na Figura 1, veremos um exemplo de como exibir uma
mensagem por meio do PHP. Note que no corpo da página estão as tags delimitadoras <?php ? > , as
quais indicam que o código dentro deve ser processado pelo servidor para, então, ser exibido pelo
navegador.
FIGURA 1 Primeira página em PHP

É possível que você encontre em alguns livros e sites outras tags válidas. Para elas funcionarem, é
necessário que a configuração do PHP habilite o funcionamento.
Agora que você já sabe como criar e executar páginas PHP, vamos conhecer um pouco mais da
linguagem!

1.1 Variáveis
As variáveis são locais onde podemos armazenar informações textuais, numéricas, etc. Diferentemente das
demais linguagens de programação, o PHP não exige a declaração delas, nem a determinação de seu tipo de
dado. Ao utilizar uma variável pela primeira vez, ela já está automaticamente criada. Além disso, a variável
pode conter um número e, na linha seguinte, receber uma palavra. Entretanto, existem algumas regras para a
criação das variáveis:
• Toda variável inicia com o símbolo $.
• O nome da variável deve iniciar com letras ou o símbolo _, podendo ser seguido de letras, números e _
.
• Elas não podem conter caracteres especiais, como: &, +, -, <, etc.
• Ainda existem variáveis cujos nomes são reservados para o próprio PHP, como: $_GET, $_POST,
$_FILES, $_SESSION, $_COOKIE, $_REQUEST, $_SERVER, etc. Vamos conhecê-las ao longo do
livro.
Exercício 1. Variáveis válidas
Assinale com X as alternativas que representam nomes de variáveis válidas para o PHP:

() $_nome () Ssid

() $1numero () $abc

() $_GET () $variável

() $calça () $z99

() $valor () $soma
() $abcdefghijklmnopqrstuvwxyz () $_files

() $guarda-chuva () $profissão

Para atribuir um valor a uma variável PHP, basta utilizar o símbolo =, em que $variavel = “valor”. Para
exibir essa informação na tela, utilizamos a função echo.
Exercício 2. Processando o código: variáveis
Ao executar os códigos PHP a seguir, escreva como ficará o resultado na tela do navegador.
1.2 Operadores
Para realizar cálculos aritméticos, podemos utilizar os operadores de soma (+), substração (-),
multiplicação (*), divisão (/) e resto (%). Já os operadores relacionais permitem verificar se um valor é
maior que o outro, enquanto os operadores lógicos indicam se uma expressão é verdadeira ou falsa.
É possível ainda combiná-los com funções matemáticas de data e hora. Para conhecê-las, acesse o
site http://www.php.net.
Exercício 3. Processando o código: operadores aritméticos
Ao executar os códigos PHP a seguir, escreva como ficará o resultado na tela do navegador.
Exercício 4. Processando o código: operadores lógicos e relacionais
Ao executar os códigos PHP a seguir, escreva como ficará o resultado na tela do navegador.
Exercício 5. Processando o código: funções de data e string
Ao executar os códigos PHP a seguir, escreva como ficará o resultado na tela do navegador.
Exercício 6. Operações aritméticas
Dadas três variáveis com os seguintes valores ($n1 = 2, $n2 = 5, $n3 = 8), faça um programa em PHP que:
a) determine a soma dos três números, e b) determine a raiz quadrada do produto dos três números.
Exercício 7. Diferença de datas
Usando a função mktime, faça uma página PHP que calcule a diferença de dias entre as seguintes datas:
28/02/2016 e 04/03/2016.
Exercício 8. Troca de strings
Faça uma página PHP que armazene numa variável a mensagem: “Comentários do Facebook não estão
disponíveis no Google”. Substitua a palavra Facebook por Google e Google por Facebook, gerando a frase:
“Comentários do Google não estão disponíveis no Facebook”. Mostre na tela a frase modificada.
Exercício 9. Inversão de strings
Faça uma página PHP que armazene numa variável a mensagem: “Palavra”, e inverta essa mensagem,
mostrando como resultado na tela: “arvalaP”.

1.3 Estruturas de Controle


1.3.1 Desvio Condicional
O desvio condicional permite que um determinado trecho de código seja executado se uma determinada
condição for verdadeira ou falsa. No PHP, podemos utilizar o if (condição) { } elseif (condição 2) { } ... else
{ }, ou o switch ($variavel) { case 1: ; case 2; ... default: ; }

Exercício 10. Processando o código: desvio condicional


Ao executar os códigos PHP a seguir, escreva como ficará o resultado na tela do navegador.
Exercício 11. Maior idade
Sabendo que Amália tem 17 anos e Joaquim, 18, faça um programa PHP que verifique a idade dos dois
amigos e exiba o nome do mais velho na tela.
Exercício 12. Saudação conforme o horário
Faça um programa PHP que verifique a hora atual e, se for de manhã (antes das 12h), exiba a mensagem
“Bom dia!” na cor verde; se for à tarde (até as 18h), exiba a mensagem “Boa tarde!” na cor vermelha; e, se for
à noite, exiba a mensagem “Boa noite!” na cor azul.
Exercício 13. Sorteio de número e par/ímpar
Faça uma página PHP que sorteie um número aleatório entre 1 e 10 e verifique se ele é par ou ímpar.
Exercício 14. Sorteio de número e múltiplo de 3
Faça uma página PHP que sorteie um número aleatório entre 1 e 20 e verifique se ele é múltiplo de 3.
Exercício 15. Sorteio de número e múltiplo de 3 ou 5
Faça uma página PHP que sorteie um número aleatório entre 1 e 14 e verifique se ele é múltiplo de 3 ou 5.
Exercício 16. Sorteio de número e múltiplos
Faça uma página PHP que sorteie um número aleatório entre 1 e 30 e verifique se ele é múltiplo de 2, 3 ou
7.
Exercício 17. Sorteio de números e menor valor
Faça uma página PHP que sorteie três números aleatórios entre 1 e 10. Verifique e mostre o menor dos três
valores.

1.3.2 Laços de Repetição


Os laços de repetição permitem executar um trecho de código repetidamente até que a condição não seja mais
válida. O PHP oferece os laços for, while e do while, além do foreach (que veremos junto com os arrays).
Exercício 18. Processando o código: laços de repetição
Ao executar os códigos PHP a seguir, escreva como ficará o resultado na tela do navegador.
Exercício 19. Exibir números entre 1 e 20
Faça uma página PHP que exiba os números entre 1 e 20.
Exercício 20. Exibir números entre -10 e 10
Faça uma página PHP que exiba os números entre -10 e 10.
Exercício 21. Exibir números entre -15 e -5
Faça uma página PHP que exiba os números entre -15 e -5.
Exercício 22. Exibir números entre 0 e -30
Faça uma página PHP que exiba os números entre 0 e -30.
Exercício 23. Exibir números ímpares entre 100 e 200
Faça uma página PHP que exiba os números ímpares entre 100 e 200.
Exercício 24. Exibir números pares entre 349 e 401
Faça uma página PHP que exiba os números pares entre 349 e 401.
Exercício 25. Exibir uma sequência de números
Faça uma página PHP que gere e exiba a sequência de números: 1, -2, 3, -4, 5, -6, 7, -8.
Exercício 26. Sorteio de número e primo
Faça uma página PHP que sorteie um número aleatório entre 1 e 30 e verifique se ele é primo.
Exercício 27. Sorteio de número e exibição de sequência
Faça uma página PHP que sorteie um número aleatório entre 1 e 15. Exiba os números entre o
número sorteado até o seu valor dobrado.
Exercício 28. Sorteio de número e exibição de sequência (2)
Faça uma página PHP que sorteie um número aleatório entre 1 e 15. Exiba os números entre o
número sorteado até o seu valor triplicado ou até encontrar um valor divisível por 7.
Exercício 29. Sorteio de dois números e exibição de sequência entre eles
Faça uma página PHP que sorteie um número aleatório entre 1 e 10. Sorteie outro número entre 10 e 20.
Mostre todos os valores entre o primeiro e o segundo número.
Exercício 30. Sorteio de dois números e exibição da soma da sequência entre eles
Faça uma página PHP que sorteie um número aleatório entre 1 e 10. Sorteie outro número entre 10 e 20.
Mostre o resultado da soma dos elementos que compõem a faixa entre o primeiro e segundo número.
Exercício 31. Média aritmética de uma sequência
Faça uma página PHP que calcule e mostre a média aritmética dos números pares compreendidos entre 13 e
73.
Exercício 32. Plim
A sequência do Plim é dada por “1, 2, 3, plim, 5, 6, 7, plim, 9, 10, 11, ...”. Faça um programa PHP que
mostre a sequência do Plim entre 923 e 3429.
Exercício 33. Ping Pong
A sequência do Ping Pong é dada por “1, ping, 3, pong, 5, ping, 7, pong, 9, ping, 11, pong, ...”. Faça um
programa PHP que mostre a sequência do Ping Pong entre 64 e 546.
Exercício 34. Exibição do alfabeto
Faça uma página PHP que exiba as letras do alfabeto de A a Z.
Exercício 35. Exibição do alfabeto com distinção de vogais e consoantes
Faça uma página PHP que exiba as letras do alfabeto de A a Z, e, ao encontrar uma vogal, exiba-a na cor
vermelha e, quando for uma consoantes, mostre-a na cor verde.
Exercício 36. Exibição de texto com quebra de linha
Faça uma página PHP que contém a variável $msg com o texto “Eu gosto de aprender a programar na
linguagem PHP”. A página deverá exibir 10 caracteres por linha. Exemplo:

Exercício 37. Geração da tabuada


Construa uma página PHP que, usando tabela em HTML, exiba a tabuada de 0 a 10 conforme modelo a
seguir. Você deve usar laço de repetição.
Exercício 38. Procurando erros: laços de repetição
Um programador iniciante em PHP deseja construir a página a seguir. Entretanto, ele cometeu alguns erros
no código. Indique onde estão os erros e como corrigi-los para que a página seja exibida corretamente. Você
não pode desenvolver um novo código, apenas corrigir o existente.

Linha ____ : Código correto: _______________________________________________


Linha ____ : Código correto: _______________________________________________

1.4 Obtendo Informações do Usuário


A fim de oferecer maior interatividade com o usuário, é possível obter informações fornecidas mediante
formulários e, então, processá-las via PHP. Para isso, é necessário desenvolver formulários usando HTML,
cujo envio deve ser realizado para uma página PHP, ou captar informações que vêm junto com o endereço da
página (URL).

1.4.1 Via Formulário (POST)


Os formulários podem ser enviados pelos métodos GET e POST, entretanto, é melhor enviar sempre por POST,
caso contrário, as informações ficarão visíveis no endereço da página e no histórico de navegação. Cada campo
contido no formulário deve ter um nome, por meio do qual podemos localizá-lo utilizando a variável
predefinida $_POST[“nome”]. O valor a ser recebido será aquele que o usuário informou (se for campo texto)
ou selecionou (exemplo: no campo radio, será o valor informado no value).
Exercício 39. Exibindo dados de um formulário
Dado o formulário a seguir (considere com qualquer dado preenchido), qual seria a codificação da página
“processa.php” de modo que os dados sejam exibidos conforme ilustra o navegador?

Exercício 40. Quiz aritmético


Dado o formulário a seguir (considere com qualquer dado preenchido), como seria a codificação da página
“verificaacerto.php” de modo que seja exibido o nome da pessoa e a quantidade de acertos?

Exercício 41. Soma dois números


Faça uma página HTML que contenha um formulário com dois campos de entrada (número 1 e 2) que será
submetida à página soma.php. Esta deverá calcular a soma dos dois números.
Exercício 42. Conversão de decimal para binário
Faça uma página HTML que contenha um formulário com um campo de entrada. A página binario.php
deverá realizar o cálculo de conversão do número decimal para binário e mostrar o resultado na tela.
Exercício 43. Concatenação de nome e sobrenome
Faça uma página HTML que contenha um formulário com dois campos de entrada que deverá ser
preenchido com o nome e o sobrenome. A página nomecompleto.php deverá concatenar o nome e o
sobrenome, exibindo o nome completo na tela.
Exercício 44. Maior entre dois valores
Faça uma página HTML que contenha um formulário no qual o usuário informará dois números. Faça uma
página PHP que receberá o formulário e mostrará o maior dos dois valores.
Exercício 45. Menor entre três valores
Faça uma página HTML que contenha um formulário no qual o usuário informará três números. Faça uma
página PHP que receberá o formulário e mostrará o menor dos três valores.
Exercício 46. Triângulo
O triângulo é uma figura geométrica composta por três retas. Ele pode ser classificado conforme sua
proporcionalidade:
• Equilátero: todos os lados são congruentes, isto é, iguais;
• Isóceles: pelo menos dois lados com a mesma medida e dois ângulos congruentes; e,
• Escaleno: as três medidas são diferentes.
Faça uma página HTML que contenha um formulário no qual o usuário informará três números que
representam cada um dos lados de um triângulo e determine sua classificação de proporcionalidade.
Exercício 47. Quadrilátero
O quadrilátero é uma figura geométrica composta por quatro retas; pode ser classificado em:
• Quadrado: todos os lados são congruentes, isto é, iguais;
• Retângulo: dois lados têm a mesma medida (lado1 e lado3), e os outros dois lados perpendiculares também
(lado2 e lado4); e,
• Trapézio: as quatro medidas são diferentes.
Faça uma página HTML que contenha um formulário no qual o usuário informará quatro números. Sabendo
isso, faça uma página PHP que determine sua forma.
Exercício 48. Verificação de senha
Dado um formulário POST de login e senha, o qual é submetido à página verificasenha.php, implemente-a
considerando a seguinte regra: se a senha for igual ao login com a primeira letra em maiúscula, a página deverá
mostrar a mensagem “Usuário válido”, caso contrário, exibirá “Usuário inválido”. Um exemplo de login válido
é: se o login for “ricardo”, a senha deverá ser “Ricardo”.
Exercício 49. Exibindo opções de porcentagem no campo select de um formulário
Construa uma página PHP que monte as opções de uma seleção de um formulário html, as quais vão desde
0% a 100%.
Exercício 50. Exibindo opções de anos no campo select de um formulário
Construa uma página PHP que monte as opções de uma seleção de um formulário html que apresente os
anos, iniciando do ano anterior ao momento do acesso da página até os três anos seguintes. Exemplo: se
estamos no ano de 2014, deve exibir: 2013, 2014, 2015, 2016, 2017.

1.4.2 Via URL (GET)


Outra forma de se obterem informações externas à página PHP é por meio de URL. Para isso, cada vez que um
endereço web for chamado, é possível descrever variáveis e valores, no seguinte formato:
http://localhost/pagina.php?variavel1 = valor1&variavel2 = valor2. Note que podem ser enviados números e
caracteres, sem a necessidade de usar aspas. O símbolo & é utilizado para separar cada variável e valor. A
página PHP obtém as informações enviadas pela variável reservada $_GET, cuja posição é o nome da variável.
Exemplo: $_GET[“variavel1”] (que conterá “valor1” dentro).
Exercício 51. Processando o código: GET e estruturas de controle
Observe o código a seguir da página “nome.php”. Para cada URL seguinte, informe qual será a saída de tela.

Exercício 52. Processando o código: GET e estruturas de controle (2)


Observe o código a seguir da página “magica.php”. Para cada URL a seguir, informe qual será a saída de
tela.
Exercício 53. Processando o código: GET e estruturas de controle (3)
Observe o código a seguir da página “letra.php”. Para cada URL a seguir, informe qual será a saída de tela.
Exercício 54. Cálculo de custo de um carro
O custo de um carro novo ao consumidor é a soma do custo de fábrica com a porcentagem do distribuidor e
dos impostos (aplicados ao custo de fábrica). Supondo que o percentual do distribuidor seja de 28% e os
impostos de 45%, escreva um programa que receba o valor do custo de fábrica de um carro via GET, calcule e
escreva o custo final ao consumidor.
Exercício 55. Cálculo de comissão de vendas
Uma revendedora de carros usados paga a seus funcionários vendedores um salário fixo por mês, mais uma
comissão também fixa para cada carro vendido e mais 5% do valor das vendas por eles efetuadas. Escreva um
programa que receba por GET o número de carros vendidos pelo vendedor, o valor total de suas vendas, o
salário fixo e o valor que ele recebe por carro vendido. Calcule e escreva o salário final do vendedor.
Exercício 56. Cálculo de custo de compra de maçãs
Se compradas em quantidade inferior a uma dúzia, as maçãs custam R$ 1,30 cada, e, caso compradas a
partir de 12, o preço se torna R$ 1,00. Escreva um programa que receba por GET o número de maçãs
compradas, calcule e escreva o custo total da compra.

1.5 Arrays
Os arrays são estruturas que permitem o armazenamento de várias informações em uma variável.
Diferentemente das outras linguagens de programação, o PHP permite que diferentes tipos de dados
sejam armazenados em um único array. Veja o exemplo da Figura 2, no qual criamos um array
$itens, tendo, na primeira posição, o número 5, na segunda, a string “casa” e, na terceira, o valor
booleano true. Ainda, note que há várias formas pelas quais esse mesmo array pode ser criado.
FIGURA 2 Exemplos de criação de arrays
É possível utilizar a função array (exemplos 1) e então informar os valores ou especificar o valor para cada
chave (exemplos 2). Além disso, a partir da versão 5.4, pode-se utilizar os colchetes (exemplos 3). Os arrays
também podem ter suas chaves definidas automaticamente, a partir do 0 sempre é incrementado em 1 inteiro
(exemplos a), ou podemos definir a posição em que cada elemento deve ficar (exemplos b).
Veja que os arrays podem ter novas posições adicionadas ou removidas durante a execução da página.

1.5.1 Unidimensional
Outro diferencial do PHP é que as chaves podem ser representadas por números inteiros ou strings.
A Figura 3 exemplifica o uso da variável pessoa, que tem duas posições definidas pelas strings
“nome” e “idade”, uma posição inteira 2, e a última posição definida automaticamente. Nesse caso,
como a última chave inteira foi o número 2, a próxima posição válida é o número 3. O resultado pode
ser conferido na tela. Por fim, note que usamos a função print_r para exibir os dados do array. O
echo é usado para imprimir variáveis simples, enquanto utilizamos o print_r para arrays e objetos.

FIGURA 3 Exemplo de arrays com chaves inteiras e strings

Como os arrays podem ter chaves e tamanhos definidos durante a execução, a tarefa de percorrê-
los não é tão fácil utilizando os laços de repetição já vistos. Para isso, vamos conhecer um quarto tipo
de laço de repetição: o foreach. Ele é exclusivo para percorrer arrays, nos quais podemos obter
apenas os valores ou a chave e o valor de cada posição. O laço percorre automaticamente todo o
array, repetindo o trecho de código pela quantidade de posições existentes no array. A Figura
4 apresenta um exemplo de como percorrer um array com nomes de países e exibi-los um em cada
linha.

FIGURA 4 Exemplo de como percorrer um array com o foreach


A cada iteração do foreach, o valor da posição é colocado na variável $capital. Isto é, na primeira
execução, $capital terá “São Paulo”, na segunda, “Rio de Janeiro” e, na terceira, “Belo Horizonte”.
Por outro lado, se você deseja obter a chave e o valor, é necessário adicionar mais uma variável no
foreach, como mostra o exemplo da Figura 5. Dessa forma, é possível obter ambas as informações.

FIGURA 5 Exemplo de como obter a chave e o valor de um array com o foreach

Observação: Não é possível obter apenas o valor da chave usando o foreach.


Exercício 57. Processando o código: arrays unidimensionais
Ao executar os códigos PHP a seguir, escreva como ficará o resultado na tela do navegador.
Exercício 58. Soma
Considere que você tem uma página chamada “soma.php” que recebe uma variável “numeros” via GET.
Esses números são informados por meio de uma string e separados por vírgula; por exemplo: soma.php?
numeros = 1,46,7,9. Desenvolva a página soma.php que deverá receber os números, separá-los, somá-los e
apresentar o resultado da soma na tela.
Exercício 59. Exibindo nome dos alunos conforme inicial
Considere que você tem uma página chamada “alunos.php” que contém um array $alunos com o nome de
vários alunos. Essa página, quando recebe por GET a variável letra, exibirá apenas os nomes dos alunos em
ordem alfabética, cuja inicial é a letra. Se não houver alunos com a letra informada, a página deverá exibir a
mensagem: “Não há alunos com a letra ***”. Se a variável letra não for informada, a página deverá exibir a
mensagem: “É necessário informar a letra”.
Exercício 60. Busca em array
Dado um formulário POST com um campo de busca, que é submetido à página “busca.php”, implemente-a
considerando a seguinte regra: se a palavra digitada constar em um array de palavras, a página deverá retornar
em quais posições a palavra se encontra.
Exercício 61. Capitanias hereditárias
Dado um array com nomes das capitanias hereditárias, exiba-os em ordem ascendente ou descendente. Para
isso, ao lado do cabeçalho da tabela, coloque dois links: um indicando para cima e outro para baixo. Ao clicar
“para cima” ou quando não houver indicação, os nomes deverão ser exibidos alfabeticamente; ao clicar para
baixo, a exibição será invertida.

Exercício 62. Campeonato brasileiro


Dado um array com nomes e pontos dos times do Brasileirão, exiba-os em ordem ascendente ou
descendente. Para isso, ao lado do título no cabeçalho da tabela, coloque dois links: um indicando para cima e
outro para baixo. Ao clicar “para cima” ou quando não houver indicação, os nomes ou os pontos deverão ser
exibidos alfabeticamente; ao clicar para baixo, a exibição será invertida.
1.5.2 Multidimensional
No PHP, é possível desenvolver arrays de mais de uma dimensão. Diferentemente de outras linguagens, os
arrays não precisam ter a mesma dimensão em cada uma das posições. Na verdade, o PHP aloca um array
dentro de uma posição de outro array. Com isso, cada posição pode ter chaves e tamanhos diferenciados.
Na Figura 6, é possível ver o array pessoa que possui as chaves “nome”¸ “idade” e “amigo”, sendo amigo
também um array de duas posições. Para percorrê-lo, usamos o foreach, que exibiu as informações “Maria”,
“18” e array, indicando a existência de um array dentro da posição “amigo”. Para percorrer esse segundo array,
pode-se utilizar um novo foreach.
Exercício 63. Processando o código: arrays multidimensionais

FIGURA 6 Exemplo de array com duas dimensões


Ao executar os códigos PHP a seguir, escreva como ficará o resultado na tela do navegador.
Exercício 64. Alunos, médias e sexo
Considere que você tenha o código a seguir. Implemente uma página PHP que:
a) Mostre a média da turma.
b) Mostre a média da turma que tirou mais
que 7.
c) Mostre a média da turma que tirou menos
que 4.
d) Mostre a média das meninas da turma.
e) Mostre a média dos meninos da turma com
notas maiores ou igual a 5.
f) Mostre quantos meninos e meninas há na
turma.
g) Mostre quantas meninas cujos nomes
começam com A há na turma.
h) Mostre a lista com o nome de todos os
alunos.
i) Mostre uma tabela com o nome dos alunos
e a situação deles: > = 7 aprovado na
cor verde, < 7 e > = 4 em exame em
azul, < 4 reprovado em vermelho.
j) O nome do aluno com a nota mais baixa.

Exercício 65. Ginastas


Considere que você tenha o código a seguir. Implemente uma página PHP que:
a) Mostre a lista com o nome de todas as
ginastas.
b) Mostre a média de notas.
c) Mostre a lista com o nome das ginastas
com nota acima de 13.
d) Mostre a lista com o nome das ginastas
americanas.
e) Mostre a lista com a quantidade de ginastas
por país.
f) Mostre o nome da ginasta com a nota mais
alta.
Exercício 66. Buscando valor em array multidimensional
Considere o array a seguir, chamado $confusao.

a. Como o valor “Big Ben” pode ser acessado por meio desse array? ______________
b. Como o valor “Shakira” pode ser acessado por meio desse array? _______________
Exercício 67. Exibindo nomes das cidades conforme estado
Considere que você tem uma página chamada “cidades.php” que contém um array $cidades da seguinte
forma:

Essa página, quando recebe por GET a variável estado, exibirá apenas os nomes das cidades, em ordem
alfabética, que pertencem ao estado. Se não houver cidades com o estado informado, a página deverá exibir a
mensagem: “Não há cidades do estado ***”. Se a variável estado não for informada, a página deverá exibir
todas as cidades no seguinte formato: “Cidade – Sigla do Estado”, ordenada alfabeticamente por estado e
cidade.
Exercício 68. Presidentes do Brasil
Dado um array com nomes de presidentes do Brasil, exiba-os em ordem ascendente ou descendente. Para
isso, ao lado do cabeçalho da tabela, coloque dois links: um indicando para cima e outro para baixo. Ao clicar
“para cima” ou quando não houver indicação, os nomes deverão ser exibidos alfabeticamente; ao clicar para
baixo, a exibição será invertida.

1.6 Funções do Usuário e Escopo


As funções permitem modularizar a codificação, automatizando a repetição de trechos do programa, os quais
deverão ser executados em várias partes do site. Além disso, é possível informar valores para essas funções de
modo que se adaptem na execução. Na Figura 7, temos um exemplo de uma função que recebe um número e
retorna metade de seu valor.

FIGURA 7 Exemplo de função com passagem de parâmetro por valor


As variáveis criadas dentro de uma função só existem dentro dessa função, da mesma forma que as variáveis
externas só são acessadas pela codificação externa. Isso é o que chamamos de escopo. Existem o escopo global,
que são as variáveis acessíveis por toda a página, e o escopo local, que são as variáveis dentro das funções.
Retornando à Figura 7, a variável $valor tem escopo local, enquanto a variável $numero é de escopo global.
Para enviar uma informação que está em uma variável global para dentro da função, utilizamos a passagem
de parâmetros. O PHP permite três tipos de parâmetros: por valor, por referência e por valor padrão. Na
passagem por valor, o valor da variável informado na chamada da função é copiada pra dentro da função, não
mudando seu valor externamente. No exemplo anterior (Figura 7), o número 4 foi copiado para a variável
$valor.
Já na Figura 8, temos um exemplo de passagem de parâmetro por referência. Ao declarar a função, as
variáveis enviadas por referência devem ser identificadas pelo símbolo &. Nesse caso, o endereço de memória
é enviado com a variável. Logo, qualquer modificação dentro da função se refletirá fora dela. A variável
$numero é de escopo global (foi criada fora função) e tem valor 3. Ao chamar a função dobra, enviamos a
variável por referência. Dentro da função, solicitamos que a variável $valor tenha seu conteúdo multiplicado
por 2. Como essa variável foi enviada por referência, a modificação também ocorrerá fora da função. Portanto,
ao solicitarmos a exibição de $numero ao final do programa, o navegador exibirá o número 6.

FIGURA 8 Exemplo de função com passagem de parâmetro por referência


Por fim, é possível declarar uma função com parâmetros, para que, se não foram atribuídos valores na
chamada, sejam estabelecidos valores padrão. A Figura 9 apresenta a função exibe. Ela indica que, se nenhum
valor for informado, considerará como valor padrão a string “nenhuma”. Ao executar o código, o navegador irá
exibir o texto “mensagem” e logo abaixo “nenhuma”; isso ocorre porque, na segunda solicitação, a variável não
foi informada.

FIGURA 9 Exemplo de função com passagem de parâmetro por valor padrão


Observação: Não é possível que uma variável seja enviada por referência e tenha valor padrão
simultaneamente.
.
Exercício 69. Processando o código: funções
Ao executar os códigos PHP a seguir, escreva como ficará o resultado na tela do navegador.
Exercício 70. Conversão de temperaturas
Sabendo que a fórmula para a conversão de uma temperatura em Fahrenheit para Celsius é: c = (f
– 32) / 18, faça uma função em PHP que mostre os valor em Celsius das seguintes temperaturas em
Fahrenheit: 90°, 77°, 52° e 12°.

Exercício 71. Conversão de moedas


Sabendo que, em um determinado dia, a cotação de $ 1 (um dólar) é de R$ 1,81, desenvolva duas
funções que convertam um valor de dólar para real e de real para dólar, arredondando para até duas
casas decimais.

Exercício 72. Peso ideal


Sabendo que a fórmula para calcular o peso ideal é:
• para mulheres: (62.1 * altura) – 44.7;
• para homens: (72.2 * altura) – 58;
Faça uma função em PHP que recebe o sexo e a altura de uma pessoa e retorne o peso ideal.
Exercício 73. Desconto conforme valor de compra
Uma empresa de vendas oferece para seus clientes um desconto conforme o valor da compra. Esse
desconto é de 20%, se o valor da compra for maior ou igual a R$ 5000,00, e 15%, se menor. Faça uma
função que receba o valor da compra por parâmetro e retorne o valor com o desconto. Exemplo:

Exercício 74. Fatorial


Faça uma função que receba um número inteiro e retorne o fatorial desse número. Exemplo:

Exercício 75. Funções de números pares e ímpares


Faça uma página HTML com um formulário que envia um conjunto de números separados por,
(vírgula) para uma página PHP. Desenvolva uma página PHP que contém quatro funções, onde cada
uma receberá o array com os números informados no formulário e calcule. Em seguida, a página
PHP deverá executar cada uma das funções.
Exercício 76. Troca cor de texto
Desenvolva, em PHP, a função buscaTexto($texto, $busca), sendo $texto uma variável string que
contém um texto, e $busca, um array que contém palavras a serem buscadas no texto. Cada vez que
uma palavra buscada for localizada, ela deverá ser destacada na cor vermelha. A função deverá
retornar o $texto com as palavras destacadas em vermelho.
Exercício 77. Situação do aluno
Considere o trecho de código-fonte apresentado a seguir. Ele contém a declaração da função
“situação” que recebe três parâmetros: nota, frequência e exame. Você deverá implementar a função,
de modo que, ao ser chamada, retorne se o aluno foi “Aprovado”, “Reprovado” ou “Erro”. O aluno é
considerado aprovado se tem nota igual ou maior a 7 e frequência igual ou maior a 75%; ou se tem
nota do exame maior ou igual a 5 e frequência igual ou maior a 75%. O aluno é considerado
reprovado se apresenta nota menor que 7 e nota do exame menor que 5; ou frequência menor que
75%. Demais situações (valores inválidos, incompletos, etc.) devem retornar mensagem de erro.

Exercício 78. Margarida


Josefina ganhou um buquê de flores e gostaria de saber quantas margaridas o buquê possui. Faça
uma função PHP que retorne a quantidade de margaridas do buquê:
Exercício 79. Festa junina
A festa junina está chegando e uma tradição da festa são as quadrilhas. Para participar de uma
quadrilha, é necessário formar um casal de dançarinos. Sabendo disso, desenvolva a função
quadrilha que recebe dois arrays com nomes de meninos e meninas e suas respectivas alturas. A
função deve ordenar os arrays pela altura (da menor para a maior), e, na sequência, montar os casais
até que se esgotem os meninos ou as meninas. Os nomes dos casais devem ser retornados, conforme
exemplo mostrado no navegador.

Exercício 80. Trocando caracteres por emoticons


Desenvolva, em PHP, a função emoticons($texto), sendo $texto uma variável string que contém
um texto com vários símbolos que remetem a imagens de rostos (emoticons). A função deverá
analisar um texto e, onde houver um símbolo, trocar pela imagem, retornando o texto com as
imagens, conforme o exemplo a seguir:
Exercício 81. Processando o código: funções recursivas
Ao executar os códigos PHP a seguir, escreva como ficará o resultado na tela do navegador e para
que serve cada função.

a) Serve para: _______________________________________________________

b) Serve para: ______________________________________________________

c) Serve para: _______________________________________________________


d) Serve para: _______________________________________________________
Exercício 82. Exibição dos números de 1 a 10 com função recursiva
Faça uma função recursiva que exiba os números de 10 a 1. Exemplo:

Exercício 83. Exibição de números com função recursiva


Faça uma função recursiva que exiba os números de 1 até um número informado por parâmetro.
Exemplo:

Exercício 84. Exibição de somatório de 1 a 15 com função recursiva


Faça uma função recursiva que exiba o somatório dos números de 1 a 15. Exemplo:

Exercício 85. Exibição de somatório com função recursiva


Faça uma função recursiva que exiba o somatório dos números de 1 até um número informado por
parâmetro. Exemplo:

Exercício 86. Exibição de pares de 1 a 20 com função recursiva


Faça uma função recursiva que exiba os números pares de 1 a 20. Exemplo:

Exercício 87. Exibição de ímpares com função recursiva


Faça uma função recursiva que exiba os números ímpares de 1 a 20. Exemplo:

1.7 Cookies e Sessions


Os Cookies e as Sessions são variáveis, cuja função é compartilhar informações nas diversas páginas de um
site. Uma vez criada uma variável, ela pode ser acessada nas páginas subsequentes. Existem algumas
diferenças entre os cookies e as sessions. A principal é que os cookies ficam armazenados no navegador do
cliente, enquanto as sessions ficam no servidor. Há diferenças também na forma de se programar cada um
deles. Vamos ver a Figura 10, que mostra como criar e acessar um cookie.

FIGURA 10 Criando e exibindo valores de cookie


Os cookies são criados por meio da função setcookie, na qual devemos informar o nome e o valor.
Opcionalmente, podemos definir qual será a sua duração (no nosso exemplo, indicamos que ela deve deixar de
existir após 60 segundos a partir no momento em que a página for executada). Para exibir um cookie
previamente criado, basta acessá-lo por intermédio da variável $_COOKIE, indicando o nome definido. Note
que um cookie sempre só terá seu valor atualizado em um acesso subsequente. Isso se deve ao seu
armazenamento (no navegador), cuja atualizacão ocorre no carregamento da página.
O uso dos cookies é indicado para a personalização do conteúdo das páginas, por exemplo, preferência de
leiaute e armazenamento de informações preenchidas em formulários. Isto é, funcionalidades que não
comprometem diretamente o funcionamento do site, uma vez que o usuário pode desabilitá-las no navegador.
Na Figura 11, vamos criar um exemplo semelhante usando sessions. Para trabalhar com as sessions,
devemos iniciá-la por meio da função session_start(). A partir disso, podemos usar a variável $_SESSION
como se fosse um array tradicional, em que é possível alterar e exibir seus valores.

FIGURA 11 Criando e exibindo valores de sessão


Observação: As sessions têm um tempo único de duração, estabelecido nas configurações do servidor.
As sessions são usadas frequentemente para restringir o acesso a uma página por um usuário não habilitado.
Além disso, se o seu site tiver muitos acessos, deve-se cuidar o uso indiscriminado de sessions, pois pode
sobrecarregar o servidor.
Exercício 88. Processando o código: cookies
Ao executar o código PHP a seguir, escreva como ficará o resultado na tela do navegador.

Exercício 89. Carrinho de compras


Suponha que o cookie “carrinho” foi criado ao acessar o sistema X. Quando o usuário sair desse sistema, o
cookie deve ser excluído. Como você programaria a eliminação do cookie na linguagem PHP?

Exercício 90. Site de notícias


Um usuário relatou a seguinte situação: “Ao acessar um site de notícias no computador do meu trabalho,
toda vez ele pede para escolher o estado, Rio Grande do Sul ou Santa Catarina, de onde desejo ver as notícias.
Entretanto, em casa, apenas na primeira vez ele pediu o estado, e nos outros acessos sempre entra no estado
escolhido diretamente”. Explique por que essa situação ocorre, uma vez que a codificação da aplicação é a
mesma.
Exercício 91. Top 3 das músicas
Reimplemente o código a seguir, fazendo com que o array seja armazenado em uma session com mesmo
nome.

Exercício 92. Site da escola para aluno e professor


Uma escola deseja implementar um site que terá acesso restrito a algumas páginas. Existem dois tipos de
usuários: aluno e professor. Os dois usuários acessam o sistema através de um formulário único, que contém os
campos de “login”, “senha” e um botão de submissão. Desenvolva a página “verifica.php” que recebe os dados
desse formulário e, conforme o tipo de usuário, redireciona-o para a página de acesso restrito correspondente.
Veja os dados adicionais:

Exercício 93. Período de permanência


Um site deseja que, quando o usuário sair do sistema, seja mostrado o tempo que ele permaneceu conectado.
Ou seja, a diferença entre o horário que ele fez o login até o momento em que saiu. Sabendo isso, qual(is)
comando(s) você adicionaria às páginas:
• “verifica.php”: para que o tempo inicial seja gravado, e
• “sair.php”: para que calcule o tempo de permanência na página e o exiba.
Considere que as demais implementações (verificação de senha e criação dos mecanismos de acesso
restrito) já estejam feitas.
Exercício 94. Session com tempo
Um programador deseja criar uma session “aluno” que gravará o nome do aluno, como: “Carlos Souza”,
cuja duração será de 30 min. Ele também deseja criar a session “entrou” com o dia e a hora em que fez o login,
a qual deverá existir enquanto o navegador estiver aberto. Como você implementaria?
Exercício 95. Procurando erros: sessions
O código a seguir foi desenvolvido a fim de verificar se a sessão foi criada e permitir o acesso restrito à
página. Entretanto, a página não está funcionando. Qual é o erro no código e como solucioná-lo?
1.8 Arquivos
O PHP oferece diversas funções para manipulação de arquivos, sejam eles texto ou binário. Os arquivos podem
ser: incluídos dentro de outro arquivo PHP, enviados via upload, movidos ou renomeados dentro do servidor,
ou, ainda, ter seu conteúdo lido ou escrito.

1.8.1 Inclusão de Arquivos


A inclusão de arquivos é um recurso que permite a um arquivo ser inserido dentro de outro. Nesse
caso, o arquivo onde a função de inclusão estará deve ser PHP. Já o arquivo incluído deve ser do tipo
texto, podendo conter código PHP e recursos web (HTML, CSS, JS), ou até mesmo ser um texto puro.
Para incluir, podemos utilizar uma destas duas funções: include ou include_once. Ambas têm a
mesma funcionalidade, entretanto a segunda verifica se o arquivo já foi incluído anteriormente nessa
mesma execução, e, caso afirmativo, ele não inclui de novo. A Figura 12 mostra um exemplo de
inclusão.

FIGURA 12 Inclusão de Arquivo

Note que, ao incluir um arquivo, internamente é como se ocorresse uma cópia de tudo que existe
no arquivo incluído. Comandos, variáveis e saídas de tela são executados normalmente.
Observação: O include_once não permitirá a inclusão de um mesmo arquivo numa execução de
uma página PHP, entretanto, essa verificação ocorre a partir do nome do arquivo, não importando o
seu conteúdo.
Exercício 96. Processando o código: inclusão de arquivos
Considere os arquivos PHP criados na pasta “arquivos”:

Ao executar cada página PHP a seguir, escreva como ficará o resultado na tela do navegador.
Exercício 97. Processando o código: inclusão de arquivos
Considere os arquivos PHP criados na pasta “arquivos”:

Ao executar cada página PHP a seguir, escreva como ficará o resultado na tela do navegador.
Exercício 98. Processando o código: inclusão de arquivos (3)
Considere os arquivos PHP criados na pasta “arquivos”:

Ao executar cada página PHP a seguir, escreva como ficará o resultado na tela do navegador.

Exercício 99. Funções de geração padronizada de cabeçalho e rodapé


A inclusão de arquivos é comumente utilizada para padronizar interfaces gráficas, fazendo com que todas as
páginas de um site tenham os conteúdos dispostos igualmente. Já a escolha de cores e fontes é determinada
pelo CSS. Considerando o exemplo a seguir, construa as páginas “cadastro.php”, “proximas.php” e
“anteriores.php”, usando links para ligá-las. O que houver de comum entre as páginas deve ser programado nas
respectivas funções.
1.8.2 Gerenciamento de Arquivos
O PHP também dispõe de um conjunto de funções que permite o envio de arquivos externos ao site (upload),
além do gerenciamento dos arquivos que estão no próprio servidor (renomear, copiar, deletar, visualizar o
conteúdo de uma pasta e as propriedades dos arquivos – nome, extensão, data, etc).
Exercício 100. Percorrendo arquivos de uma pasta
A imagem a seguir ilustra os arquivos contidos no diretório “meusarquivos”. Após executar uma única vez a
página “teste.php” (que se encontra na pasta pai – um nível acima), escreva o nome dos arquivos contidos na
pasta.

Exercício 101. Exibindo arquivos de uma pasta


Desenvolva, em PHP, uma página que deve listar todos os arquivos por ordem alfabética contidos na pasta
“arquivos”.
Exercício 102. Exibindo arquivos por ordem de tamanho
Desenvolva, em PHP, uma página que deve listar todos os arquivos por ordem crescente de tamanho
(em bytes) contidos na pasta “arquivos”.
Exercício 103. Exibindo informações dos arquivos
Desenvolva, em PHP, uma página que deve listar os arquivos da pasta “documentos”. Essa página deverá
permitir a visualização dos dados: nome, extensão, tamanho e data de modificação.
Exercício 104. Exibindo arquivos GIF
Desenvolva, em PHP, uma função que retorne o nome dos arquivos com a extensão “GIF”, cujo nome da
pasta é passado por parâmetro.

Exercício 105. Excluindo arquivos


Faça uma página “mostraarquivos.php”, na qual deverá ser listado o nome dos arquivos da pasta
“documentos”. Ao lado do nome de cada arquivo, coloque um link “Deletar”, que ao ser pressiondo, deverá
direcionar para a mesma página e passar pela URL o nome do arquivo a ser excluído.
Exercício 106. Upload de arquivos
Faça uma página “upload.html” formulário que contenha um campo de envio de arquivo e um botão de
submissão. O formulário deve ser enviado para a página “upload.php”, onde o arquivo recebido deverá ser
salvo na pasta “arquivos”.
Exercício 107. Upload de arquivos únicos
Faça uma página “uploadunico.html” formulário que contenha um campo de envio de arquivo e um botão
de submissão. Ao enviar, a página “uploadunico.php” deverá verificar se já existe um arquivo com o mesmo
nome. Se houver, é necessário exibir a mensagem “O arquivo já existe”; caso contrário, será possível salvar o
arquivo.
Exercício 108. Upload de arquivos TXT
Faça uma página “uploadtxt.html” formulário que contenha um campo de envio de arquivo e um botão de
submissão. Ao enviar, a página “uploadtxt.php” deverá verificar se o arquivo enviado possui a extensão “txt”.
Caso afirmativo, salvará o arquivo na pasta “txt”; caso contrário, exibirá a mensagem “Este programa só aceita
arquivos TXT”.
Exercício 109. Upload de imagens
Faça uma página “uploadimagens.html” formulário que contenha um campo de envio de arquivo e um botão
de submissão. Ao enviar, a página “uploadimagens.php” deverá verificar se o arquivo enviado possui a
extensão “JPG”, “GIF” ou “PNG”. Caso afirmativo, salvará o arquivo na pasta “imagens”, com o nome
correspondente ao timestamp do momento à submissão; caso contrário, exibirá a mensagem “Este programa só
aceita arquivos de imagem”. Logo após, a página deve exibir as imagens contidas na pasta “imagens”.

1.8.3 Manipulação de Arquivos Texto


Os arquivos textos podem ser abertos, lidos e/ou escritos por meio de funções PHP. Dependendo do
que se deseja realizar com o arquivo, há uma forma de abri-lo (Figura 13):

FIGURA 13 Tipos mais usados de abertura de arquivo texto


Figura 14 apresenta um exemplo de como abrir o arquivo “teste.txt”, ler seu conteúdo e apresentá-
lo na tela.

FIGURA 14 Exemplo de Leitura de Arquivo

Observação: Toda vez que se for ler ou escrever em um arquivo texto, é necessário executar estas
três funções: fopen para abrir, fread ou fwrite para ler ou escrever, fclose para fechar.
Observação 2: Essas funções funcionam apenas com arquivos textos (ex: TXT, HTML, XML);
arquivos binários não são possíveis (ex: DOC, PDF, JPG).
Exercício 110. Editor de texto
Faça um formulário que receberá um arquivo TXT via upload. A página PHP que recebe o
formulário irá exibir outro formulário que conterá um campo textarea, cujo conteúdo será o texto
contido no arquivo TXT, e um botão submit. Ao clicar no botão, o texto alterado deverá ser salvo no
arquivo TXT.

Exercício 111. Soma de números em arquivo


Faça uma página PHP que irá ler o arquivo “soma.txt”, conforme exemplo a seguir. Essa página
deverá determinar a soma dos números contidos no arquivo, sendo que cada número está disposto
em uma linha do arquivo, conforme exemplo a seguir:

Exercício 112. Restaurante


Faça uma página PHP que irá ler um arquivo “restaurante.txt” e determinar qual é o tipo de
restaurante ao qual uma pessoa deve ir. Considere como estrutura de dados: carne;lanche;massa
Use a árvore de decisão para determinar o tipo de jogo a ser comprado:
Exercício 113. Enquete de desenho animado
Construa a página enquete.html que contém um formulário com dois conjuntos de campos radio
(desenho e sexo), um campo text (idade) e um botão de submissão botaoResponder. Implemente a
página “salvaenquete.php” de modo que, apenas se o botaoResponder for clicado, ela salve os dados
do formulário em um arquivo texto chamado “enquete.txt”, conforme exemplo a seguir. Note que os
dados poderão ser salvos somente se as três perguntas da enquete forem respondidas.

Exercício 114. Login em arquivo texto


Faça um formulário HTML que irá conter os seguintes dados do usuário: Nome, Login e Senha.
Quando o formulário for submetido, os dados deverão ser gravados no arquivo “usuarios.txt”.
Como o login deve ser uma informação única, é necessário que você verifique se já não há o login
cadastrado. Se houver, exiba a mensagem “o login já existe” e retorne ao formulário com os dados
preenchidos. Caso contrário, adicione os dados do usuário no final do arquivo, separando-os por “;”
e retorne ao formulário vazio.

Exercício 115. Conta bancária


Suponha que uma conta bancária possuía R$ 200,00 de saldo, processe o arquivo a seguir,
realizando as operações a seguir. Considere como a estrutura de
dados: data;operação;descrição;valor

Faça um formulário PHP que receberá o arquivo TXT via upload. Ao enviar o arquivo, a página
PHP irá salvar o arquivo TXT com o nome “operacoes.txt”, abrir o arquivo e processá-lo. Se a
operação for de crédito (C), o valor deverá ser somado ao saldo, se for débito (D), irá debitar. Como
resultado da página, deverá exibir o saldo anterior, as operações realizadas e o saldo atual.
Exercício 116. Orçamento
Suponha que uma pessoa dispõe de um orçamento X para a compra de guloseimas. Faça um
formulário que receberá o valor do orçamento e um arquivo TXT que contém diversas guloseimas.
Uma página PHP irá processar esse arquivo e determinará quais guloseimas poderão ser compradas (os
itens estão em ordem de prioridade). Considere a estrutura de dados: guloseima;quantidade;valorunitario

Exercício 117. Leitura de arquivos PDF


Considere um arquivo PDF, chamado “texto.pdf”, contendo o seguinte texto: “Eu sei programar”. Qual seria
a sequência de passos (comandos) de um programa PHP para ler o texto e exibir a mensagem na tela, usando as
funções vistas em aula para manipulação de arquivos textos?

1.9 Banco de Dados MySQL


Os bancos de dados são estruturas formadas por tabelas que permitem armazenar informações de uma forma
organizada. Os dados lá guardados podem ser acessados pelas diversas páginas e não são perdidos, mesmo
após encerrar o seu uso.
Dica: Aconselha-se que você possua um conhecimento prévio de banco de dados, a fim de compreender melhor
os exemplos e exercícios.
O PHP dispõe de bibliotecas para vários tipos de bancos de dados, desde os gratuitos (MySQL,
PostgreSQL) até os pagos (Oracle, SQL Server). Há, ainda, bibliotecas destinadas a qualquer banco de dados.
Dica: Prefira as bibliotecas específicas às genéricas.
Neste livro, são apresentados exemplos e exercícios direcionados ao banco de dados MySQL. Busque no
site <www.php.net> as funções correspondentes a outros bancos.
Na Figura 15, encontramos um exemplo, no qual vamos buscar todos os nomes da tabela pessoa e exibir
dentro de uma lista. A tabela pessoa contém os campos idpessoa, nome e idade, sendo idpessoa a chave
primária e autoincremento. Já no código, da mesma forma que na manipulação de arquivos textos, ao trabalhar
com banco de dados, é necessário abrir uma conexão (e selecionar a base de dados), realizar as consultas
desejadas e encerrar a conexão. As operações de incluir, alterar e excluir também podem ser realizadas. Usando
novamente a tabela pessoa, na Figura 16 vamos construir uma página que aumente em 1 ano a idade de todas as
pessoas.

FIGURA 15 Exemplo de exibição de dados de uma tabela

FIGURA 16 Exemplo de alteração de dados


Entretanto, a forma mais comum de se manipular tabelas é por meio de formulários. Veja na Figura 17 um
exemplo para inserir novos registros na tabela pessoa.

FIGURA 17 Exemplo de inserção de dados


Exercício 118. Cadastro de festas
Conforme o formulário e a tabela a seguir, crie a página formFesta.html contendo o formulário HTML, e a
página insereFesta.php para inserir os dados do formulário na tabela Festa. Considere que idFesta seja uma
coluna de autoincremento.
Exercício 119. Consultas de festas
Considerando a tabela Festa, implemente as 4 páginas a seguir. Cada página realiza uma consulta SQL na
tabela.
• Na página festasRealizadas.php, são apresentadas as festas cujas datas são anteriores à data atual. A
ordenação deve ser por data mais recente para mais antiga, seguido do nome da cidade e do nome da festa.
• Na página cidadesFestas.php, são apresentados os nomes das cidades e a quantidade total de festas por
cidade. A ordenação deve ser por quantidade, de maior para menor, seguido de ordem alfabética do nome
da cidade.

Exercício 120. Cadastro de CDs


Baseado no formulário a seguir (cd.html) e nas tabelas (cd e musica), desenvolva o cadastro (inserção) de
CDs no banco de dados (insereCd.php). Considere que as colunas id sejam de autoincremento.
Exercício 121. Reajuste dos preços
Crie uma tabela com os produtos a seguir. Uma página PHP deve exibir os dados do produto e o preço. Para
cada produto, será possível dar 10%, 15% ou 20% de desconto. Logo, ao clicar no link de um desconto,
altere o preço na tabela conforme o respectivo desconto.

Exercício 122. Cadastro de cidades


Crie uma página listaCidade.php que exibe o nome e fotos das cidades (armazenadas na tabela cidade). Ao
pedir para inserir, as imagens devem ser armazenadas na pasta “cidades” e seu nome deve ser o
“idcidade”. Ainda, somente imagens PNG poderão ser aceitas. Entretanto, ao clicar em deleta, o link será
direcionado ao “formCidade?acao = deleta&idcidade = X”, sendo X o id da cidade.
Gabarito do Capítulo 1
Exercício 1. Variáveis válidas
Variáveis válidas: $_nome, $_GET, $calça, $valor, $abcdefghijklmnopqrstuvwxyz, $abc,
$variável, $z99, $soma, $files, $profissão
Variáveis inválidas: $1numero, $guarda-chuva, Ssid
Observação: As variáveis não podem ter símbolos (exceto o sublinhado) e devem iniciar com
letra. Algumas variáveis ainda são de uso reservado, como: $_POST, $_GET, $_COOKIE,
$_SESSION, etc.
Para atribuir um valor a uma variável PHP, basta utilizar o símbolo =, em que $variavel =
“valor”. Para exibir essa informação na tela, utilizamos a função echo.
Exercício 2. Processando o código: variáveis
a) Olá
b) OláPessoal
c) Olá
Pessoal
d) Olá
Pessoal
e) Olá
Jandira
f) Olá
Jandira Ferreira
g) 4
44
Exercício 3. Processando o código: operadores aritméticos
a) -1
1
b) 1
2
0
c) 2.5
2
3
d) 3
4
4
5.05
5.06
e) 10
10
f) 8
3
g) Um número qualquer entre 1 e 10
h) 5
6
6
6
6
5
5
5
Exercício 4. Processando o código: operadores
a) 1
0
0
1
b) 1
0
1
0
c) 0
1
0
d) 0
1
0
Exercício 5. Processando o código: funções de data e String
a) 14-05-2014 (O dia do momento em que o código for executado)
b) 1800
c) olá, mundo!
Olá, mundo!
Olá, Mundo!
olá, mundo!
OLÁ, MUNDO!
d) Cheio de espaços
Cheio de espaços
Cheio de espaços
e) E aí, Marinalva!
f) 21
1
g) a
defgh
klmnopqrstuvwx
y
Exercício 6. Operações aritméticas

Exercício 7. Diferença de datas

Exercício 8. Troca de strings

Exercício 9. Inversão de strings

Exercício 10. Processando o código: desvio condicional


a) O nome é Ana
b) O nome não é Ana
c) O número é par
d) É uma mulher e tem 22 anos
e) Mensagem 1
Mensagem 2
Mensagem 3
f) Adulto
g) Bolo de Chocolate
h) Bolo de ChocolateBolo de Baunilha
Exercício 11. Maior idade

Exercício 12. Saudação conforme o horário

Exercício 13. Sorteio de número e par/ímpar

Exercício 14. Sorteio de número e múltiplo de 3


Exercício 15. Sorteio de número e múltiplo de 3 ou 5
Esse tipo de questão pode ser interpretada de duas formas. Vamos ver duas soluções possíveis.
Solução 1 - interpretação literal do enunciado:

Solução 2 - interpretação tradicional:

Exercício 16. Sorteio de número e múltiplos


Exercício 17. Sorteio de números e menor valor

Exercício 18. Processando o código: laços de repetição


a) 1 2 3 4 5
b) 2 4 6 8 10
c) 2 4 6 8 10
d) -2 -1 0 1 2 3 4 5 6 7
e) -2 -1 0 1 2 3 4 5 6 7 8
f) 120
g) 24
h) 4 7 10 13 16 19
i) 1
12
123
1234
j) 1
12
123
1234
12345
Exercício 19. Exibir números entre 1 e 20
Exercício 20. Exibir números entre -10 e 10

Exercício 21. Exibir números entre -15 e -5

Exercício 22. Exibir números entre 0 e -30

Exercício 23. Exibir números ímpares entre 100 e 200

Exercício 24. Exibir números pares entre 349 e 401

Exercício 25. Exibir uma sequência de números


Exercício 26. Sorteio de número e primo

Exercício 27. Sorteio de número e exibição de sequência

Exercício 28. Sorteio de número e exibição de sequência (2)


Exercício 29. Sorteio de dois números e exibição de sequência entre eles

Exercício 30. Sorteio de dois números e exibição da soma da sequência entre eles

Exercício 31. Média aritmética de uma sequência

Exercício 32. Plim


Exercício 33. Ping Pong

Exercício 34. Exibição do alfabeto

Exercício 35. Exibição do alfabeto com distinção de vogais e consoantes

Exercício 36. Exibição de texto com quebra de linha


Exercício 37. Geração da tabuada

Exercício 38. Procurando erros: laços de repetição

Exercício 39. Exibindo dados de um formulário


Exercício 40. Quiz aritmético

Exercício 41. Soma dois números


soma.html

soma.php

Exercício 42. Conversão de decimal para binário


binario.html

binario.php
Exercício 43. Concatenação de nome e sobrenome
nomecompleto.html

nomecompleto.php

Exercício 44. Maior entre dois valores


maiornumero.html
maiornumero.php

Exercício 45. Menor entre três valores


menornumero.html

menornumero.php
Exercício 46. Triângulo
triangulo.html

triangulo.php

Exercício 47. Quadrilátero


quadrilatero.html
triangulo.php

Exercício 48. Verificação de senha


verificasenha.html

verificasenha.php
Exercício 49. Exibindo opções de porcentagem no campo select de um formulário

Exercício 50. Exibindo opções de anos no campo select de um formulário

Exercício 51. Processando o código: GET e estruturas de controle


a) Nome inválido
a) Não exibe nada na tela
Exercício 52. Processando o código: GET e estruturas de controle (2)
a) -3
b) -3
c) 12
d) 7
Exercício 53. Processando o código: GET e estruturas de controle (3)
a) a b c d e f g h i j
b) a b c d e f g h i j
Exercício 54. Cálculo de custo de um carro

Exercício 55. Cálculo de comissão de vendas

Exercício 56. Cálculo de custo de compra de maçãs

Exercício 57. Processando o código: arrays unidimensionais


a) Amora
b) Array ( [0] => Maçã [1] => Amora [2] => Uva )
c) Maçã Amora Uva
d) Amora Maçã Uva
e) Uva Maçã Amora
f) Maçã Amora Uva Abacaxi Melão
g) 10 2 7
h) Banana -> 10
Amora -> 2
Melancia -> 7
i) Array ( [0] => papel higiênico [dois] => óculos [quatro] => telefone [tres] => papel [um] =>
caneta )
j) Array ( [dois] => óculos [quatro] => telefone [0] => papel higiênico [tres] => papel [um] =>
caneta )
k) 1 4 3
l) 0 – 15
3–6
4–2
1–5
Exercício 58. Soma

Exercício 59. Exibindo nome dos alunos conforme inicial


Exercício 60. Busca em array
buscapalavra.html

buscapalavra.php
Exercício 61. Capitanias hereditárias

Exercício 62. Campeonato brasileiro


Exercício 63. Processando o código: arrays multidimensionais
a) Array
Array
b) 15
6
2
5
c) Beatriz
6
Carlos
5
d) 0 - nome - Beatriz
0 - idade - 6
1 - nome - Carlos
1 - idade - 5
e) Ribamar
f) Quant: 7
Joaquim
Lindalva
Beatriz
Carlos
Carlos José
Beatriz
Joaquim
Lindalva
Beatriz
Carlos
Carlos José
g) Bento Gonçalves
Garibaldi
Caxias do Sul
Farroupilha
Barão
Bento Gonçalves
Garibaldi
Caxias do Sul
Farroupilha
Barão
Salvador do Sul
Cotiporã
7
4
1
Exercício 64. Alunos, médias e sexo
a) Mostre a média da turma.

b) Mostre a média da turma que tirou mais que 7.


c) Mostre a média da turma que tirou menos que 4.

d) Mostre a média das meninas da turma.

e) Mostre a média dos meninos da turma com notas maiores ou igual a 5.


f) Mostre quantos meninos e meninas há na turma.

g) Mostre quantas meninas cujos nomes começam com A há na turma.

h) Mostre a lista com o nome de todos os alunos.


i) Mostre uma tabela com o nome dos alunos e a situação deles: > = 7 aprovado na cor verde,
< 7 e > = 4 em exame em azul, < 4 reprovado em vermelho.

j) O nome do aluno com a nota mais baixa.

Exercício 65. Ginastas


a) Mostre a lista com o nome de todas as ginastas.

b) Mostre a média de notas.


c) Mostre a lista com o nome das ginastas com nota acima de 13.

d) Mostre a lista com o nome das ginastas americanas.

e) Mostre a lista com a quantidade de ginastas por país.

f) Mostre o nome da ginasta com a nota mais alta.


Exercício 66. Buscando valor em array multidimensional
a) $confusao[“Londres”][0];
b) $confusao[“amarelo”][“Colômbia”][0];
Exercício 67. Exibindo nomes das cidades conforme estado
Exercício 68. Presidentes do Brasil
Exercício 69. Processando o código: funções
a) 5
36
88
b) 90
15
Falta o 2° parâmetro na linha “echo multiplica(3).“<br>’;
c) Nome 1: Amilton
Nome 2: Milton
Resultado: Milton
Cara: Milton
Resultado 2: Milton
d) A: 6 - S: 15
e) A: 5 - S: 4
A: 7 - S: 7
f) A: 6 - N: 5 - S: 15
g) Função G: 4
Y: 39
h) Array ( [0] => 2 [1] => 4 )
i) A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
j) Nada é apresentado na tela.
k) 6 - 2
l) 8 - 8
m) 8 - 8
32 - 32
n) 10 - 5
Exercício 70. Conversão de temperaturas

Exercício 71. Conversão de moedas

Exercício 72. Peso ideal


Exercício 73. Desconto conforme valor de compra

Exercício 74. Fatorial

Exercício 75. Funções de números pares e ímpares


Exercício 76. Troca cor de texto
Exercício 77. Situação do aluno

Exercício 78. Margarida

Exercício 79. Festa junina


Exercício 80. Trocando caracteres por emoticons

Exercício 81. Processando o código: funções recursivas


a) 1 2 3 4 5 6 7 8 9 10
Serve para: exibir a sequência de número de 1 a 10
b) 1 - 1 - 120
Serve para: calcular o fatorial de um número
c) 1 - 1 - 8
Serve para: calcular o número Fibonacci de uma posição
d) 2 - 8 - 32
Serve para: calcular o valor de 2 elevado a uma determinada potência
Exercício 82. Exibição dos números de 1 a 10 com função recursiva
Exercício 83. Exibição de números com função recursiva

Exercício 84. Exibição de somatório de 1 a 15 com função recursiva

Exercício 85. Exibição de somatório com função recursiva

Exercício 86. Exibição de pares de 1 a 20 com função recursiva


Exercício 87. Exibição de ímpares com função recursiva

Exercício 88. Processando o código: cookies


a) Notificação de variável não definida.
Dia:
b) A página será recarregada infinitamente.
Exercício 89. Carrinho de compras
setcookie(“carrinho”, “”, time()-1);
Exercício 90. Site de notícias
Provavelmente o navegador do computador do local de trabalho está configurado para
desabilitar o funcionamento dos cookies, e, no computador de casa, essa opção está habilitada.
Exercício 91. Top 3 das músicas

Exercício 92. Site da escola para aluno e professor


index.html
verifica.php

aluno.php

professor.php

Exercício 93. Período de permanência


verifica.php
sair.php

Exercício 94. Session com tempo


Não é possível determinar duração específica para uma variável de sessão, nem estabelecer a sua
eliminação conforme o fechamento do navegador, uma vez que esta fica armazenada no
servidor, e não no navegador.
Exercício 95. Procurando erros: sessions
A função header requer que nenhuma saída de tela seja realizada antes de executá-lo (embora
em alguns servidores esse erro possa não ser exibido). O mesmo vale para a função session_start
e setcookie.
Exercício 96. Processando o código: inclusão de arquivos
arquivo1
10-35
arquivo1
Exercício 97. Processando o código: inclusão de arquivos (2)
a) arquivo1
arquivo1
b) arquivo1
c) Soma: 15
d) Soma: 15
Valor1: 2 - Valor2: 99
Valor1: 50 - Valor2: 35
e) Soma: 15
Valor1: 2 - Valor2: 99
Valor1: 2 - Valor2: 99
f) A: 10 – B: Oi
A: Oi – B: 10
g) A: 10 – B: Oi
Erro de redeclaração da função teste
h) A: 10 – B: Oi
A: Oi – B: 10
i) A: 10 – B: Oi
A: Oi – B: 10
j) A: 10 – B: Oi
A: Oi – B: 10
A: -1 – B: 0
A: 0 – B: -1
Exercício 98. Processando o código: inclusão de arquivos (3)
Notificação de variáveis não declaradas
Exercício 99. Funções de geração padronizada de cabeçalho e rodapé
cadastro.html
proximas.php

anteriores.php
Exercício 100. Percorrendo arquivos de uma pasta
baixo_peso.xls
keep_me_in_mind.mp3
novonome.jpg
pesquisa.docx
song.mp3
Exercício 101. Exibindo arquivos de uma pasta

Exercício 102. Exibindo arquivos por ordem de tamanho


Exercício 103. Exibindo informações dos arquivos

Exercício 104. Exibindo arquivos GIF

Exercício 105. Excluindo arquivos


mostraarquivos.php
Exercício 106. Upload de arquivos
upload.html

upload.php

Exercício 107. Upload de arquivos únicos


uploadunico.html
uploadunico.php

Exercício 108. Upload de arquivos TXT


uploadtxt.html

uploadtxt.php
uploadimagens.html

uploadimagens.php

Exercício 110. Editor de texto


enviararquivo.php
editor.php

Exercício 111. Soma de números em arquivo


soma.php
Exercício 112. Restaurante

Exercício 113. Enquete de desenho animado


enquete.html
salvaenquete.php

Exercício 114. Login em arquivo texto


usuario.php

salvausuario.php
Exercício 115. Conta bancária
saldo.html

saldo.php
Exercício 116. Orçamento
orcamento.html

orcamento.php
Exercício 117. Leitura de arquivos PDF
Não é possível abrir um arquido PDF com as funções de leitura e escrita de arquivos texto.
Exercício 118. Cadastro de festas
festa.html

insereFesta.php
Exercício 119. Consultas de festas
festasRealizadas.php

cidadesFestas.php
Exercício 120. Cadastro de CDs
cd.html
insereCd.php

Exercício 121. Reajuste dos preços


desconto.php
Exercício 122. Cadastro de cidades
listaCidade.php
formCidade.php
CAPÍTULO DOIS

Orientação a Objetos
A orientação a objetos (OO) é um dos paradigmas mais utilizados na programação. No PHP, é frequente o uso
de bibliotecas disponibilizadas por grupos de desenvolvedores que utilizam OO. Ela também será essencial
para a compreensão da arquitetura em 3 camadas (MVC), que veremos no final deste capítulo.
Originalmente, o PHP não foi criado para trabalhar com OO. Na versão 3, trazia poucos elementos, como:
classes, atributos e métodos. Entretanto, com o lançamento da versão 5, a maioria das características foi
implementada e desde então continua sendo adicionada a cada nova distribuição.
2.1 Classes e objetos
As classes são estruturas que permitem reunir características comuns a um elemento. A partir delas,
podem-se criar variáveis, ou melhor, instanciar objetos.
O PHP permite que várias classes sejam criadas em um mesmo arquivo, entretanto, a fim de
manter uma organização e similaridade a outras linguagens de programação, vamos colocar cada
classe em um arquivo separado. Isso tambem facilita a manutenção e o reaproveitamento de código.
Neste livro, os arquivos que contêm classes são identificados pelo nome “nomedaclasse.class.php”.
Na Figura 18, temos a implementação da classe Criança. A classe possui dois atributos: idade e
nome. Ambos são privados, ou seja, somente são acessíveis pela própria classe. Ainda há três
métodos: setNome (que recebe um parâmetro nome e altera o atributo nome), getNome (que retorna
o atributo nome) e fazAniversario (que incrementa em uma unidade o atributo idade). Os três
métodos são públicos, permitindo acessá-los por outros arquivos PHP. Note que, para acessar os
atributos da classe, é necessário referenciá-los com a palavra reservada $this, caso contrário, o PHP
entenderá que se trata de uma variável local.

FIGURA 18 Classe Criança

Os métodos podem conter qualquer codificação PHP (operações, estruturas de controle, exibição
de informação, etc.). Também existe outro tipo de visibilidade de atributos e métodos, o protegido
(protected), que permite que somente a própria classe e as classes herdeiras acessem as informações.
Outra característica importante é a existência de dois métodos padrões para todas as classes:
__construct (construtor) e __destruct (destrutor). O __construct é chamado no momento da
instanciação do objeto, isto é, quando a palavra reservada new é utilizada. É possível que esse
método tenha sua implementação personalizada, podendo ser inicializada alguma variável ou
realizada qualquer operação. Caso a classe não implemente nada, o objeto será instanciado
normalmente. O mesmo ocorre com o __destruct. Ele é responsável pela finalização da classe, sendo
chamado automaticamente no encerramento da execução da página.
Na Figura 19, temos uma classe que utiliza os métodos __construct e __destruct. Vamos
implementar uma classe tempo que exibe uma mensagem em cada um, além de calcular a diferença
de tempo entre a instanciação e a destruição do objeto.
FIGURA 19 Classe Tempo com construtor e destrutor
Obs: O funcionamento dos métodos __construct e __destruct é semelhante aos demais, podendo
receber parâmetros e executar comandos PHP.
Exercício 123. Classes
Desenvolva a estrutura de código-fonte em PHP das classes a seguir. Não implemente os
métodos.

Exercício 124. Métodos


Desenvolva as classes a seguir:
Exercício 125. Gets e sets
Implemente os métodos get e set de cada classe:

Exercício 126. Calcule a área


Implemente as classes:
Exercício 127. Retângulo
Desenvolva a página “retangulo.php” considerando que: se o botão “Calcula Área” foi
pressionado, a página deverá mostrar o valor calculado; caso contrário, o formulário deverá ser
exibido. Para calcular a área, utilize a classe Retangulo do Exercício 126.

Exercício 128. Sexo e idade


Desenvolva os códigos PHP necessários para o sistema a seguir:

Exercício 129. Sequência


Desenvolva as páginas a seguir utilizando a classe sugerida.
Exercício 130. Palavra
Desenvolva as páginas a seguir utilizando a classe sugerida.
Exercício 131. Sequência com tabelas
Implemente as páginas a seguir, considerando o protótipo de tela e o diagrama de classes fornecido.
Exercício 132. Calendário
Implemente as páginas a seguir, considerando o protótipo de tela e o diagrama de classes fornecido.

Exercício 133. Lista de praias


Neste exercício, você receberá parte da classe implementada e a página PHP que a utiliza. Você deverá
implementar os métodos faltantes.
2.2 Associação, agregação e composição
Uma característica importante na OO é a capacidade de as classes se relacionarem. Neste livro,
abordaremos seis tipos de relacionamentos: associação, agregação, composição, dependência,
herança e realização. Os três primeiros, embora sejam descritos de forma muito similar no PHP, têm
significados distintos.
A associação refere-se à condição de que uma classe está vinculada a outra, porém não há uma
relação forte. Isso significa que, se uma delas deixar de existir, a outra não perde o seu sentido. Por
exemplo, as classes “motorista” e “carro”: um carro é dirigido por um motorista, e um motorista
dirige um carro. Entretanto, se o carro deixa de existir (supondo que ocorra uma enchente e haja
perda total), o motorista nem por isso deixa de existir, ele apenas passará a dirigir um outro veículo.
A associação é indicada por uma linha contínua, podendo ser acompanhada por uma seta que indica
a direção do relacionamento. No exemplo da Figura 20, o carro possui um motorista.
FIGURA 20 Classes Carro e Motorista

Na agregação, uma classe faz parte de outra classe. Por exemplo: para o carro funcionar (e estar
adequado às leis), ele precisa de 5 rodas (4 em uso e 1 estepe). Logo, há uma agregação entre a classe
carro e a classe roda (mais precisamente com multiplicidade indicando 5 rodas), conforme a Figura
21. A agregação é representada por uma linha contínua acompanhada de um losango aberto na
direção da classe que representa o todo.
FIGURA 21 Classes Carro, Motorista e Roda
A composição é considerada uma relação mais forte do que a agregação, pois, além de indicar que
uma classe necessita de outra, não há possibilidade de o objeto ser substituído. Por exemplo,
na Figura 22, cada carro tem um único chassi que, legalmente, não pode ser adulterado. Isso também
ocorre com livros e suas páginas, pois não faz sentido remover uma página de um livro e colocá-la
em outro. A composição tem a mesma representação da agregação, entretanto, o losango é pintado.
FIGURA 22 Classes Carro, Motorista, Roda e Chassi
Note que, quando ocorre uma associação, agregação ou composição, automaticamente é gerado
um atributo em uma das classes (ou em ambas). A navegabilidade, isto é, a direção indicando qual
classe contém o objeto da outra, depende do contexto em que o sistema se baseia. Além disso, é
importante indicar a multiplicidade, a fim de saber se será gerado um objeto ou um array de objetos
(e a quantidade de elementos).
Exercício 134. Classes e relacionamentos
Desenvolva o trecho / estrutura de código-fonte em PHP das classes a seguir:

Exercício 135. Amigos


Dado o diagrama de classes, construa uma página amigo.php onde você irá criar as pessoas Luís,
Carina, Eduardo, Paula e Luiza. Mostre que Paula é amiga de Luiza e Carina; e que Eduardo é amigo
de Paula e Luís.
Exercício 136. MP3
Desenvolva as classes abaixo, considerando a que cada método se propõe.

Exercício 137. Livro


Desenvolva as classes abaixo, considerando a que cada método se propõe.

Exercício 138. SMS


Considere a existência das classes representadas no diagrama de classes a seguir. Construa a
página mensagem.php, na qual você irá implementar a seguinte história: João tem um telefone da
Tim, cujo número é 9999-1234. Maria tem um telefone da Vivo, com o número 9999-2222. Antônio
possui o número 8888-2013 da Vivo. João enviou uma mensagem no último domingo às 20h,
convidando Maria para sair, mas após 10 minutos ela respondeu que não poderia. Maria quer sair
com Antônio, então, ela o convidou, enviando um SMS no momento da execução da página.

Exercício 139. Cidade, estado e país


Implemente as páginas a seguir, considerando o protótipo de tela e o diagrama de classes
fornecido.
Exercício 140. Gosto musical
Desenvolva os códigos PHP necessários para a página a seguir. Note que não foram sugeridas classes,
portanto, você deverá propô-las. É necessário que o usuário sempre tenha um artista recomendado, respeitando
as opções que ele preencheu. Você poderá escolher qual artista irá sugerir.
2.3 Herança
A herança é um relacionamento entre duas classes, chamadas de classe pai e classe filha. Neste caso, todos os
atributos e métodos não privados da classe pai são herdados pela classe filha. Portanto, é comum encontrar na
literatura como um relacionamento “é do tipo de”. São exemplos: um caminhão e uma moto são um tipo de
veículo, um liquidificador é um tipo de eletrodoméstico, etc. Nota-se que as classes devem ter características
semelhantes, com a classe pai generalizando os comportamentos e as propriedades comuns, enquanto as classes
filhas as especificam. Ainda, assim como a maioria das linguagens de programação, no PHP uma classe filha
herda apenas uma classe pai, mas uma classe pai pode ter várias classes filhas.
Vamos acompanhar um exemplo de herança na Figura 23. A classe Guloseima possui o atributo protegido
sabor, o qual poderá ser acessado pelas classes filhas Bombom e Recheio. Um bombom possui, além de sabor,
um recheio. No diagrama de classes, a herança é representada por uma linha contínua com um triângulo aberto
apontando para a classe pai. No PHP, a herança é especificada pela palavra reservada “extends”, indicando que
a classe filha herda a classe pai.
FIGURA 23 Classes Guloseima, Bombom e Pirulito
Exercício 141. Classes e relacionamentos
Desenvolva o trecho / estrutura de código-fonte em PHP das classes a seguir:

2.3.1 Classes e Métodos Abstratos


As classes abstratas possuem características que as diferem das demais: (i) elas não podem ser
instanciadas, isto é, não podem ser criados objetos dessas classes; e (ii) se a classe contém um método
abstrato, ela obrigatoriamente precisa ser abstrata. Além disso, classes filhas que herdam uma classe
abstrata precisam implementar os métodos abstratos da classe pai.
Para indicar que uma classe é abstrata, basta adicionar a palavra reservada abstract na frente da
declaração da classe, como mostra a classe Bebida na Figura 24. Já um método abstrato é identificado
também pela palavra abstract na frente da sua declaração e não pode ser implementado, como
vemos no calculaCaloria() da classe Bebida. No diagrama de classe, ambos são identificados pelo uso
dos nomes em itálico.

FIGURA 24 Classe Bebida, Refrigerante e Suco


Exercício 142. Mega Sena e Quina
Construa as classes em PHP para o diagrama a seguir. Implemente os métodos sugeridos de cada classe.
Exercício 143. Animais
Desenvolva soluções para os problemas a seguir utilizando a programação PHP. Para ambos, você deverá
apresentar uma página PHP que tratará a resolução do problema, a execução e a interação com o usuário
(entrada e saída de valores). Implemente o modelo, onde:
• as classes Animal, Passaro e Mamifero são abstratas;
• método qualFamilia() retorna se é um pássaro ou um mamífero;
• método quemEh() retorna qual animal é o objeto;
• na página teste.php, crie um array com 10 animais que serão instanciados como: papagaio, pardal, cachorro,
baleia, leao. Na sequência, imprima os 10 animais criados informando qual animal é e a qual família
pertence;

Exercício 144. Oficina de veículos


• Implemente o modelo, onde:
• a classe Veiculo é abstrata;
• na classe Oficina, o método manutencao(Veiculo v) recebe como parâmetro um objeto do tipo veículo e
dentro dele chama os métodos definidos na classe veículo: listarVerificacoes(); ajustar(); limpar(); e, se
for automóvel, chama mudarOleo()

Exercício 145. Mário


• Desenvolva as classes PHP do diagrama a seguir:
Exercício 146. Estojo
• Dado o diagrama de classes, construa uma página teste.php na qual você irá:
• criar duas canetas Bic, uma na cor vermelha e outra na cor preta, e colocá-las no estojo 1;
• criar um lápis HB e uma borracha, e colocá-los no estojo 2;
• pegar (sem tirar) a borracha do estojo 2, e colocá-la no estojo 1.
Pergunta: Conforme o diagrama, é possível a borracha estar em dois estojos?
2.3.2 Sobreescrita
A sobreescrita é uma característica comum a classes filhas. Ela ocorre quando um método da classe
pai é reimplementado na classe filha. Veja o exemplo da Figura 25. Nele, a classe Moradia possui
dois métodos: __construct() e calculaGastoMes(). Já a classe Apartamento possui getCondominio(),
setCondominio() e calculaGastoMes().

FIGURA 25 Classe Moradia e Apartamento


Se instanciarmos um objeto da classe Moradia e solicitarmos a execução do método calculaGastoMes(), ele
será chamado da classe Moradia. Entretanto, se instanciarmos um objeto da classe Apartamento, o construtor
chamado será da classe Moradia, enquanto a execução do método calculaGastoMes() será da classe
Apartamento.
2.4 Interface e realização
A interface é uma estrutura que não possui atributos nem codificação, mas apenas os nomes dos métodos (e
seus parâmetros), os quais devem ser públicos. Logo, não há como instanciar um objeto, pois a interface não é
uma classe. Isso permite uma padronização de nomes, a qual deve ser obedecida pelas classes que se
relacionam com ela. O relacionamento entre uma interface e uma classe é chamado de realização, e,
diferentemente da herança, uma classe pode realizar várias interfaces. No diagrama de classes, a interface é
representada de forma similar a uma classe, entretanto possui uma indicação de estereótipo <<interface > >; e a
realização é indicada por uma linha tracejada com um triângulo aberto apontando para a interface a ser
realizada. Já no PHP, a interface é indicada pela palavra reservada interface na sua declaração, e a realização é
definida pela palavra implements na classe filha.
A Figura 26 ilustra o exemplo de uso da interface Espetaculo, que exige a implementação do método
exibir(). Logo, as classes Teatro e Cinema devem implementá-lo, uma vez que elas posuem uma realização
com a interface.

FIGURA 26 Interface Espetáculo e classes Teatro e Cinema


Exercício 147. Roupa
Note que o modelo abaixo está implementado parcialmente. Apenas as interfaces Cima e Baixo, e as classes
Roupa e Camiseta estão preenchidas. Determine quais atributos e métodos devem conter as classes Blusa,
Vestido e Saia, e as implemente.
2.5 Classes e métodos finais
As classes e os métodos defidos como final não possibilitam a sua herança ou sobreescrita, respectivamente.
Para defini-los, é utilizada a palavra reservada final na frente da declaração da classe ou método. A Figura
27 apresenta a classe final Circulo, que contém dois métodos finais: calculaArea() e calculaDiametro(). Nesse
caso, em particular, por a classe ser final, nenhum dos métodos poderia ser reimplementado. Entretanto, ainda
que fosse uma classe não final, os métodos finais não poderiam ser sobreescritos.
FIGURA 27 Classe Circulo
Na classe, ainda há um exemplo de um atributo declarado como constante, isto é, que o valor
atribuído não pode ser modificado. Os atributos constantes são acessados pela palavra reservada
self::, enquanto os demais atributos são acessados por $this- > .
Observação: Não há como definir atributos final, uma vez que a possibilidade de um atributo não
ser acessível pelas classes filhas já pode ser definida pela visibilidade privada. Além disso, não é
possível redefinir a visibilidade de um atributo.
Exercício 148. Aluno médio ou superior
Construa as classes em PHP para o diagrama a seguir. O método situação deve retornar
verdadeiro se o aluno tiver a sua média igual ou superior à estabelecida, e se a frequência for igual
ou superior à estabelecida na classe Aluno. A nota média para o AlunoMedio é 7, enquanto do
AlunoSuperior é 5; ambas são estabelecidas nos seus construtores.

Exercício 149. Equipamento


Construa as classes em PHP para o diagrama a seguir. Implemente os métodos de cada classe:

Exercício 150. Estabelecimento


Implemente o diagrama de classes, considerando as observações:
Desde janeiro de 2013, os estabelecimentos de entretenimento começaram a ser mais exigidos
quanto à capacidade máxima de pessoas que os frequentam simultaneamente. Isso visa a melhores
condições de segurança e funcionamento correto. Sabendo disso, você foi contratado para adequar
um sistema de contabilização de convidados em eventos realizados nos diversos estabelecimentos.
Por regra geral, todo estabelecimento tem a lotação máxima (capacidade máxima de pessoas que
podem entrar) e a lotação atual (quantas pessoas há no momento). Toda vez que se cria um novo
estabelecimento, sua lotação máxima deve ser definida. Quando entra um novo convidado, é
necessário verificar se a capacidade máxima não foi excedida, impedindo ou possibilidando a
entrada (retornando falso ou verdadeiro). Ao sair um convidado, deve-se remover uma unidade da
lotação atual (impedindo-a de ser uma quantidade negativa). As casas noturnas têm sua capacidade
máxima estabelecida na sua construção. Os cinemas possuem capacidade padrão de 80 pessoas. Os
parques têm quantidade ilimitada de pessoas.
Exercício 151. Turma da Mônica
Dada a codificação abaixo, desenvolva o diagrama de classes que o represente:
2.6 Atributos e métodos estáticos
Para compreender o funcionamento dos atributos e métodos estáticos, é necessário retomar o funcionamento
das classes e objetos tradicionais. Toda vez que um objeto é instanciado, os atributos deste são exclusivos a ele.
Se um outro objeto da mesma classe for instanciado, novas posições da memória serão alocadas para armazenar
as informações. Sendo assim, não há compartilhamento ou interferência dos dados entre esses dois objetos,
embora sejam de uma mesma classe. Portanto, seus atributos são chamados de atributos do objeto.
Quando definimos um atributo estático, há a criação de um atributo da classe. Ou seja, se o valor desse
atributo for modificado por algum objeto, automaticamente ele será modificado nos demais objetos que estão
na mesma página em execução. Isso significa que internamente há um compartilhamento desse dado. Os
atributos estáticos são definidos pela palavra static e acessados na classe também por self::.
Os métodos estáticos, consequentemente, são chamados de métodos da classe. Como diferencial, é possível
acessá-los sem a necessidade de instanciar um objeto, bastando informar o nome da classe, por exemplo:
classe::metodo(). Para declará-los, também é necessário o uso da palavra static. Veja a Figura 28, que mostra a
classe Torcedor, a qual possui o atributo estático total, e o método estático getTotal.
Exercício 152. Guri ou guria
FIGURA 28 Classe Torcedor
A partir do diagrama de classes a seguir, faça o que se pede:
a. Se você for um guri:
– Implemente as classes e interfaces necessárias para o funcionamento da classe Guri.
– Responda: quais métodos são necessários incluir na classe Homem e Guri?
b. Se você for uma guria:
– Implemente as classes e interfaces necessárias para o funcionamento da classe Guria.
– Responda: quais métodos são necessários incluir na classe Mulher e Guria?
c. Ao instanciar uma nova Pessoa (__construct), a quantidade deve ser incrementada em 1; e, ao destruir o
objeto (__destruct), a quantidade deve ser decrementada em 1.
Exercício 153. Animais
A partir do diagrama de classes a seguir, faça o que se pede:
2.7 Cookies e sessions
Os cookies e as sessions já foram apresentados na seção 1.7 Cookies e Sessions. Para utilizá-los na
orientação a objetos, basta implementá-los dentro dos métodos das classes. Na Figura 29, temos um
exemplo de personalização de página, no qual o usuário pode selecionar a cor de fundo desejada. Tal
informação é armazenada em um cookie.

FIGURA 29 Cor de fundo


Para combinar o uso desse cookie com a orientação a objetos, é importante perceber as
características do problema proposto. Note que, nesse caso, a cor de fundo é armazenada em um
cookie único, não havendo necessidade de armazenar a cor escolhida por usuário ou situação
diferente. Logo, utilizamos um método estático.
Exercício 154. Notícias por estado
O site a seguir permite que o usuário escolha o estado do qual deseja visualizar as notícias,
exibindo-as na tela. O estado escolhido tem de ser armazenado por 10 dias. Se ele entrar antes desse
período, as notícias aparecerão automaticamente, e o período deve ser renovado.

Exercício 155. Idiomas


O site a seguir permite que o usuário escolha o idioma em que deseja visualizar as páginas do site.
Essa escolha deverá ser armazenada por 1 hora. Ao escolher o idioma, todos os rótulos e mensagens
precisam aparecer no idioma desejado.
Exercício 156. Previsão do tempo
O site a seguir mostra a previsão do tempo de uma cidade, apenas se ela já foi escolhida
previamente. É necessário que o armazenamento do código da cidade dure até o navegador ser
encerrado. Para cada cidade, há um código de correspondência. A previsão do tempo é incluída por
meio de um widget disponibilizado pelo site www.climatempo.com.br.

Exercício 157. Site com cliente, vendedor e fornecedor


Uma determinada loja virtual tem acesso restrito a três tipos de usuários: cliente, vendedor e
fornecedor. Os três usuários acessam o sistema mediante um formulário único, que contém os
campos de “login”, “senha” e um botão de submissão. Desenvolva a página PHP que recebe os
dados desse formulário, e, conforme o tipo de usuário, redirecione-o à página de acesso restrito
correspondente. Veja os dados adicionais:
Lembre-se de que os usuários não devem acessar páginas de outros tipos de usuário. As páginas
também não podem ser acessadas se o login ou a senha estiverem incorretos.
Exercício 158. Caloria
Construa as classes em PHP para o diagrama a seguir. Crie uma session que armazenará as
calorias. Cada vez que se joga futebol, é necessário perder 200 calorias. Cada vez que come um bolo
de chocolate, engorda-se 450 calorias; e, se comer bolo de laranja, 350. Ao final, utilize a página
index.php para testar sua resposta.

Exercício 159. Responda se puder


O site a seguir consiste em um jogo de perguntas e respostas, no qual, a cada resposta correta, a pessoa
muda para o próximo nível. Se o participante errar, ele permanece naquele nível até acertar a resposta. Para
isso, cada jogador deve se identificar com o seu e-mail e senha. Para estar correto, a senha deve ser igual ao e-
mail antes do arroba, por exemplo, para o joao@gmail.com, a senha deverá ser joao. A página responda.php e
perguntas.php é de acesso restrito apenas para usuários autorizados. Elabore a(s) classe(s), os método(s) e
atributo(s) que forem adequados.
Exercício 160. Brinquedolândia
O Brinquedolândia é um site que oferece diversos brinquedos para serem comprados pelos seus clientes.
Cada vez que o usuário clica em “Comprar”, adiciona 1 item ao carrinho e exibe a página “carrinho.php”. Ele
pode adicionar quantos brinquedos quiser, pois, cada vez que clica em comprar, é adicionada mais uma unidade
do produto. Ainda, é possível remover uma mercadoria ou esvaziar todo o carrinho. Elabore a(s) classe(s), os
método(s) e atributo(s) que forem adequados.
2.8 Dependência
A dependência é uma relação mais fraca. Isso significa que não é gerado um novo atributo à classe. Entretanto,
a classe dependente faz uso de outra na implementação de um ou mais métodos; para isso, um objeto é
instanciado apenas dentro do escopo desse método.
Neste livro, usaremos a dependência para representar o relacionamento de uma classe com manipulação de
arquivos e conexão com o banco de dados. Para exemplificar, a Figura 30 mostra o diagrama de classes com
carro e o banco de dados. Veja que a dependência é representada por uma linha tracejada, cuja seta aponta para
a classe em que há a dependência. Nesse caso, a classe carro tem método salva(), que usa a classe de banco de
dados.

FIGURA 30 Classe Carro e BD


A implementação de classes usando dependência é apresentada nas seções a seguir.

2.9 Arquivos
Nesta seção, veremos como manipular arquivos por meio da orientação a objetos e da utilização das funções
vistas em 1.8.2, Gerenciamento de Arquivos, e 1.8.3, Manipulação de Arquivos Texto.

2.9.1 Gerenciamento de Arquivos


Utilizando os conhecimentos já vistos, vamos elaborar a classe GerenciaArquivo com várias
funcionalidades que usaremos nos exercícios. Conforme Figura 31, ela é final, impedindo que
nenhuma outra classe a sobreescreva. Os métodos implementados são: renomear, duplicar, deletar e
mover.
.
FIGURA 31 Classe Gerencia Arquivo
Exercício 161. Upload de arquivos (classe GerenciaArquivo)
Considerando a classe GerenciaArquivo, adicione o método upload(). Ele deve receber o nome de
onde o arquivo está salvo temporariamente e o local no qual o arquivo deverá ser salvo.
Exercício 162. Leitura de diretório (classe GerenciaArquivo)
Considerando a classe GerenciaArquivo, adicione o método lerDiretorio(). Ele precisa receber o
nome do diretório a ser lido, e como deve ser a ordenação para exibição dos arquivos e das pastas
nele contidos. A ordenação será por nome, extensão ou tamanho; de forma ascendente ou
descendente.

Exercício 163. Upload de arquivos JPG


Considerando a classe GerenciaArquivo, crie a classe UploadJPG. Implemente o método upload(),
que permitirá que apenas arquivos com extensão JPG e JPEG sejam salvos.
Exercício 164. Upload de arquivos com nomes sequenciais
Considerando a classe GerenciaArquivo, crie a classe UploadSequencial. Implemente o método upload(),
que salvará arquivos, cujos nomes devem ser números sequenciais, mantendo a extensão original. É necessário
que os arquivos sejam armazenados no diretório “sequencia”.

Exercício 165. Upload de arquivos com nomes do formulário


Construa um formulário que informe um nome e um arquivo. Ao submetê-lo, chame o método upload da
classe UploadFormulario, que irá salvar o arquivo enviado com o nome informado, mantendo a extensão
original.
2.9.2 Manipulação de Arquivos Texto
Para ler e escrever os arquivos textos, também definiremos uma classe padrão, na Figura 32. Isso
facilita o desenvolvimento dos exercícios a seguir. A classe Arquivo possui dois atributos: filename
(nome do arquivo texto) e handle (ponteiro do arquivo texto após ser aberto). A abertura do arquivo
ocorre no construtor da classe, portanto, é nele que informaremos o nome do arquivo e o modo de
abertura. Os métodos ler() e escrever() chamam as funções fread() e fwrite(), respectivamente. Por
fim, o fechamento do arquivo é realizado automaticamente pelo destrutor da classe.
FIGURA 32 Classe Arquivo

Exercício 166. Quantidade de flores


Dado o diagrama de classes a seguir, implemente a classe Flor e a página flores.php. O método
somaQuantidade lê o arquivo texto contendo o nome das flores e exibe uma tabela ordenada
alfabeticamente com o nome da flor e a quantidade de ocorrências. Considere que a classe Arquivo já
está implementada.
Exercício 167. Usuários
Implemente o diagrama de classes a seguir considerando que o método adicionaUsuario() deve
armazenar novos usuários no arquivo usuários.txt, considerando que não pode haver logins
repetidos e a senha precisa ser criptografada com a função md5().

Exercício 168. Cadastro de produtos


Implemente as páginas a seguir, considerando o protótipo de tela e o diagrama de classes fornecido.
Exercício 169. Disciplinas
Implemente as páginas a seguir, considerando o protótipo de tela e o diagrama de classes fornecido. Você
precisa ler o arquivo disciplinas.txt e, então, exibir a tabela com os nomes dos professores e disciplinas
organizados alfabeticamente.
Exercício 170. Voto
Com base nos diagramas de codificações a seguir, construa as páginas voto.php, registravoto.php e
resultado.php; e a classe Voto.

2.10 Banco de dados MySQL


Na seção 1.9, Banco de Dados MySQL, conhecemos as funções para realizar operações com o banco
de dados MySQL. Agora, vamos utilizar essas funções para criar uma classe que servirá de apoio nos
exercícios a seguir. Conforme a Figura 33, inicialmente definiremos quatro constantes com os dados
para a conexão: host (servidor), dbname (nome do banco de dados), user (usuário) e password
(senha). Em seguida, temos a classe BD, com o atributo conexao, que será responsável por estabelecer
e manter a conexão entre o servidor web e o de banco de dados. Além disso, há quatro métodos:
__construct (faz a conexão), consultar (retorna o resultado das consultas), alterar (realiza a inserção, a
alteração e a exclusão) e __destruct (encerra as conexões existentes).

FIGURA 33 Classe BD
Exercício 171. Cadastro de livros
Conforme o formulário e a tabela a seguir, crie a página formLivro.html contendo o formulário HTML, e a
página insereLivro.php para inserir os dados do formulário na tabela Livro. Considere que o atributo idlivro, da
tabela Livro, tem a propriedade de autoincremento.
Exercício 172. Cadastro de computador
Conforme o formulário e a tabela a seguir, crie a página formComputador.html contendo o formulário
HTML, e a página insereComputador.php para inserir os dados do formulário na tabela Computador.

Exercício 173. Musicais


Em PHP, crie um cadastro completo para musicais, com o nome, o local e a data do show.
2.11 MVC
A arquitetura de desenvolvimento de sistemas Modelo-Visão-Controle (Model-View-Control, MVC)
tem como objetivo separar a programação em três camadas. A camada modelo representa as
entidades e suas propriedades, logo, consiste basicamente em ser uma classe com atributos privados
e seus respectivos gets e sets. A camada de visão é responsável pela apresentação visual, isto é, o
leiaute e as saídas de tela. Já a estrutura lógica e de persistência de dados é realizada pela camada de
controle. No caso do PHP, a camada de modelo e controle são representadas por classes, enquanto a
visão contém as tags do HTML e instancia os objetos da camada de controle e modelo, a fim de
receber e enviar os dados.
O MVC pode ser encontrado em diversos frameworks de desenvolvimento de sistemas. Neste
livro, utilizaremos a abordagem conforme o exemplo a seguir. Na Figura 34, temos a classe abstrata
Controle, criada a fim de padronizar os métodos mínimos a serem implementados. Note que há os
métodos protegidos: selecionarUm, selecionarTodos, inserir, alterar e deletar. Estes só poderão ser
acessados por meio do método público controleAcao. Dessa forma, aumentamos o encapsulamento
da classe, permitindo o acesso externo por um único método. Ainda, todas as classes de controle
deverão herdar a classe.
FIGURA 34 Classe abstrata Controle
Na Figura 35, temos um exemplo completo de MVC, que representa um cadastro de Ingredientes.
Note que há a classe abstrata Controle, herdada pela classe ControleIngrediente (além de haver uma
dependência com o banco de dados). Já a classe Ingrediente é o modelo, contendo os atributos e os
métodos de gets e sets. Por fim, há duas páginas que representam a camada de visão:
listaIngredientes e formIngredientes.
Exercício 174. País

FIGURA 35 Exemplo de MVC de Ingredientes


Em PHP, crie um cadastro completo para países.
Exercício 175. Videogame
Em PHP, crie um cadastro completo para jogos de videogame, com nome, plataforma e data de
lançamento.
Gabarito do Capítulo 2
Exercício 123. Classes
a) Aluno.class.php

b) Livro.class.php

c) Carro.class.php

d) Conta.class.php

Exercício 124. Métodos


a) Adulto.class.php
b) Televisao.class.php

Exercício 125. Gets e sets


a) Empresa.class.php
b) Tripulante.class.php

c) Aeroporto.class.php

d) Voo.class.php
Exercício 126. Calcule a área
a) Quadrado.class.php

b) Retangulo.class.php
c) Losango.class.php

d) Triangulo.class.php
Exercício 127. Retângulo
retangulo.php

Exercício 128. Sexo e idade


sexoidade.php
Pessoa.class.php

Exercício 129. Sequência


Sequencia.php
Sequencia.class.php
Exercício 130. Palavra
Palavra.class.php
letras.php
pintar.php
palavra.php
Exercício 131. Sequência com tabelas
SequenciaPalavra.class.php
palavra.php
Exercício 132. Calendário
Calendario.class.php
Exercício 133. Lista de praias
ListaPraias.class.php
Exercício 134. Classes e relacionamentos
a) Fatorial.class.php

Probabilidade.class.php

b) Time.class.php
Jogador.class.php

Exercício 135. Amigos


Pessoa.class.php

teste.php
Exercício 136. MP3
Musica.class.php

Mp3.class.php
Exercício 137. Livro
Autor.class.php

Editora.class.php
Livro.class.php
Exercício 138. SMS
Operadora.class.php

Proprietario.class.php

Telefone.class.php
Mp3.class.php
Exercício 137. Livro
Autor.class.php

Editora.class.php
Livro.class.php
Exercício 138. SMS
Operadora.class.php

Proprietario.class.php

Telefone.class.php
SMS.class.php
teste.php
Exercício 139. Cidade, estado e país
Cidade.class.php
Estado.class.php

Pais.class.php
Exercício 140. Gosto musical
Gosto.class.php
Exercício 141. Classes e relacionamentos
a) Pessoa.class.php

Cliente.class.php

b) Empregado.class.php
Tecnico.class.php

Analista.class.php

Exercício 142. Mega Sena e Quina


Loteria.class.php

MegaSena.class.php

Quina.class.php
Exercício 143. Animais
Animal.class.php

Passaro.class.php

Mamifero.class.php

Pardal.class.php

Papagaio.class.php
Baleia.class.php

Cachorro.class.php

Leao.class.php

teste.php
Exercício 144. Oficina de veículos
Veiculo.class.php

Bicicleta.class.php

Automovel.class.php
Oficina.class.php

Exercício 145. Mário


Personagem.class.php
Mario.class.php

Yoshi.class.php

Jogo.class.php
Exercício 146. Estojo
Estojo.class.php

CoisaDeEscrever.class.php
Lapis.class.php

Lapiseira.class.php

CoisaDeEscrever.class.php

CoisaDeApagar.class.php
Borracha.class.php

Corretivo.class.php

index.php
Exercício 147. Roupa
Blusa.class.php

Saia.class.php

Vestido.class.php

Exercício 148. Aluno médio ou superior


Aluno.class.php
AlunoMedio.class.php

AlunoSuperior.class.php

Exercício 149. Equipamento


Equipamento.class.php

Internet.interface.php
Wifi.interface.php

TresG.interface.php

Ligacao.interface.php

Torpedo.interface.php

TelefoneFixo.class.php
TelefoneCelular.class.php

Smartphone.class.php
Tablet.class.php

Notebook.class.php
Exercício 150. Estabelecimento
Convidado.interface.php

Estabelecimento.class.php

Parque.class.php
Cinema.class.php

CasaNoturna.class.php

Exercício 151. Turma da Mônica


Exercício 152. Guri ou guria
Feminina.interface.php

Masculino.interface.php

Jovem.interface.php

Pessoa.class.php
Mulher.class.php

Homem.class.php
Guria.class.php

Guri.class.php

Exercício 153. Animais


Animal.class.php
Voo.interface.php

Nado.interface.php

Mamifero.class.php

Oviparo.class.php
Gato.class.php

Cachorro.class.php

Baleia.class.php

Morcego.class.php
Pato.class.php

Pelicano.class.php
Exercício 154. Notícias por estado
Noticia.class.php

noticia.php

Exercício 155. Idiomas


Idioma.class.php
index.php

mudaidioma.php
cores.php

numeros.php

objetos.php
Exercício 156. Previsão do tempo
Cidade.class.php

tempo.php
mudatempo.php

Exercício 157. Site com cliente, vendedor e fornecedor


Pessoa.class.php
Restrita.class.php

index.php
processaForm.php

cliente.php

fornecedor.php
vendedor.php

erro.php

sair.php
Exercício 158. Caloria
Caloria.class.php

Comida.class.php

Exercicio.class.php

Futebol.class.php
Bolo.class.php

BoloDeChocolate.class.php

BoloDeLaranja.class.php

Exercício 159. Responda se puder


Pergunta.class.php
Restrita.class.php

index.php
verifica.php

responda.php
Exercício 160. Brinquedolândia
Brinquedo.class.php
loja.php

carrinho.php
Exercício 161. Upload de arquivos (classe GerenciaArquivo)
Exercício 162. Leitura de diretório (classe GerenciaArquivo)
Exercício 163. Upload de arquivos JPG
UploadJPG.class.php
Exercício 164. Upload de arquivos com nomes sequenciais
UploadSequencia.class.php

upload.php

Exercício 165. Upload de arquivos com nomes do formulário


UploadFormulario.class.php
arquivo.html

arquivo.php

Exercício 166. Quantidade de flores


Flor.class.php
flor.php

Exercício 167. Usuários


Usuario.class.php

Exercício 168. Cadastro de produtos


Produto.class.php
processaProduto.php

listaProduto.php

Exercício 169. Disciplinas


Disciplina.class.php
disciplina.php

Exercício 170. Voto


Voto.class.php
voto.php
registravoto.php

resultado.php

Exercício 171. Cadastro de livros


Livro.class.php
formLivro.html
insereLivro.php

Exercício 172. Cadastro de computador


Computador.class.php
formCadastro.html

insereComputador.php

Exercício 173. Musicais


Musical.class.php
listamusical.php

formmusical.php
Exercício 174. País
Pais.class.php

ControlePais.class.php
listaPaises.php
ormPaises.php
Exercício 175. Videogame
Game.class.php
ControleGame.class.php
listaGame.php
cadastro.php
CAPÍTULO TRÊS

Tópicos Avançados
Este capítulo traz conceitos encontrados em vários sites, como organizar e agrupar os dados a serem exibidos, o
uso de bibliotecas para geração de arquivos, bem como realizar buscas.
3.1 Paginação e tabulação
A paginação é um recurso encontrado com frequência, que, em vez de mostrar todos os itens em
uma única página, pode determinar a exibição de apenas uma quantidade fixa. A partir daí são
geradas páginas que exibirão os itens subsequentes.
Já a tabulação ocorre quando há o agrupamento dos itens por uma determinada categoria. Por
exemplo, em uma lista de músicas, pode-se agrupá-las por estilos musicais. Ambos os recursos
(paginação e tabulação) também podem ser utilizados concomitantes.
Exercício 176. Filmes
Construa uma página PHP que exiba o nome de dez filmes por página em ordem alfabética. As
informações estão armazenadas em uma tabela.

Exercício 177. Filmes com ordenação


Construa uma página PHP que exiba o nome de dez filmes por página. Crie dois links que
permitam reordenar os nomes dos filmes de forma ascendente e descendente. As informações estão
armazenadas em uma tabela.
Exercício 178. Galeria de imagens
Sabendo que um conjunto de imagens está organizado em um array, no qual a chave é o nome da
imagem e o valor é o título da imagem, desenvolva uma página de galeria de imagens. A página
deve exibir três imagens por linha e até duas linhas; se houver mais, deverá ser disponibilizada uma
paginação. As imagens precisam ser exibidas considerando a ordem alfabética por título.
Exercício 179. Praias
Desenvolva o código PHP necessário para a página a seguir:

Exercício 180. Horóscopo


Desenvolva o código PHP necessário para a página a seguir:

3.2 Bibliotecas
O PHP oferece diversas bibliotecas que permitem realizar processamentos mais sofisticados. Algumas já são
instaladas automaticamente, enquanto outras devem ser liberadas pelo uso do arquivo de configuração PHP.ini.
Entretanto, ainda há diversas contribuições de desenvolvedores, basta buscar na internet. Além disso, as
bibliotecas geralmente são desenvolvidas utilizando o paradigma de orientação a objetos. Nas seções seguintes,
você conhecerá bibliotecas responsáveis pela geração de gráficos, arquivos PDF e ZIP, além do envio de e-
mails e da manipulação de arquivos XML.

3.2.1 Gráficos
A biblioteca JPGraph permite a construção de diversos estilos de gráficos. Para isso, basta baixar por
meio do site (http://jpgraph.net/), descompactar e colocá-la no diretório no qual estão as demais
páginas PHP. Para ilustrar como funciona, vamos criar o gráfico sobre a quantidade de acessos ao
longo de uma semana, a partir dos dados ilustrados na Figura 36.
FIGURA 36 Exemplo de gráfico de acessos

Para gerar um gráfico de linha, é necessário instanciar um objeto da classe Graph e outro da classe
LinePlote. A partir disso, é necessário configurar o gráfico, estabelecendo os pontos que devem ser
marcados e o leiaute a ser seguido. Terminado isso, basta adicionar o objeto de LinePlote ao Graph e
chamar o método stroke() para gerar o gráfico. O código-fonte é apresentado na Figura 37.

FIGURA 37 Código-fonte de exemplo de gráfico de acessos


Os gráficos podem ser adicionados dentro de outra página web, para isso, é necessário utilizar a
tag <img>, em que o atributo src deve indicar a página PHP onde está o gráfico. Por fim, cuide para
que na página PHP, na qual o gráfico será gerado, não haja qualquer saída de tela antes da geração
de gráfico.
Exercício 181. Onde você se informa?
Considerando os dados de cada tabela, gere o gráfico ilustrado ao lado.
Exercício 182. Notas nas avaliações por homens e mulheres
Considerando os dados de cada tabela, gere o gráfico ilustrado ao lado.

Exercício 183. População por região brasileira


Considerando os dados de cada tabela, gere o gráfico ilustrado ao lado.
Exercício 184. Preferência de bebidas
Considerando os dados de cada tabela, gere o gráfico ilustrado ao lado.

3.2.2 PDF
O PHP dispõe de diversas bibliotecas para geração de arquivos PDF. A HTML2PDF
(http://html2pdf.fr/en/default) permite que, a partir de um arquivo HTML, seja gerado o PDF. Logo, ela não
requer conhecimentos extras, como configuração de margens ou fontes. Para a instalação, basta colocar os
arquivos baixados no diretório onde estão os demais arquivos PHP.
A Figura 38 mostra o exemplo em que há a combinação de PHP com HTML para a geração do PDF. Para
isso, inicialmente é preciso solicitar a saída do buffer pelo uso da função ob_start(); a partir daí podem ser
executadas as saídas de tela. Nesse caso, utilizamos o laço for para a geração de números de 1 a 10. Após, é
instanciado um objeto de classe HTML2PDF e, então, gerado o PDF por meio do método Output.

FIGURA 38 Exemplo de geração de arquivo PDF


Exercício 185. Imagem com legenda
Construa uma página PHP que gere um arquivo PDF contendo uma imagem e sua legenda.
Exercício 186. Ingressos de cinema
Construa uma página na qual o usuário seleciona as informações sobre a sessão de cinema da qual deseja
adquirir os ingressos. Ao submeter, um arquivo PDF deve ser exibido, gerando a quantidade de ingressos
solicitados para a sessão.

Exercício 187. Alunos por curso


Construa uma página que gere um arquivo PDF contendo o nome de alunos e seus respectivos cursos. Tais
informações devem ser obtidas pelo uso da tabela aluno.
3.2.3 ZIP
O PHP nativo dispõe de algumas bibliotecas para compactação de arquivos no formato ZIP,
entretanto, a maioria requer a liberação no arquivo de configuração PHP.INI. No exemplo da Figura
39, usaremos a ZipFile, cuja documentação pode ser obtida em http://br2.php.net/ziparchive.
Considere que os arquivos que serão compactados (Imagem.bmp e Texto.txt) encontram-se no
mesmo diretório do arquivo PHP. Para criar o arquivo compactado, é necessário instanciar um objeto
da classe zipfile, adicionar os arquivos e então solicitar a criação, utilizando o método file().

FIGURA 39 Exemplo de criação de arquivo zip


Exercício 188. Compactar um arquivo
Aproveite o formulário construído no exercício Exercício 106. Upload de arquivos. Ao submeter, você
precisa compactar o arquivo recebido e baixá-lo automaticamente.
Exercício 189. Compactar vários arquivos
Construa a página que solicite quantos arquivos deseja compactar. Ao submeter, um novo formulário deve
ser apresentado, mostrando a quantidade de campos de envio de arquivos selecionados previamente. Quando
enviado o formulário, você compacta os arquivos recebidos e disponibiliza um link para que o arquivo seja
baixado.
3.2.4 E-mail
O PHP oferece a função mail() para o envio de e-mails por meio das páginas. Entretanto, nem
sempre os servidores web permitem o envio usando essa função, uma vez que ela não requer a
autenticação e o uso de um serviço de e-mail. Por isso, é possível usar bibliotecas mais robustas,
como a PHPMailer (http://phpmailer.worxware.com/).
No exemplo da Figura 40, vamos fazer o envio de um e-mail a partir de uma conta do Gmail (veja
que a biblioteca também oferece exemplos para outros serviços de e-mail). Note que são várias as
informações a serem configuradas, como login, senha, host, porta, além da própria mensagem.
FIGURA 40 Exemplo de envio de e-mail
Exercício 190. Fale conosco
Construa a página de “Fale Conosco” de seu site, na qual os clientes informarão seu e-mail e a mensagem
que desejam enviar. Ao submeter, você deverá exibir na tela e enviar um e-mail para a empresa com a
respectiva mensagem.
Exercício 191. Fotos
Construa uma página na qual o usuário poderá escolher entre três imagens e solicitar que ela seja enviada
para o seu e-mail. Ao submeter, você deverá exibir na tela a mensagem de sucesso ou erro no envio, e mandar
um e-mail com a foto.

Exercício 192. E-mail para vários destinatários


Construa uma página na qual o usuário possa escolher para quais pessoas deseja enviar um e-mail de texto
padrão. Ao submeter, você deverá exibir na tela a mensagem de sucesso ou erro no envio, e mandar um e-mail
para os destinatários selecionados.
3.2.5 XML
Os arquivos XML permitem o armazenamento de dados, servindo como pequenas bases de dados e
permitindo a troca de informações entre sistemas. Para isso, basta conhecer sua estrutura, isto é,
como os dados estão organizados. A Figura 41 apresenta um exemplo de como ler as informações do
arquivo empresa.xml, que contém dados sobre uma empresa. Inicialmente, é necessário abrir o
arquivo XML, e, como resultado, teremos um objeto cuja estrutura será semelhante ao próprio
arquivo XML. Logo, basta navegar pelo objeto e obter as informações desejadas.

FIGURA 41 Exemplo de leitura de arquivo XML

Já na Figura 42, temos outro exemplo de como escrever em um arquivo XML já preenchido,
demonstrado por um cadastro de revistas. Novamente, será necessário abrir o arquivo XML e, então,
adicionar novos elementos no arquivo.
FIGURA 42 Exemplo de escrita de arquivo XML
Exercício 193. Exibindo as informações de um show
Considerando os dados contidos no arquivo show.xml, desenvolva a página show.php que exiba as
informações.

Exercício 194. Grupos da Copa do Mundo


A 1 fase da Copa do Mundo é realizada em grupos formados por 4 países. Tais informações foram
a

armazenadas em um arquivo copa.xml. Desenvolva a página grupos.php, que conterá um menu de tabulação
com os nomes dos grupos. Ao selecionar um deles, a página deverá exibir o nome dos países.
Exercício 195. Cadastro de produtos
Construa um formulário com os campos nome, preço e quantidade. Ao submetê-lo, a página PHP deverá
armazenar as informações no arquivo produto.xml.

3.3 Sistema de busca


Um mecanismo muito utilizado por sites web é a busca, que pode ser feita de duas formas: por meio de textos
ou de categorias. Ambas podem utilizar técnicas mais simples, pelo uso da procura por itens semelhantes; ou
com algoritmos sofisticados que consideram itens parcialmente similares.

3.3.1 Textual
É possível que a busca textual combine técnicas consultas em banco de dados e funções da
linguagem PHP. Nos bancos de dados, pode-se utilizar a consulta com o operador like, enquanto no
PHP é possível usar as funções substr_count(), str_replace(), levenshtein() e similar_text(). Como
exemplo da Figura 43, vamos observar um array com alguns nomes e verificar qual é o mais
parecido, usando a função levenshtein(). Quando essa função retorna o valor mais próximo a zero,
significa que as strings são mais semelhantes. Nesse caso, a string “José de Souza” tem como mais
próximo o nome “João de Souza”.

FIGURA 43 Exemplo de busca por similaridade de textos


Exercício 196. Notícias
Implemente um sistema de busca considerando notícias cadastradas em uma tabela específica. A busca será
feita levando em conta uma palavra ou um termo específico. A página precisa retornar todos os registros que
contenham o termo pesquisado no título ou no texto da notícia.

Exercício 197. Poemas


Baseado no sistema anterior, amplie o sistema de busca considerando agora a frequência de ocorrências de
cada palavra no texto, a fim de ranqueá-las.
Exercício 198. Letras de música
Baseado no sistema anterior, amplie o sistema de busca destacando o termo buscado, considerando as
ocorrências de cada palavra no texto, a fim de ranqueá-las.

3.3.2 Categorização
A categorização é um tipo de busca que analisa as propriedades de um item, e não o conteúdo
textual. Logo, aqui se verifica qual é o item que contém características mais semelhantes ao buscado,
podendo ser atribuídos pesos para características mais idênticas. Para isso, é necessário identificar
quais propriedades serão utilizadas e, então, organizá-las de forma sequencial, atribuindo números
inteiros para cada valor possível. Suponha que faremos uma busca de pessoas, cujas propriedades
observadas serão cor de olho e cabelo, e idade; e a variável de identificação será o nome. A idade já é
registrada como um valor inteiro, logo, vamos categorizar as cores de olho e cabelo, conforme
a Figura 44.

FIGURA 44 Tabela de Categorização

Agora, supondo que temos três pessoas:


• Ana, de 17 anos, loira e olhos azuis;
• Bruno, de 18 anos, cabelos e olhos castanhos;
• Cristiane, de 17 anos, cabelos e olhos castanhos.
Vamos buscar quem é mais parecido com as características de: idade 18, loiro e de olhos azuis.
Para isso, é necessário realizar o somatório da diferença de cada propriedade. Essa equação deve ser
repetida para cada elemento de nosso banco de dados (nesse caso, as três pessoas). Aquela que
apresentar o menor valor será a pessoa mais próxima aos parâmetros buscados. Na Figura 45, temos
o código PHP, que ilustra esse exemplo.
FIGURA 45 Exemplo de Busca de Pessoas por Categorização
Exercício 199. Intérprete
Imagine que você escutou uma música na rádio e não sabe o nome dela nem quem a canta. Vamos fazer um
sistema de busca que, baseado nas informações que o usuário preencheu, possa indicar quem é o intérprete.
Para implementação, utilize a técnica do vizinho mais próximo (raciocínio baseado em casos).

Exercício 200. Jogadores de futebol


Implemente uma página web que recebe pela URL o identificador de um jogador. Ao carregar a página, ela
deve exibir os dados do jogador e listar os nomes dos 3 jogadores com características mais semelhantes a ele.
Gabarito do Capítulo 3
Exercício 176. Filmes
filmes.php

Exercício 177. Filmes com ordenação


filmes.php
Exercício 178. Galeria de imagens
galeria.php
Exercício 179. Praias
praias.php

Exercício 180. Horóscopo


horoscopo.php
Exercício 181. Onde você se informa?

Exercício 182. Notas nas avaliações por homens e mulheres


Exercício 183. População por região brasileira

Exercício 184. Preferência de bebidas


Exercício 185. Imagem com legenda

Exercício 186. Ingressos de cinema


cinema.html
cinema.php

Exercício 187. Alunos por curso


Exercício 188. Compactar um arquivo
compactar.php

Exercício 189. Compactar vários arquivos


quantosarquivos.html
quantosarquivos.php

compactararquivos.php
Exercício 190. Fale conosco
faleconosco.html

faleconosco.php
Exercício 191. Fotos
Exercício 192. E-mail para vários destinatários
Exercício 193. Exibindo as informações de um show
Exercício 194. Grupos da copa do mundo
Exercício 195. Cadastro de produtos

Exercício 196. Notícias


Exercício 197. Poemas
Exercício 198. Letras de música
Exercício 199. Intérprete
Exercício 200. Jogadores de futebol

Você também pode gostar