apostila web php

129
L L ÓGICA ÓGICA DE DE P P ROGRAMAÇÃO ROGRAMAÇÃO

Upload: hermesknls

Post on 07-Feb-2016

263 views

Category:

Documents


1 download

DESCRIPTION

php

TRANSCRIPT

Page 1: Apostila Web Php

LLÓGICAÓGICA DEDE

PPROGRAMAÇÃOROGRAMAÇÃO

Page 2: Apostila Web Php

ÍNDICEÍNDICE

1............................................................................................................................INTRODUÇÃO2

2...............................................................................................................CONCEITOS GERAIS3

PROGRAMAÇÃO ESTRUTURADA 3DESENVOLVIMENTO TOP-DOWN 3MODULARIZAÇÃO 4ESTRUTURAS DE CONTROLE 4CONFIABILIDADE 4MANUTENIBILIDADE 4PSEUDOLINGUAGEM - PORTUGOL 5

3................................................................................................RACIOCÍNIO MATEMÁTICO5

4............................................................................................................................ALGORITMOS8

FLUXO DE CONTROLE EM ALGORITMOS 12CRIANDO ALGORITMOS 13IDENTIFICADORES 15VARIÁVEIS 15TIPOS BÁSICOS DE DADOS 16COMENTÁRIOS 17COMANDO DE ATRIBUIÇÃO 17OPERADORES ARITMÉTICOS 17OPERADORES RELACIONAIS 18OPERADORES LÓGICOS 18PRIORIDADE NA AVALIAÇÃO DE EXPRESSÕES 19COMANDOS DE ENTRADA E SAÍDA 19FUNÇÕES 20OPERAÇÕES COM STRINGS 20ESTRUTURA DE UM ALGORITMO 21ESTRUTURAS DE CONTROLE 21VETORES 2MATRIZES 4REGISTROS 9ARQUIVOS 12PROCEDIMENTOS E FUNÇÕES 16

Page 3: Apostila Web Php

LLÓGICAÓGICA DEDE P PROGRAMAÇÃOROGRAMAÇÃO

1.1. IINTRODUÇÃONTRODUÇÃO

Muitos anos se passaram desde os primórdios da história da computação, mas apesar de já termos vivido vários

paradigmas de programação, existe uma base de conhecimento que não mudou e não mudará nunca – a Lógica de Programação.

Faço uma associação direta da Lógica de Programação com o Raciocínio Matemático, onde o importante é a

interpretação de um problema e a utilização correta de uma fórmula, e não a sintaxe pré-definida da mesma. O saber da Lógica está

no “praticar”.

Não existem “fórmulas” em Informática, o que existe é o aperfeiçoamento de nossa forma de pensar e raciocinar

sobre um problema, podendo extrair do mesmo uma solução eficiente e eficaz, sob um determinado ângulo de visão. Assim,

verificamos que é preciso aprender a pensar sobre os problemas, extraindo deles o máximo de informações.

A solução que criamos para um determinado problema necessita ser exteriorizada e expressa numa linguagem

publicamente conhecida. Assim, utilizamos a lógica de programação para desenvolver nossas soluções e os algoritmos para

apresentar essas soluções ao mundo.

Venho acompanhando nos últimos anos vários livros de Algoritmos e Estruturas de Dados. Todos ensinam como

representamos estruturas de controle e atribuições, ou como declaramos variáveis, mas nenhum deles – que eu tenha lido até o

momento –, orientou o aluno na forma de pensar. Precisamos mais do que “fórmulas”, precisamos aprender a pensar.

Os princípios da programação estruturada surgidos no final da década de 60 – introduzidos por Dijkstra – levaram a

necessidade de se ter uma linguagem que implementasse essas idéias, já que as linguagens de época (FORTRAN, COBOL e

BASIC) não permitiam aplicar claramente as técnicas ensinadas. Assim, o professor Niklaus Wirth e seus colegas da Universidade

Técnica de Zurique (Suíça) desenvolveram, no início dos anos 70, a linguagem PASCAL – uma derivação da linguagem ALGOL

60, porém de implementação mais simples e com uma estrutura de dados mais poderosa. O nome Pascal foi uma homenagem a

Blaise Pascal, famoso matemático, que criou a calculadora baseada em discos de madeira, que foi a predecessora da calculadora de

mesa e serviu de inspiração para diversos computadores.

Assim, nossa apostila oferecerá, inicialmente, conceitos gerais sobre Programação. Posteriormente, vocês terão

exercícios de Raciocínio Matemático que lhes exercitarão o poder de PENSAR! Em seguida, apresentaremos como desenvolver

algoritmos de soluções para Sistemas. E por último, vamos conhecer a Linguagem Pascal, a fim de vermos nossos algoritmos

funcionando – ao vivo e à cores !

3

Page 4: Apostila Web Php

2.2. CCONCEITOSONCEITOS G GERAISERAIS

PROGRAMAÇÃO ESTRUTURADA

A Programação Estruturada pode ser entendida como uma forma de programar que visa facilitar a escrita,

entendimento, validação e manutenção de programas. Para Dijkstra, “a arte de programar consiste na arte de organizar e dominar

a complexidade”.

A Programação Estruturada procurar reduzir o nível de complexidade através de três níveis:

a) desenvolvimento do programa em diferentes fases por refinamento sucessivo (desenvolvimento top-down);

b) decomposição do programa total em módulos funcionais, organizados de preferência num sistema hierárquico;

c) uso de um número limitado de estruturas básicas de fluxo de controle dentro de cada módulo.

4

Page 5: Apostila Web Php

DESENVOLVIMENTO TOP-DOWN

Na Programação Estruturada, ao desenvolvermos um algoritmo, temos como objeto um produto final – o programa.

Todavia, para termos esta transição, passamos por várias fases, no sentido “cima para baixo”, onde cada fase é documentada e

principalmente obtida por “refinamento” da fase anterior, até chegarmos a um nível de detalhamento que permita implementar o

algoritmo diretamente na linguagem de programação.

MODULARIZAÇÃO

A solução final de um problema é obtida através de soluções de subproblemas, o que permite dividir o programa em

módulos com subfunções claramente delimitadas, que podem, inclusive, ser implementados separadamente, por diversos

programadores de uma equipe.

ESTRUTURAS DE CONTROLE

São representadas pela seqüência simples, o comando condicional e o comando repetitivo, e fornecem ao

programador um aumento da legibilidade e compreensão de cada módulo de programa. Assim, temos como uma das principais

normas da Programação Estruturada : não usar comandos de desvio (GOTO).

CONFIABILIDADE

Medimos a confiabilidade de um sistema através de sua resposta ao uso constante, no tocante a:

- não apresentar erros; e,

- corresponder às especificações.

Atualmente, a sociedade está totalmente dependente dos sistemas de computação. Assim, aumenta exponencialmente

a importância do nosso trabalho.

Nos fins dos anos 60, constatou-se que as sistemáticas usadas pelos programadores eram os grandes

responsáveis pela baixa confiabilidade dos programas. Como solução destes problemas, surgiu a Programação

Estruturada (PE).

MANUTENIBILIDADE

As revisões sofridas por um programa (releases) tanto para correção de erros quanto para mudanças de especificação,

são consideradas como manutenção de software.

Os programas devem passar por testes exaustivos de confiabilidade antes de serem colocados em produção. Falhas

nesta fase levam a altos níveis de manutenção, que conseqüentemente, levam a altos custos.

5

Page 6: Apostila Web Php

PSEUDOLINGUAGEM - PORTUGOL

Sabemos que ao desenvolver programas necessitamos de nossa criatividade, para que tenhamos soluções eficazes e

eficientes. Todavia, não podemos representar nossas soluções em algoritmos totalmente escritos em português. Em programação,

todas as vezes que executarmos um algoritmo a partir de um estado inicial x, devemos sempre obter o mesmo estado final y. Desta

forma, é fácil perceber que a linguagem natural, não formalizada, geraria ambigüidades.

Assim, temos o PORTUGOL, que é uma pseudolinguagem de programação (simbiose do Português com o ALGOL e

PASCAL), que permite pensarmos no problema e não na máquina que vai executar o algoritmo. Além disso, não perdemos a

flexibilidade e continuamos a ter a proximidade com a linguagem humana, facilitando, portanto, a interpretação.

3.3. RRACIOCÍNIOACIOCÍNIO M MATEMÁTICOATEMÁTICO

As crianças aprendem facilmente como adicionar e subtrair valores. Suas dificuldades começam no momento em que

elas se deparam com problemas e necessitam identificar quais operações trarão soluções para os mesmos.

Vejamos alguns exercícios de Raciocínio Matemático, que ajudarão a “exercitar” nosso cérebro. No final desta

apostila, vocês encontrarão o gabarito, mas não olhem antes de tentar resolvê-los. Todos serão corrigidos em sala de aula.

6

Page 7: Apostila Web Php

1. Há três suspeitos de um crime: o cozinheiro, a governanta e o mordomo. Sabe-se que o crime foi efetivamente cometido por

um ou por mais de um deles, já que podem ter agido individualmente ou não. Sabe-se, ainda que:

A) se o cozinheiro é inocente, então a governanta é culpada;

B) ou o mordomo é culpado ou a governanta é culpada, mas não os dois;

C) o mordomo não é inocente.

Logo:

(a) a governanta e o mordomo são os culpados

(b) o cozinheiro e o mordomo são os culpados

(c) somente a governanta é culpada

(d) somente o cozinheiro é inocente

(e) somente o mordomo é culpado.

2. Qual o número que completa a seqüência: 1, 3, 6, 10, ...

(a) 13

(b) 15

(c) 12

(d) 11

(e) 18

3. Um frasco contém um casal de melgas. As melgas reproduzem-se e o seu número dobra todos os dias. Em 50 dias o frasco

está cheio. Em que dia o frasco esteve meio cheio ?

(a) 25

(b) 24

(c) 26

(d) 49

(e) 2

4. Qual o número que completa a seqüência: 1, 1, 2, 3, 5, ...

(a) 5

7

Exercícios

Page 8: Apostila Web Php

(b) 6

(c) 7

(d) 8

(e) 9

5. Num concurso de saltos, Maria foi, simultaneamente, a 13ª melhor e 13ª pior. Quantas pessoas estavam em competição ?

(a) 13

(b) 25

(c) 26

(d) 27

(e) 28

6. Bruno é mais alto que Joaquim. Renato é mais baixo que o Bruno. Então, Joaquim é o mais alto dos três.

( ) Verdadeiro

( ) Falso

7. O preço de um produto foi reduzido em 20% numa liquidação. Qual deverá ser a percentagem de aumento do preço do mesmo

produto para que ele volte a ter o preço original ?

(a) 15%

(b) 20%

(c) 25%

(d) 30%

(e) 40%

Use a descrição abaixo para resolver os exercícios 8 e 9.

Chapeuzinho Vermelho ao entrar na floresta, perdeu a noção dos dias da semana. A Raposa e o Lobo Mau eram duas estranhas

criaturas que freqüentavam a floresta. A Raposa mentia às segundas, terças e quartas-feiras, e falava a verdade nos outros dias da

semana. O Lobo Mau mentia às quintas, sextas e sábados, mas falava a verdade nos outros dias da semana.

8. Um dia Chapeuzinho Vermelho encontrou a Raposa e o Lobo Mau descansando à sombra de uma árvore. Eles disseram:

Raposa: “Ontem foi um dos meus dias de mentir”

Lobo Mau: “Ontem foi um dos meus dias de mentir”

A partir dessas afirmações, Chapeuzinho Vermelho descobriu qual era o dia da semana. Qual era?

8

Page 9: Apostila Web Php

9. Em qual dia da semana é possível a Raposa fazer as seguintes afirmações?

Eu menti ontem.

Eu mentirei amanhã.

10. (ESAF) José quer ir ao cinema assistir ao filme “Fogo Contra Fogo”, mas não tem certeza se o mesmo está sendo exibido.

Seus amigos, Maria, Luis e Julio têm opiniões discordantes sobre se o filme está ou não em cartaz. Se Maria estiver certa,

então Julio está enganado. Se Julio estiver enganado, então Luís está enganado. Se Luis estiver enganado, então o filme não

está sendo exibido. Ora, ou o filme “Fogo conta Fogo” está sendo exibido, ou José não irá ao cinema. Verificou-se que Maria

está certa. Logo,.

(a) O filme “Fogo contra Fogo” está sendo exibido

(b) Luis e Julio não estão enganados

(c) Julio está enganado, mas Luis não.

(d) Luis está enganado, mas Julio não.

(e) José não irá ao cinema.

4.4. AALGORITMOSLGORITMOS

Segundo Wirth, “programas são formulações concretas de algoritmos abstratos, baseados em representações e

estruturas específicas de dados”.

De forma bem simples, um algoritmo pode ser definido como “um conjunto de passos lógicos, bem definidos, que

descreve a solução de um problema”.

Ao pensarmos na solução de um problema, encontramos ações imperativas que são expressas por

comandos. Os algoritmos não são aplicados apenas ao mundo da Informática; pelo contrário, usamos – até sem

perceber – algoritmos em todos os momentos de nossa vida. Uma receita de cozinha é claramente um algoritmo.

Veja um exemplo:

Faça um algoritmo para “Ir de casa para o trabalho de ônibus”

Solução 1

Algoritmo Trajeto_Casa_Trabalho_V1

início

9

Page 10: Apostila Web Php

Andar até o ponto de ônibus

Aguardar o ônibus

Ao avistar o ônibus correto, fazer sinal

Entrar no ônibus pela porta traseira

Pagar passagem

Escolher um assento e sentar

Quando chegar próximo do local a saltar, dar o sinal para descida

No ponto, descer do ônibus, pela porta dianteira

Andar até o trabalho

fim

Veja que resolvemos esse algoritmo em 9 passos, todavia se pedirmos que n pessoas resolva o mesmo problema,

provavelmente, teremos n respostas diferentes. Isto ocorre pois, normalmente, abstraímos um problema, de ângulos diferentes, com

maior ou menor riqueza de detalhes.

Por outro lado, devemos perceber que o algoritmo descrito revela uma situação perfeita, sem condicionais, sem

exceções. Assim como na nossa rotina é improvável termos situações perfeitas, essas exceções também ocorrem nos programas de

computador.

Vamos refazer este algoritmo de forma a introduzir algumas condições.

Solução 2

Algoritmo Trajeto_Casa_Trabalho_V2

início

1. Andar até o ponto de ônibus

2. Aguardar o ônibus

3. Quando avistar o ônibus correto, fazer sinal

se o ônibus não parar, então

Em pensamento, xingar o motorista

Reclamar para si que vai chegar atrasado

se estiver muito atrasado então

Pegar uma Van

senão

Voltar para o Passo 2

fim-se

senão

10

Page 11: Apostila Web Php

se Pessoa >= 65 anos então

Entrar pela porta dianteira

senão

Entrar pela porta traseira

Pagar passagem

se houver troco então

Aguardar troco

fim-se

fim-se

se houver lugar disponível então

Sentar

senão

Escolher o melhor lugar em pé e ali permanecer

fim-se

Quando chegar próximo do local a saltar, dar o sinal para descida

No ponto, descer do ônibus, pela porta dianteira

Andar até o trabalho

fim-se

fim

Com certeza, a brincadeira que fiz da condição “Se o ônibus não parar” deve ter levado vocês a pensarem em

inúmeras novas condições, como por exemplo: qual seria a sua reação, se num dia de chuva, o ônibus passasse por sobre uma poça e

lhe sujasse toda a roupa ?

Veja quão complexo pode se tornar um “simples” algoritmo. Devemos lembrar que detalhes são essenciais na

confecção de um algoritmo, todavia, eles devem estar de acordo com o contexto. Além disso, é importante que venhamos a relatar

apenas os detalhes relevantes.

Por exemplo, a solução 2 está apropriada para ensinarmos uma pessoa que não está acostumada a andar de ônibus.

Todavia, este algoritmo causaria problemas se estivéssemos programando um robô. Considerando esta situação, deveríamos ser

mais precisos no passo “Quando chegar próximo do local a saltar, dar o sinal de descida”. Nesse caso, deveríamos dizer “A x

metros do local a saltar, dar o sinal de descida” ou “Na altura x da Rua y ...”.

Assim, lembrem-se de usar o BOM SENSO!

11

Page 12: Apostila Web Php

Podemos pensar também num algoritmo como um “mecanismo” de transformação de entradas em saídas. Assim, um

algoritmo ao ser “executado”, receberá algumas entradas, que serão processadas e nos devolverá algumas saídas.

FLUXO DE CONTROLE EM ALGORITMOS

Um algoritmo é um texto estático, onde temos vários passos que são lidos e interpretados de cima para baixo. Para

que venhamos a obter o(s) resultado(s) deste algoritmo, necessitamos “executá-lo”, o que resulta em um processo dinâmico.

No fluxo de controle identificamos em cada passo da execução qual é o próximo comando a ser executado.

A compreensão da lógica de programação de um algoritmo está diretamente ligada a

compreensão de seu fluxo de controle. A partir de uma compreensão correta, podemos traçar as

diversas execuções possíveis de um algoritmo. Se testarmos todas essas possibilidades, e obtivermos

resultados corretos, podemos ter certeza de estar entregando um produto final confiável.

Os iniciantes no mundo da programação encontram alguma dificuldade em diminuir a

distância conceitual que separa a representação estática de um algoritmo do(s) processo(s) dinâmico(s)

de sua execução. É importante frisar que quando nos propomos a entender um algoritmo, lidamos

fisicamente com um texto, mas mentalmente temos processos.

CRIANDO ALGORITMOS

Toda linguagem é composta de sintaxe e semântica, onde a sintaxe corresponde à forma e a semântica corresponde ao

conteúdo.

Vocês devem aprender a sintaxe dos comandos, mas a principal preocupação deve ser de “como usar esses

comandos”.

12

Page 13: Apostila Web Php

Regras para criação de bons algoritmos

1. Use comentários com freqüência. Isto torna o algoritmo mais legível e facilita o entendimento da lógica

empregada. Seus algoritmos deverão ser lidos e entendidos por outras pessoas (e por você mesmo) de tal forma

que possam ser corrigidos e receber manutenção.

Obs: Não se esqueça de atualizar os comentários, em caso de manutenção. Pior do que um programa sem

comentários, é um programa com comentários errados.

2. Use comentários, também, no cabeçalho do algoritmo, incluindo, principalmente:

- descrição do que faz o algoritmo- autor- data de criação

3. Escolha nomes de variáveis significativos, todavia evite nomes muito longos.

Ex: Prefira SalBruto ou SalarioBruto ao invés de SB ou VAR1

Prefira TotAlunosAprovDireta ao invés de

TotalAlunosAprovacaoDireta

4. Destaque as palavras-chave das estruturas de controle e comandos com sublinhado.

Ex: se media >= 7 então...

senão...

fim-se

5. Utilize espaços e linhas em branco para melhorar a legibilidade.

6. Coloque apenas um comando por linha. Vários comandos em uma linha causa ilegibilidade e dificulta a

depuração.

7. Utilize parênteses para aumentar a legibilidade e prevenir-se de erros.

8. Use identação nos comandos de acordo com o nível que estejam, ou seja, alinhe comandos de mesmo nível e

desloque comandos de nível inferior.

Ex.:

iníciocomando 1;se condicao1 então

comando2;comando3;

senãocomando4;comando5;

fim-secomando6;

fim

13

Page 14: Apostila Web Php

Método para desenvolvimento de algoritmos

1. Faça uma leitura de todo o problema até o final, a fim de formar a primeira impressão. A seguir, releia o

problema e faça anotações sobre os pontos principais.

2. Verifique se o problema foi bem entendido. Questione, se preciso, ao autor da especificação sobre suas dúvidas.

Releia o problema quantas vezes for preciso para tentar entendê-lo.

3. Extraia do problema todas as suas saídas.

4. Extraia do problema todas as suas entradas.

5. Identifique qual é o processamento principal.

6. Verifique se será necessário algum valor intermediário que auxilie a transformação das entradas em saídas. Esta

etapa pode parecer obscura no início, mas com certeza no desenrolar do algoritmo, estes valores aparecerão

naturalmente.

7. Teste cada passo do algoritmo, com todos os seus caminhos para verificar se o processamento está gerando os

resultados esperados.

Crie valores de teste para submeter ao algoritmo.

8. Reveja o algoritmo, checando as boas normas de criação.

Conselho: Só tente conseguir o ótimo, depois de realizar o bom.

IDENTIFICADORES

As variáveis, funções e procedimentos que usamos em nossos algoritmos precisam receber um nome (rótulo). Estes

nome são chamados de Identificadores e possuem algumas regras de formação:

- O primeiro caractere deve ser, obrigatoriamente, uma letra.

- Do segundo caractere em diante são permitidos números e letras. O símbolo de underscore ( _ ) pode ser usado para separar

nomes compostos. Portanto, não são permitidos espaços, caracteres acentuados e símbolos especiais na composição do nome

de um identificador;

- Palavras reservadas (em inglês ou português) não podem ser usadas com identificadores. (Exemplo: begin, end, for, var, inicio,

fim, para, etc...)

- Não há distinção entre maiúsculo e minúsculo, na forma como os identificadores são escritos;

Exemplos de nomes de identificadores:

SalarioBruto

Preco_Unitario

BuscaValor

14

Page 15: Apostila Web Php

NOTA1

Nota1

VARIÁVEIS

Vocês sabem que os computadores possuem CPU e memória, certo ? Sim. A CPU (Unidade Central de

Processamento) é responsável pelo controle e processamento dos cálculos matemáticos e das resoluções de expressões lógicas.

Todavia, os dados que são usados num processamento precisam ser armazenados em algum lugar – este lugar é a memória principal.

Ela funciona como um “armário” que guarda nossos pertences. Todavia, como um armário, não podemos simplesmente ir

guardando nossos pertences sem nenhuma arrumação. Para isso, existem “caixas” na memória (posições de memória), que nos

permitem organizar essas informações. Essas caixas, conceitualmente recebem nomes e são conhecidas como variáveis.

Assim, a variável é o local da memória onde guardamos os dados e o nome da variável é um identificador conforme

definição anterior.

Exemplos de variáveis:

SalarioBruto

NomeFuncionario

Toda variável necessita ser declarada, ou seja, reserva-se um local da memória informando que tipo de dados residirão

ali. Assim, a sintaxe de declaração de uma variável é :

variável : tipo de dados ;

ou

variável1, variável2, ..., variáveln : tipo de dados ;

Exemplo:

Se declararmos as variáveis A, B e C da seguinte forma:

declare

A : inteiro;

B : caracter;

C : lógico;

estamos criando áreas na memória identificadas por A, B e C, que só poderão receber, respectivamente, valores

inteiros, alfanuméricos e lógicos (Verdadeiro ou Falso).

15

Page 16: Apostila Web Php

TIPOS BÁSICOS DE DADOS

Ao armazenarmos variáveis na memória do computador, precisamos dizer que tipo elas são, para que seja reservado o

espaço adequado, além de ser dado o trabalho correto a elas. Além dos tipos básicos de dados citados abaixo, podemos criar nossos

próprios tipos.

INTEIRO: qualquer número inteiro, negativo, nulo ou positivo

Ex.: -15, 0, 101

REAL: qualquer número real, negativo, nulo ou positivo

Ex.: -1, -0.5, 0, 5, 9.5

CARACTER: qualquer conjunto de caracteres alfanuméricos

Ex.: “AB”, “ 123”, “ A123” , “CASA”

LÓGICO: conjunto de valores ( FALSO ou VERDADEIRO )

COMENTÁRIOS

Comentários devem ser inseridos no algoritmo a fim de esclarecer o desenvolvimento do mesmo. Os comentários são

inseridos entre { e }.

{ Texto de comentário delimitado por chaves }

COMANDO DE ATRIBUIÇÃO

Ao criarmos uma variável, partimos do princípio que em algum momento ou vários momentos dentro do nosso

algoritmo, ela receberá valores, ou seja, armazenaremos dados na memória através de nossas variáveis.

Para atribuirmos um valor ou uma expressão a uma variável, utilizamos o comando de atribuição .

Assim, a sintaxe do comando é:

identificador expressão ;

Exemplo:

Salario 1000

Nome ‘Ana’

16

Page 17: Apostila Web Php

OPERADORES ARITMÉTICOS

É comum necessitarmos realizar cálculos matemáticos com as informações que estamos manipulando. Para isso, é

necessário sabermos qual a representação dos símbolos de operações matemáticas. Vejamos:

Operador Operação Exemplo

+ Adição 10 + 15

- Subtração 20 – 10

* Multiplicação 3 * 5

/ Divisão (onde o resultado será um

número real)

5 / 2 = 2,5

DIV Divisão (onde o resultado será um

número inteiro)

10 div 2 = 5

7 div 2 = 3

MOD Resto de uma divisão 7 mod 2 = 1

** ou exp(a, b) Exponenciação 5 ** 2 ou exp(5, 2)

OPERADORES RELACIONAIS

Além de operações matemáticas, é freqüente nossa necessidade em comparar informações. Por exemplo: Se média

for maior ou igual a 7. Para isso, utilizamos operadores relacionais.

Operador Relação

= Igualdade Diferente

> Maior que

ou >= Maior ou igual que

< Menor que

ou <= Menor ou igual que

OPERADORES LÓGICOS

É freqüente precisarmos analisar expressões lógicas, aquelas que só possuem dois valores

possíveis: Verdadeiro ou Falso. Os operadores usados em expressões lógicas são os Operadores Lógicos.

Veja:

17

Page 18: Apostila Web Php

Operador Relação

E (And) E lógico

Ou (Or) Ou lógico

Não (Not) Negação lógica

Ou-X (Xor) Ou ‘Exclusivo’

Veja a seguinte tabela para entender melhor os operadores lógicos.

P Q P e Q P ou Q P ou-X Q

F F F F F

F V F V V

V F F V V

V V V V F

PRIORIDADE NA AVALIAÇÃO DE EXPRESSÕES

1º Parênteses e funções (resolvidos da esquerda para a direita)

2º Multiplicação (*), Divisão ( / e div ) e Resto ( Mod )

(resolvidos da esquerda para a direita)

3º soma e subtração

4º Operadores relacionais: >, <, , , =,

5º Operador Lógico Não

6º Operador Lógico E

7º Operador Lógico Ou

COMANDOS DE ENTRADA E SAÍDA

Para atingirmos os objetivos de um algoritmo, necessitamos receber dados do mundo externo e precisamos

exteriorizar as informações produzidas. No momento do desenvolvimento de um algoritmo, não nos interessa saber se os dados

virão via teclado, ou pela leitura de um arquivo de dados ou por qualquer outro meio.

Para obtermos e exteriorizarmos esses dados, utilizamos os seguintes comandos de entrada e saída, LER, ESCREVER

e IMPRIMIR. O comando ler espera receber um determinado dado (sem importar a origem). O comando escrever mostra a

informação produzida no vídeo. O comando imprimir faz a impressão em papel da informação produzida.

Veja a sintaxe dos comandos:

ler (variável1, variável2, ... , variável n);

escrever (lista de constantes, variáveis e/ou expressões );

18

Page 19: Apostila Web Php

imprimir (lista de constantes, variáveis e/ou expressões );

Exemplos:

ler(numero1);

numero2 numero1 * 2;

escrever(‘O dobro do número é ‘, numero2);

imprimir(‘O triplo do número é ‘, numero1 * 3);

FUNÇÕES

Em toda linguagem vocês encontram funções primitivas que realizam operação básicas com os tipos de dados.

Nome da Função Descrição da Função Exemplo

raiz ( x ) Retorna a raiz quadrada de x A = raiz(25) A = 5

sqr ( x ) Retorna x elevado ao quadrado A = sqr(4) A = 16

abs ( x ) Retorna o valor absoluto de x A = abs(-15) A = 15

int ( x ) Retorna a parte inteira de x A = int(4,5) A = 4

OPERAÇÕES COM STRINGS

Nem só de números vive um programa, portanto, precisamos também poder manipular dados do

tipo string. Vejamos:

Nome da Função/Operador Descrição da Função Exemplo

+ concatenação (união) de strings A : string A = ‘cris’ + ‘tina’ A = ‘cristina’

len retorna o tamanho de uma string A : integer A = tamanho(‘ana’) A = 3

ord retorna o código ASCII1 de um caractere A : inteiro A = ord(‘A’) A = 65

chr retorna o caractere correspondente ao código ASCII recebido por parâmetro

A : string A = chr(66) A = ‘B’

ucase converte toda uma string para maiusculo A : string A = ucase(‘ana’) A = ‘ANA’

lcase converte toda uma string para minúsculo A : string

1 ASCII - American Standard Code for Information Interchange

19

Page 20: Apostila Web Php

A = lcase(‘ANA’) A = ‘ana’

pos retorna a posição de uma substring dentro de uma string

A : integer A = pos(‘asa’, ‘casa’) A = 2

substring retorna parte de uma string, a partir de uma determinada posição

A : stringA = substring(‘casa’, 2, 3) A = ‘asa’

ESTRUTURA DE UM ALGORITMO

declare< declaração de variáveis, constantes e tipos >

início< comandos >

fim

ESTRUTURAS DE CONTROLE

Blocos

Delimitam um conjunto de comandos com uma função bem definida.

início

<comandos>

fim

Seqüências Simples

Conjunto de comandos que serão executados numa seqüência linear de cima para baixo. Estes comandos podem

aparecer em qualquer estrutura de controle, agrupados ou não por blocos.

Ao final de cada comando é obrigatório a colocação de um ponto-e-vírgula ( ; ). Mais de um comando pode ser

colocado por linha, mas isso não é aconselhável. Um comando pode ocupar mais de uma linha. Nesse caso, o ponto-e-vírgula só

vai aparecer no final da última linha.

Veja a sintaxe:

comando 1;

comando 2;

início comando 3 ...

meio comando 3 ...

fim comando 3 ;

20

Page 21: Apostila Web Php

...

comando n;

Exemplo 1

Faça um algoritmo que leia dois números inteiros e mostre a soma deles.

Algoritmo SomaNumerosInteiros

declarenum1, num2, soma : inteiro;

inicioler (num1, num2);soma num1 + num2;escrever(‘A soma dos números é : ‘, soma);

fim

Exemplo 2

Faça um algoritmo que leia 3 nomes e mostre-os na ordem inversa de leitura

Obs: Veja como este algoritmo já apresenta mais detalhes.

Algoritmo LeituraNomes

declarenome1, nome2, nome3 : string;

inicioescrever (‘Entre com primeiro nome : ‘);ler (nome1);escrever (‘Entre com segundo nome : ‘);ler (nome2);escrever (‘Entre com terceiro nome : ‘);ler (nome3);

escrever (‘A ordem inversa dos nomes é ‘);escrever (nome3);escrever (nome2);escrever (nome1);

fim

Exemplo 3

Fazer um algoritmo que leia uma palavra e mostre a primeira letra dela.

Algoritmo PrimeiraLetra

declarepalavra, letra1 : caractere;

inicioescrever(‘Digite palavra : ‘ );ler(palavra);letra1 Substring(palavra, 1, 1);escrever(‘A primeira letra da palavra é : ‘ , letra1);

21

Page 22: Apostila Web Php

fim

Estruturas Condicionais

Quando uma ação para ser executada depender de uma inspeção ou teste, teremos uma alternativa simples ou

composta.

Sintaxe da Alternativa Simples:

se <condição> então

<comando 1>;<comando 2>;<comando n>;

fim-se;

Sintaxe da Alternativa Composta:

se <condição> então

<comando 1>;<comando 2>;<comando n>;

senão<comando 1>;<comando 2>;<comando m>;

fim-se;

onde: <condição> é qualquer expressão cujo resultado seja Falso ou Verdadeiro.

Exemplo:

se media >= 7 então

situacao ‘Aprovado’;

senão

situacao ‘Reprovado’;

fim-se

Estruturas de Repetição

Quando um conjunto de ações é executado repetidamente enquanto uma determinada condição permanece válida.

22

execução caso condição seja

verdadeira

execução caso condição seja

verdadeira

execução caso condição falsa

Page 23: Apostila Web Php

Para

Usamos a estrutura Para, quando precisamos repetir um conjunto de comandos um número pré-definido de vezes.

Utiliza uma variável de controle, que é incrementada em 1 unidade de um valor inicial até um valor final.

para varControle ValInicial até ValFinal faça

<comando 1>;<comando 2>;<comando n>;

fim-para;

Quando o programa encontra a instrução fim-para, incrementa a variável varControle em 1 unidade. Cada vez que o

programa passa pela linha de instrução para ..., ele testa se varControle é menor ou igual a ValFinal. Se não for, o comando é

abandonado.

Obs: O valor da variável varControle não pode ser alterado no interior da estrutura para...fim-para.

Exemplo:

para aux 1 até 10 faça

resultado 5 * aux;

fim-para

Enquanto

Utilizada quando não sabemos o número de repetições e quando possuímos uma expressão que deve ser avaliada para

que os comandos da estrutura sejam executados. Assim, enquanto o valor da <condição> for verdadeiro, as ações dos comandos são

executadas. Quando for falso, a estrutura é abandonada, passando a execução para a próxima linha após o comando. Se já da

primeira vez o resultado for falso, os comandos não são executados nenhuma vez.

enquanto <condição> faça

<comando 1>;<comando 2>;<comando n>;

fim-enquanto;

Exemplo:

aux 1;

23

execução enquanto a condição for

verdadeira

execução enquanto varControle for

menor ou igual a ValFinal

Page 24: Apostila Web Php

enquanto (aux <= 10) faça

resultado 5 * aux;

aux aux + 1;

fim-para

Repita ... Até que

Utilizada quando não sabemos o número de repetições e quando os comandos devem ser executados pelo menos uma

vez, antes da expressão ser avaliada. Assim, o programa entra na estrutura Repita...Até que e executa seus comandos pelo menos

uma vez. Ao chegar no fim da estrutura, a expressão será avaliada. Se o resultado da expressão for verdadeiro, então o comando é

abandonado.

repita

<comando 1>;<comando 2>;<comando n>;

até que <condição>;

Exemplo:

aux 1;

repita

resultado 5 * aux;

escrever resultado;

aux aux + 1;

até que (aux > 10);

Resultado do algoritmo: 5 10 15 20 25 30 35 40 45 50

Estrutura de Múltipla Escolha

Utilizada quando temos muitas possibilidades para uma determinada

situação, onde a aplicação da estrutura se...então...senão...fim-se, tornaria o algoritmo muito

complexo.

escolha <expressão>

caso valor1 : <comando 1>;caso valor2 : valor5 : <comando 2>;

...senão <comando n>;

fim-escolha;

24

É executado pelo menos uma vez

As opções podem apresentar valores individuais ou uma

faixa de valores.

Page 25: Apostila Web Php

Exemplo:

ler(Numero);escolha Numero

caso 1: Extenso ‘Um’;caso 2: Extenso ‘Dois’;caso 3: Extenso ‘Três’;caso 4: Extenso ‘Quatro’;caso 5: Extenso ‘Cinco’;caso 6: Extenso ‘Seis’;caso 7: Extenso ‘Sete’;caso 8: Extenso ‘Oito’;caso 9: Extenso ‘Nove’;senão: Extenso ‘Erro’;

fim-escolha;

VETORES

Os vetores são estruturas de dados que permitem o armazenamento de um conjunto de dados de mesmo tipo. Por este

motivo, são chamadas de estruturas homogêneas. Os vetores são unidimensionais, pois cada elemento do vetor é identificado por

um índice.

Similarmente, podemos definir vetores como posições de memória, identificadas por um mesmo nome,

individualizadas por índices e cujo conteúdo é de mesmo tipo.

Para acessarmos um elemento de um vetor, referimo-nos ao nome do vetor acompanhado pelo seu índice que virá

entre colchetes ( [ e ] ). Pense num prédio com 120 apartamentos. Para enviar uma correspondência a um determinado apartamento,

devemos colocar no endereço de destinatário, o número do prédio mais o número do apartamento. O

vetor funciona de forma similar.

Veja a sintaxe da declaração de um vetor:

Nome do vetor : vetor [ nº de elementos ] de <tipo básico do vetor >

Para fazermos referência a um elemento do vetor, colocamos:

Nome do vetor [ elemento ]

Cada elemento de um vetor é tratado como se fosse uma variável simples.

Exemplo:

Supondo que pedíssemos para criar um algoritmo para ler o nome de 5 pessoas, e mostrasse esses nomes na ordem

inversa de leitura. A princípio, vocês pensariam em cinco variáveis: nome1, nome2, nome3, nome4 e nome5.

25

Page 26: Apostila Web Php

Veja como ficaria a solução, nesse caso:

declarenome1, nome2, nome3, nome4, nome5 : caracter;

inícioescrever(‘Informe o nome de 5 pessoas: ‘);

ler(nome1);ler(nome2);ler(nome3);ler(nome4);ler(nome5);

escrever(‘Ordem Inversa de Leitura ‘);escrever(nome5);escrever(nome4);escrever(nome3);escrever(nome2);escrever(nome1);

fim

Assim, na memória teríamos ...

Nome1 Nome2 Nome3 Nome4 Nome5ANA PAULA CRISTINA GUSTAVO ANTONIO

Todavia, se alterássemos esse algoritmo para ler o nome de 100 pessoas, a

solução anterior se tornaria inviável. Para casos como este, podemos fazer uso de vetores. Se

tivéssemos criado 100 variáveis, teríamos que declarar e usar: nome1, nome2, nome3, ... , nome99,

nome100. Com o vetor passamos a ter: nome[1], nome[2], nome[3], nome[99], nome[100],

onde a declaração do vetor se limita à linha: nome : vetor[1..100] de caracter.

Veja que para todos os elementos nos referimos ao mesmo nome de vetor.

Assim, veja a solução do algoritmo anterior com o uso de vetores:

declarenome : vetor[5] de caracter;aux : inteiro;

iníciopara aux 1 até 5 faça

escrever (‘Informe o Nome ‘, aux);ler (nome[aux]);

fim-para;

escrever(‘Ordem Inversa de Leitura ‘);

para aux 5 até 1 façaescrever (nome[aux]);

fim-parafim

26

Page 27: Apostila Web Php

Veja a representação da memória:

Nome[1] Nome[2] Nome[3] Nome[4] Nome[5]ANA PAULA CRISTINA GUSTAVO ANTONIO

MATRIZES

As matrizes são estruturas de dados que permitem o armazenamento de um conjunto de dados de mesmo tipo, mas em

dimensões diferentes. Os vetores são unidimensionais, enquanto as matrizes podem ser bidimensionais (duas dimensões) ou

multidimensionais.

Similarmente podemos conceituar matrizes como um conjunto de dados referenciado por um mesmo nome e que

necessitam de mais de um índice para ter seus elementos individualizados.

Para fazer referência a um elemento da matriz serão necessários tantos índices quantas forem as dimensões da matriz.

Veja a sintaxe da declaração de uma matriz:

Nome da matriz : matriz [ li1: ls1, li2:ls2, ... , lin:lsn ] de <tipo básico da matriz >

onde:

li – limite inferior

ls – limite superior

li1: ls1, li2:ls2, ... , lin:lsn – são os limites dos intervalos de variação dos índices da matriz, onde cada par de limites está associado a um índice.

tipo – tipo a que pertencem todos os campos do conjunto.

Para fazermos referência a um elemento da matriz, colocamos:

Nome da matriz [ linha, coluna ]

O número de dimensões de uma matriz pode ser obtido pelo número de vírgulas (,) da declaração mais 1. O número

de elementos pode ser obtido através do produto do número de elementos de cada dimensão.

Obs: Quando você desejar percorrer uma matriz, linha por linha, crie uma estrutura de repetição, fixando a linha e

variando a coluna. Para percorrer uma matriz, coluna por coluna, fixe a coluna e varie a linha.

27

Page 28: Apostila Web Php

Vamos pensar numa estrutura onde as colunas representem os cinco dias úteis da semana, e as linhas representem as

três vendedoras de uma loja. Na interseção de cada linha x coluna, colocaremos o faturamento diário de cada vendedora.

( Segunda )COLUNA 1

( Terça )COLUNA 2

( Quarta )COLUNA 3

( Quinta )COLUNA 4

( Sexta )COLUNA 5

( SANDRA )LINHA 1 1050,00 950,00 1241,00 2145,00 1256,00

( VERA )LINHA 2 785,00 1540,00 1400,00 546,00 0,00

( MARIA )LINHA 3 1658,00 1245,00 1410,00 245,00 1546,00

A representação desta tabela em forma de matriz, seria:

VendasDiarias : matriz [ 3, 5 ] de real;

Indicando a declaração de uma matriz com 3 linhas e 5 colunas, cujos valores serão do tipo real.

Veja como ficaria o algoritmo para ler esses valores:

Algoritmo LeVendasDiarias;declare

VendasDiarias : matriz[3,5] de real;indLinha, indColuna : inteiro;

início

{ Variando o número de linhas - Vendedoras}para indLinha 1 até 3 faça

escrever (‘Vendedora :‘, indLinha);

{ Variando o número de colunas – Dias da Semana}para indColuna 1 até 5 faça

escrever (‘Faturamento do Dia : ‘, indColuna);ler (VendasDiarias[indLinha, indColuna]);

fim-para;fim-para;

fim

Poderíamos melhorar o algoritmo acima, trabalhando com um vetor que contivesse os nomes dos dias da semana e

das vendedoras. Assim, a comunicação do programa com o usuário ficaria mais clara. Veja:

Algoritmo LeVendasDiariasVersao2;declare

VendasDiarias : matriz[3,5] de real;Vendedoras : vetor[3] de caracter;DiasSemana : vetor[5] de caracter;indLinha, indColuna : inteiro;

28

Page 29: Apostila Web Php

início

Vendedoras[1] ‘Sandra’;Vendedoras[2] ‘Vera’;Vendedoras[3] ‘Maria’;

DiasSemana[1] ‘Segunda’;DiasSemana[2] ‘Terça’;DiasSemana[3] ‘Quarta’;DiasSemana[4] ‘Quinta’;DiasSemana[5] ‘Sexta’;

{ Variando o número de linhas - Vendedoras}para indLinha 1 até 3 faça

escrever (‘Vendedora : ‘, Vendedoras[indLinha]);

{ Variando o número de colunas – Dias da Semana}para indColuna 1 até 5 faça

escrever (‘Faturamento do Dia : ‘, DiasSemana[indColuna]);ler (VendasDiarias[indLinha, indColuna]);

fim-para;fim-para;

fim

Um algoritmo que apenas lê e nada faz com esses resultados, não serve para grande coisa, certo ?! Por isso, vamos

melhorar esse algoritmo e apresentar como resultado o faturamento diário de todas as vendedoras.

Algoritmo LeVendasDiariasVersao3;declare

VendasDiarias : matriz[3,5] de real;Vendedoras : vetor[3] de caracter;DiasSemana : vetor[5] de caracter;indLinha, indColuna : inteiro;FaturaDia : real;

início

Vendedoras[1] ‘Sandra’;Vendedoras[2] ‘Vera’;Vendedoras[3] ‘Maria’;

DiasSemana[1] ‘Segunda’;DiasSemana[2] ‘Terça’;DiasSemana[3] ‘Quarta’;DiasSemana[4] ‘Quinta’;DiasSemana[5] ‘Sexta’;

{ Variando o número de linhas – Vendedoras }para indLinha 1 até 3 faça

escrever (‘Vendedora : ‘, Vendedoras[indLinha]);

{ Variando o número de colunas – Dias da Semana}para indColuna 1 até 5 faça

29

Page 30: Apostila Web Php

escrever (‘Faturamento do Dia : ‘, DiasSemana[indColuna]);ler (VendasDiarias[indLinha, indColuna]);

fim-para;fim-para;

{ Vamos começar variando a coluna, para poder obter o faturamento de cada dia da semana }

para indColuna 1 até 5 faça{ A cada novo dia, a variável que recebe o faturamento é

zerada }FaturaDia 0;

{ Vamos variar a linha, para obter os valores faturados de cada vendedora }

para indLinha 1 até 3 façaFaturaDia FaturaDia + VendasDiarias[indLinha, indColuna];

fim-para

escrever(Faturamento de : ‘, DiasSemana[indColuna]);escrever(FaturaDia);

fim-para;

fim

Até agora, está fácil, certo ?! Então vamos complicar um pouquinho. Na matriz anterior, estamos controlando o

faturamento de apenas uma semana. Todavia, as vendedoras trabalham o mês todo. E o correto seria termos uma planilha para cada

semana do mês, que vamos considerar que sejam quatro semanas.

Exemplo:

A representação deste conjunto de planilhas em forma de matriz, seria:

VendasDiarias : matriz [ 3, 5, 4 ] de real;

30

SEMANA 4

( Segunda )COLUNA 1

( Terça )COLUNA 2

( Quarta )COLUNA 3

( Quinta )COLUNA 4

( Sexta )COLUNA 5

( SANDRA )LINHA 1 1050,00 950,00 1241,00 2145,00 1256,00

( VERA )LINHA 2 785,00 1540,00 1400,00 546,00 0,00

( MARIA )LINHA 3 1658,00 1245,00 1410,00 245,00 1546,00

SEMANA 3

( Segunda )COLUNA 1

( Terça )COLUNA 2

( Quarta )COLUNA 3

( Quinta )COLUNA 4

( Sexta )COLUNA 5

( SANDRA )LINHA 1 1050,00 950,00 1241,00 2145,00 1256,00

( VERA )LINHA 2 785,00 1540,00 1400,00 546,00 0,00

( MARIA )LINHA 3 1658,00 1245,00 1410,00 245,00 1546,00

SEMANA 2

( Segunda )COLUNA 1

( Terça )COLUNA 2

( Quarta )COLUNA 3

( Quinta )COLUNA 4

( Sexta )COLUNA 5

( SANDRA )LINHA 1 1050,00 950,00 1241,00 2145,00 1256,00

( VERA )LINHA 2 785,00 1540,00 1400,00 546,00 0,00

( MARIA )LINHA 3 1658,00 1245,00 1410,00 245,00 1546,00

SEMANA 1

( Segunda )COLUNA 1

( Terça )COLUNA 2

( Quarta )COLUNA 3

( Quinta )COLUNA 4

( Sexta )COLUNA 5

( SANDRA )LINHA 1 1050,00 950,00 1241,00 2145,00 1256,00

( VERA )LINHA 2 785,00 1540,00 1400,00 546,00 0,00

( MARIA )LINHA 3 1658,00 1245,00 1410,00 245,00 1546,00

Page 31: Apostila Web Php

Indicando a declaração de uma matriz com 3 linhas e 5 colunas, repetidas em 4 faces, cujos valores serão do tipo real.

Assim, vejamos como fica o algoritmo para lermos os faturamentos diários por semana.

Algoritmo LeVendasDiariasVersao4;declare

VendasDiarias : matriz[3,5,4] de real;Vendedoras : vetor[3] de caracter;DiasSemana : vetor[5] de caracter;indLinha, indColuna, indFace : inteiro;

início

Vendedoras[1] ‘Sandra’;Vendedoras[2] ‘Vera’;Vendedoras[3] ‘Maria’;

DiasSemana[1] ‘Segunda’;DiasSemana[2] ‘Terça’;DiasSemana[3] ‘Quarta’;DiasSemana[4] ‘Quinta’;DiasSemana[5] ‘Sexta’;

{ Variando o número de faces – Semanas do mês }para indFaces 1 até 4 faça

escrever (‘Semana do Mês : ‘,indFaces);

{ Variando o número de linhas – Vendedoras }para indLinha 1 até 3 faça

escrever (‘Vendedora : ‘, Vendedoras[indLinha]);

{ Variando o número de colunas – Dias da Semana }para indColuna 1 até 5 faça

escrever (‘Faturamento do Dia : ‘, DiasSemana[indColuna]);ler (VendasDiarias[indLinha, indColuna, indFaces]);

fim-para;fim-para;

fim-para;

fim

31

Page 32: Apostila Web Php

REGISTROS

O conceito de registro visa facilitar o agrupamento de variáveis que não são do mesmo tipo, mas que guardam estreita

relação lógica. Assim, registros correspondem a uma estrutura de dados heterogênea, ou seja, permite o armazenamento de

informações de tipos diferentes. São localizados em posições de memória, conhecidos por um mesmo nome e individualizados por

identificadores associados a cada conjunto de posições. Vamos pensar que precisamos fazer um algoritmo que leia os dados

cadastrais dos funcionários de uma empresa. Somente com os campos nome e salário já temos uma divergência de tipos – caracter e

real. Assim, precisamos de uma estrutura de dados que permita armazenar valores de tipos de diferentes – estamos diante dos

registros.

Nas matrizes, a individualização de um elemento é feita através de índices, já no registro cada campo é

individualizado pela referência do nome do identificador.

Veja a sintaxe da declaração de um registro:

tipo nome_registro = registro

identificador-1 : tipo-1;

identificador-2 : tipo-2;

...

identificador-n : tipo-n;

fim-registro;

Para trabalharmos com um registro, devemos primeiramente criar um tipo registro. Depois, declaramos uma variável

cujo tipo será este tipo registro.

Exemplo:

declare

tipo DataExtenso = registrodia : inteiro;mes : string;ano : inteiro;

fim-registro

DataCarta : DataExtenso;

A sintaxe que representa o acesso ao conteúdo de um campo do registro é:

nome_registro.nome_campo;

A atribuição de valores aos registros é feita da seguinte forma:

32

Page 33: Apostila Web Php

nome_registro.nome_campo valor;

Suponha uma aplicação onde devemos controlar os dados de funcionários da empresa. Imagine que tenhamos fichas

onde os dados estão logicamente relacionados entre si, pois constituem as informações cadastrais do mesmo indivíduo.

NOME DO FUNCIONÁRIO ENDEREÇO

CPF ESTADO CIVIL DATA NASCIMENTO ESCOLARIDADE

CARGO SALÁRIO DATA DE ADMISSÃO

NOME DO FUNCIONÁRIO ENDEREÇO

CPF ESTADO CIVIL DATA NASCIMENTO ESCOLARIDADE

CARGO SALÁRIO DATA DE ADMISSÃO

Cada conjunto de informações do funcionário pode ser referenciável por um mesmo nome, como por exemplo,

FUNCIONARIO. Tais estruturas são conhecidas como registros e aos elementos do registro dá-se o nome de campos.

Assim, definiríamos um registro da seguinte forma:

tipo Funcionario = registronome : caracter;endereco : caracter;

33

JOÃO DA SILVA RUA DA SAUDADE, 100 CASA 1

000.001.002- CASADO 01/01/1960 SUPERIOR

GERENTE DE 1000,00 10/05/1997

MARIA SANTOS AVENIDA DESPERTAR, 1000 CASA 101-A

100.201.202- SOLTEIRA 01/01/1980 2º GRAU COMPLETO

DIGITADORA 650,00 01/08/1999

Page 34: Apostila Web Php

cpf : caracter;estado_civil : caracter;data_nascimento : caracter;escolaridade : caracter;cargo : caracter;salario : real;data_admissao : caracter;fim-registro;

Veja um exemplo de como podemos criar conjuntos de registros, utilizando vetores e/ou matrizes:

Exemplo:

declare

tipo Funcionario = registronome : caracter;endereco : caracter;data_nascimento : caracter;data_admissao : caracter;cargo : caracter;

salario : real;fim-registro;

Funcionarios_Empresa : vetor[1:100] de Funcionario;

ARQUIVOS

Na maioria das vezes, desejaremos desenvolver um algoritmo de forma que os dados

manipulados sejam armazenados por um período longo de tempo, e não somente durante o tempo

de execução do algoritmo. Como a memória principal do computador é volátil, ou seja, ao ser

desligado o computador, todos os dados da memória são perdidos, necessitamos de uma

memória auxiliar que seja permanente, como por exemplo, um disquete ou o disco rígido (HD).

Assim, passamos a ter um novo conceito no mundo computacional – o de

arquivos. Arquivo é um conjunto de registros armazenados em um dispositivo de memória

auxiliar (secundária). Por sua vez, um registro consiste de um conjunto de unidades de informação logicamente relacionadas – os

campos. Assim, podemos definir que um registro corresponde a um conjunto de campos de tipos heterogêneos. Veja que neste

momento estamos tratando de registros físicos, ao contrário, do que vimos no item anterior, que são os registros lógicos.

O fato do arquivo ser armazenado em uma memória secundária, o torna independente de qualquer algoritmo, isto é,

um arquivo pode ser criado, consultado, processado e eventualmente removido por algoritmos distintos.

Sendo o arquivo uma estrutura fora do ambiente do algoritmo, para que este tenha acesso aos dados do arquivo é

necessária a operação de leitura do registro no arquivo. As operações básicas que podem ser feitas

34

Page 35: Apostila Web Php

em um arquivo através de um algoritmo são: obtenção de um registro, inserção de um novo registro, modificação ou exclusão de um

registro.

A disposição dos registros no arquivo – organização – oferece ao programador formas mais eficientes e eficazes de

acesso aos dados. Vamos considerar, aqui, as duas principais formas de organização de arquivos: a seqüencial e a direta.

Organização Seqüencial : A principal característica da organização seqüencial é a de que os registros são

armazenados um após o outro. Assim, tanto a leitura quanto a escrita, são feitas seqüencialmente, ou seja, a

leitura de um determinado registro só é possível após a leitura de todos os registros anteriores e a escrita de um

registro só é feita após o último registro.

Organização Direta : A principal característica da organização direta é a facilidade de acesso. Para se ter

acesso a um registro de um arquivo direto, não é necessário pesquisar registro a registro, pois este pode ser obtido

diretamente – acesso aleatório. Isto é possível porque a posição do registro no espaço físico do arquivo é

univocamente determinada a partir de um dos campos do registro (chave), escolhido no momento de criação do

arquivo.

O acesso a um arquivo dentro do algoritmo é feito através da leitura e escrita de registros. No algoritmo, o arquivo

deve ser declarado e aberto, antes que tal acesso possa ser feito. No final do algoritmo, ou quando houver necessidade, o arquivo

deve ser fechado.

A sintaxe da declaração de arquivos é :

nome_arquivo : arquivo organização de nome_registro;

onde:

organização – indica o tipo de organização do arquivo, que pode ser seqüencial ou direta.

nome_registro – nome do registro lógico que será usado para se ter acesso aos registros físicos do arquivo.

Exemplo:

tipo Registro_Endereco = registro rua : caracter;numero : inteiro;bairro, cidade, uf, cep : caracter;

fim-registro;

Agenda : arquivo sequencial de Registro_Endereco;

35

Page 36: Apostila Web Php

Abertura de Arquivos

A declaração do arquivo é a definição, para o algoritmo, do modelo e dos nomes que estarão associados à estrutura de

dados, isto é, ao arquivo.

A sintaxe da declaração de arquivos é :

abrir nome_ arq1, nome_arq2, ... , nome_arqn tipo_utilização;

onde:

tipo_utilização – especifica se o arquivo será usado somente para leitura, somente para escrita ou ambos,

simultaneamente.

Exemplo:

abrir Agenda leitura;abrir Agenda escrita;abrir Agenda;abrir Agenda, ContasPagar;

Fechamento de Arquivos

Para se desfazer a associação entre o modelo e o arquivo físico, usa-se o comando de fechamento de arquivos, cuja

sintaxe está a seguir:

fechar nome_ arq1, nome_arq2, ... , nome_arqn;

Comandos de Entrada (Leitura) e Saída (Escrita)

ler ( nome_arquivo , nome_registro );

escrever ( nome_arquivo , nome_registro );

Pesquisa de registro num arquivo seqüencial

Algoritmo Pesquisa1

declare

36

Page 37: Apostila Web Php

tipo Dados_Aluno = registro matricula : integer;nome : caracter;data_nascimento : caracter;endereco : caracter;

fim-registro;

Alunos : arquivo sequencial de Dados_Aluno;Encontrou : lógico;

inícioAbrir Alunos leitura;

Encontrou Falso;

enquanto (não Alunos.EOF) e (não Encontrou) faça Ler ( Alunos , Dados_Aluno ) se Dados_Aluno.matricula = 159 então Escrever(‘Aluno encontrado’); Encontrou Verdadeiro; fim-se;fim-enquanto

Fechar Alunos;fim

Obs: Na leitura de registros, fazemos uso de uma informação lógica associada ao arquivo, que indica se

o ponteiro ultrapassou o último registro, ou seja, chegou ao fim do arquivo. No algoritmo, representamos essa

informação pela função EOF.

Pesquisa de registro num arquivo direto

Para se acessar diretamente um registro, usa-se um comando para pesquisa da chave. Veja sintaxe:

pesquisar ( nome_ arquivo , chave );

Algoritmo Pesquisa2

declare

tipo Dados_Aluno = registro matricula : integer;nome : caracter;data_nascimento : caracter;end ereco : caracter;

fim-registro;

Alunos : arquivo direto de Dados_Aluno;

inícioAbrir Alunos leitura

37

Page 38: Apostila Web Php

se Pesquisar ( Alunos , ‘159’ ) entãoLer (Alunos, Dados_Aluno )Escrever(‘Aluno encontrado’);

fim-se;

Fechar Alunos;fim

PROCEDIMENTOS E FUNÇÕES

Para construirmos grandes programas, necessitamos fazer uso da técnica de modularização. Esta técnica faz com que

dividamos um grande programa em pequenos trechos de código, onde cada qual tem uma função bem definida. Assim, além da

facilidade em lidar com trechos menores, ainda podemos fazer uso da reutilização de código, já que estes trechos devem ser bem

independentes.

Assim, definimos módulo como um grupo de comandos, constituindo um trecho de algoritmo, com uma função bem

definida e o mais independente possível em relação ao resto do algoritmo.

A maneira mais intuitiva de trabalharmos com a modularização de problemas é definir-se um módulo principal de

controle e módulos específicos para as funções do algoritmo. Módulos de um programa devem ter um tamanho limitado, já que

módulos muito grandes são difíceis de serem compreendidos.

Os módulos são implementados através de procedimentos ou funções.

Sintaxe de definição de um procedimento:

Procedimento Nome_Procedimento [ (parâmetros) ];declare < variáveis locais >início

comando 1;comando 2;comando n;

fim

Os parâmetros podem ser passados por valor ou por referência. Um parâmetro passado por valor, não pode ser

alterado pelo procedimento. Os parâmetros por referência são identificados usando-se a palavra VAR antes de sua declaração.

Sintaxe da chamada do procedimento:

Nome_Procedimento (<lista de parâmetros>);

38

Page 39: Apostila Web Php

Os valores passados como parâmetros na chamada de um procedimento, devem corresponder sequencialmente à

ordem declarada.

A função é semelhante ao procedimento, todavia sua diferença consiste no fato de que um procedimento não retorna

valor quando é chamado para execução, enquanto que a função retorna um valor.

Definição de uma função:

Função Nome_Função [ (parâmetros) ] : valor_retorno;declare < variáveis locais >início

comando 1;comando 2;comando n;

fim

Chamada da função:

Nome_Função (<lista de parâmetros>);

Ou

Variável Nome_Função (<lista de parâmetros>);

39

Page 40: Apostila Web Php

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

DIVISÃO DE CURSOS DE EXTENSÃO – DIECE

BÁSICO DE PHP EM AMBIENTE MYSQL

PHP

40

Page 41: Apostila Web Php

ÍNDICE..............................................................................................................................1

O QUE É PHP?................................................................................................................5O QUE PODE SER FEITO COM PHP?................................................................................5COMO SURGIU A LINGUAGEM PHP?...............................................................................6

2. SINTAXE BÁSICA......................................................................................................7

DELIMITANDO O CÓDIGO PHP.......................................................................................7SEPARADOR DE INSTRUÇÕES..........................................................................................7NOMES DE VARIÁVEIS....................................................................................................8COMENTÁRIOS................................................................................................................8

Comentários de uma linha:.......................................................................................8Comentários de mais de uma linha:.........................................................................8

3. CRIANDO OS PRIMEIROS SCRIPTS.....................................................................9

PRIMEIRO EXEMPLO.......................................................................................................9UTILIZANDO FORMULÁRIOS HTML.............................................................................10INTERAGINDO COM O BROWSER...................................................................................11ACESSANDO BANCOS DE DADOS.................................................................................12

Conexão com o servidor.........................................................................................12Seleção do banco de dados.....................................................................................12Execução de queries SQL.......................................................................................13Tratamento de resultados de query SELECT..........................................................14

4. TIPOS..........................................................................................................................17

TIPOS SUPORTADOS......................................................................................................17Inteiros (integer ou long)........................................................................................17Números em Ponto Flutuante (double ou float).....................................................18Strings.....................................................................................................................18Arrays......................................................................................................................19

Listas..................................................................................................................20

Objetos....................................................................................................................21Booleanos................................................................................................................21

TRANSFORMAÇÃO DE TIPOS.........................................................................................21Coerções.................................................................................................................21Transformação explícita de tipos............................................................................22Com a função settype..............................................................................................23

5. CONSTANTES...........................................................................................................24

CONSTANTES PRÉ-DEFINIDAS.......................................................................................24DEFININDO CONSTANTES..............................................................................................24

6. OPERADORES..........................................................................................................25

ARITMÉTICOS...............................................................................................................25DE STRINGS...................................................................................................................25DE ATRIBUIÇÃO............................................................................................................25BIT A BIT.......................................................................................................................26LÓGICOS.......................................................................................................................26COMPARAÇÃO..............................................................................................................27EXPRESSÃO CONDICIONAL...........................................................................................27DE INCREMENTO E DECREMENTO.................................................................................27ORDEM DE PRECEDÊNCIA DOS OPERADORES................................................................28

7. ESTRUTURAS DE CONTROLE.............................................................................29

41

Page 42: Apostila Web Php

BLOCOS........................................................................................................................29COMANDOS DE SELEÇÃO..............................................................................................29

if..............................................................................................................................30switch......................................................................................................................32

COMANDOS DE REPETIÇÃO...........................................................................................34while........................................................................................................................34do... while................................................................................................................34for............................................................................................................................35

QUEBRA DE FLUXO.......................................................................................................36Break.......................................................................................................................36Continue..................................................................................................................36

8. FUNÇÕES...................................................................................................................38

DEFININDO FUNÇÕES....................................................................................................38VALOR DE RETORNO....................................................................................................38ARGUMENTOS...............................................................................................................39

Passagem de parâmetros por referência................................................................39Argumentos com valores pré-definidos (default)....................................................40

CONTEXTO....................................................................................................................41ESCOPO.........................................................................................................................41

9. VARIÁVEIS................................................................................................................43

O MODIFICADOR STATIC...............................................................................................43VARIÁVEIS VARIÁVEIS.................................................................................................44VARIÁVEIS ENVIADAS PELO NAVEGADOR....................................................................44

URLencode..............................................................................................................45VARIÁVEIS DE AMBIENTE.............................................................................................45VERIFICANDO O TIPO DE UMA VARIÁVEL.....................................................................45

Função que retorna o tipo da variável...................................................................46Funções que testam o tipo da variável...................................................................46

DESTRUINDO UMA VARIÁVEL.......................................................................................46VERIFICANDO SE UMA VARIÁVEL POSSUI UM VALOR..................................................47

A função isset..........................................................................................................47A função empty........................................................................................................47

10. CLASSES E OBJETOS...........................................................................................48

CLASSE.........................................................................................................................48OBJETO.........................................................................................................................48A VARIÁVEL $THIS.......................................................................................................48SUBCLASSES.................................................................................................................49CONSTRUTORES............................................................................................................49

12. CONSIDERAÇÕES FINAIS...................................................................................51

13. BIBLIOGRAFIA E REFERÊNCIAS.....................................................................52

APÊNDICE 01 - FUNÇÕES PARA TRATAMENTO DE STRINGS.......................53

FUNÇÕES RELACIONADAS A HTML.............................................................................53htmlspecialchars.....................................................................................................53htmlentities..............................................................................................................53nl2br........................................................................................................................53get_meta_tags.........................................................................................................54strip_tags.................................................................................................................54urlencode.................................................................................................................54urldecode.................................................................................................................55

FUNÇÕES RELACIONADAS A ARRAYS...........................................................................55Implode e join.........................................................................................................55

42

Page 43: Apostila Web Php

split..........................................................................................................................55explode....................................................................................................................56

COMPARAÇÕES ENTRE STRINGS...................................................................................56similar_text.............................................................................................................56strcasecmp...............................................................................................................56strcmp......................................................................................................................56strstr........................................................................................................................57stristr.......................................................................................................................57strpos.......................................................................................................................57strrpos.....................................................................................................................57

FUNÇÕES PARA EDIÇÃO DE STRINGS............................................................................58chop.........................................................................................................................58ltrim.........................................................................................................................58trim..........................................................................................................................58strrev.......................................................................................................................58strtolower................................................................................................................59strtoupper................................................................................................................59ucfirst......................................................................................................................59ucwords...................................................................................................................59str_replace..............................................................................................................60

FUNÇÕES DIVERSAS......................................................................................................60chr...........................................................................................................................60ord...........................................................................................................................60echo.........................................................................................................................60print.........................................................................................................................60strlen.......................................................................................................................60

APÊNDICE 02 - FUNÇÕES PARA TRATAMENTO DE ARRAYS.......................61

FUNÇÕES GENÉRICAS...................................................................................................61Array.......................................................................................................................61range.......................................................................................................................61shuffle......................................................................................................................62sizeof.......................................................................................................................62

FUNÇÕES DE “NAVEGAÇÃO”........................................................................................62reset.........................................................................................................................62end...........................................................................................................................62next..........................................................................................................................63prev.........................................................................................................................63pos...........................................................................................................................63key...........................................................................................................................63each.........................................................................................................................63

FUNÇÕES DE ORDENAÇÃO............................................................................................64sort..........................................................................................................................64rsort.........................................................................................................................64asort........................................................................................................................65arsort.......................................................................................................................65ksort.........................................................................................................................65usort........................................................................................................................65uasort......................................................................................................................65uksort.......................................................................................................................66

43

Page 44: Apostila Web Php

1. Introdução

O que é PHP?

PHP é uma linguagem que permite criar sites WEB dinâmicos, possibilitando uma interação com o usuário através

de formulários, parâmetros da URL e links. A diferença de PHP com relação a linguagens semelhantes a Javascript é que o código

PHP é executado no servidor, sendo enviado para o cliente apenas html puro. Desta maneira é possível interagir com bancos de

dados e aplicações existentes no servidor, com a vantagem de não expor o código fonte para o cliente. Isso pode ser útil quando o

programa está lidando com senhas ou qualquer tipo de informação confidencial.

O que diferencia PHP de um script CGI escrito em C ou Perl é que o código PHP fica embutido no próprio HTML,

enquanto no outro caso é necessário que o script CGI gere todo o código HTML, ou leia de um outro arquivo.

O que pode ser feito com PHP?

Basicamente, qualquer coisa que pode ser feita por algum programa CGI pode ser feita também com PHP, como

coletar dados de um formulário, gerar páginas dinamicamente ou enviar e receber cookies.

PHP também tem como uma das características mais importantes o suporte a um grande número de bancos de

dados, como dBase, Interbase, mSQL, mySQL, Oracle, Sybase, PostgreSQL e vários outros. Construir uma página baseada em um

banco de dados torna-se uma tarefa extremamente simples com PHP.

Além disso, PHP tem suporte a outros serviços através de protocolos como IMAP, SNMP, NNTP, POP3 e,

logicamente, HTTP. Ainda é possível abrir sockets e interagir com outros protocolos.

Como surgiu a linguagem PHP?

A linguagem PHP foi concebida durante o outono de 1994 por Rasmus Lerdorf. As primeiras versões não foram

disponibilizadas, tendo sido utilizadas em sua home-page apenas para que ele pudesse ter informações sobre as visitas que estavam

sendo feitas. A primeira versão utilizada por outras pessoas foi disponibilizada em 1995, e ficou conhecida como “Personal Home

Page Tools” (ferramentas para página pessoal). Era composta por um sistema bastante simples que interpretava algumas macros e

alguns utilitários que rodavam “por trás” das home-pages: um livro de visitas, um contador e algumas outras coisas.

Em meados de 1995 o interpretador foi reescrito, e ganhou o nome de PHP/FI, o “FI” veio de um outro pacote

escrito por Rasmus que interpretava dados de formulários HTML (Form Interpreter). Ele combinou os scripts do pacote Personal

Home Page Tools com o FI e adicionou suporte a mSQL, nascendo assim o PHP/FI, que cresceu bastante, e as pessoas passaram a

contribuir com o projeto.

44

Page 45: Apostila Web Php

Estima-se que em 1996 PHP/FI estava sendo usado por cerca de 15.000 sites pelo mundo, e em meados de 1997

esse número subiu para mais de 50.000. Nessa época houve uma mudança no desenvolvimento do PHP. Ele deixou de ser um

projeto de Rasmus com contribuições de outras pessoas para ter uma equipe de desenvolvimento mais organizada. O interpretador

foi reescrito por Zeev Suraski e Andi Gutmans, e esse novo interpretador foi a base para a versão 3.

Atualmente o uso do PHP4 vem crescendo numa velocidade incrível, e novas versões ainda virão.

45

Page 46: Apostila Web Php

2. Sintaxe Básica

Delimitando o código PHP

O código PHP fica embutido no próprio HTML. O interpretador identifica quando um código é PHP pelas

seguintes tags:

<?phpcomandos?>

<script language=”php”>comandos</script>

<?comandos?>

<%comandos%>

O tipo de tags mais utilizado é o terceiro, que consiste em uma “abreviação” do primeiro. Para utilizá-lo, é

necessário habilitar a opção short-tags na configuração do PHP. O último tipo serve para facilitar o uso por programadores

acostumados à sintaxe de ASP. Para utilizá-lo também é necessário habilitá-lo no PHP, através do arquivo de configuração php.ini.

Separador de instruções

Entre cada instrução em PHP é preciso utilizar o ponto-e-vírgula, assim como em C, Perl e outras linguagens mais

conhecidas. Na última instrução do bloco de script não é necessário o uso do ponto-e-vírgula, mas por questões estéticas

recomenda-se o uso sempre.

Nomes de variáveis

Toda variável em PHP tem seu nome composto pelo caracter $ e uma string, que deve iniciar por uma letra ou o

caracter “_”. PHP é case sensitive, ou seja, as variáveis $numero e $numero são diferentes. Por isso é preciso ter muito cuidado ao

definir os nomes das variáveis. É bom evitar os nomes em maiúsculas, pois como veremos mais adiante, o PHP já possui alguma

variáveis pré-definidas cujos nomes são formados por letras maiúsculas.

46

Page 47: Apostila Web Php

Comentários

Há dois tipos de comentários em código PHP:

Comentários de uma linha:

Marca como comentário até o final da linha ou até o final do bloco de código PHP – o que vier antes. Pode ser

delimitado pelo caracter “#” ou por duas barras ( // ).

Exemplo:<? echo “teste”; #isto é um teste ?><? echo “teste”; //este teste é similar ao anterior ?>

Comentários de mais de uma linha:

Tem como delimitadores os caracteres “/*” para o início do bloco e “*/” para o final do comentário. Se o

delimitador de final de código PHP ( ?> ) estiver dentro de um comentário, não será reconhecido pelo interpretador.

Exemplos:

<? echo “teste”; /* Isto é um comentário com maisde uma linha, mas não funciona corretamente ?>*/

<? echo “teste”; /* Isto é um comentário com maisde uma linha que funciona corretamente */?>

47

Page 48: Apostila Web Php

3. Criando os primeiros scripts

Primeiro Exemplo

Neste exemplo, criaremos um script com uma saída simples, que servirá para testar se a instalação foi feita

corretamente:

<html><head><title>Aprendendo PHP</title></head><body>

<?phpecho "Primeiro Script";?>

</body></html>

Salve o arquivo como “primeiro.php3” no diretorio de documentos do Apache (ou o Web Server escolhido). Abra

uma janela do navegador e digite o endereço “http://localhost/primeiro.php3”. Verificando o código fonte da página exibida, temos

o seguinte:

<html><head><title>Aprendendo PHP</title></head><body>

Primeiro Script

</body></html>

Isso mostra como o PHP funciona. O script é executado no servidor, ficando disponível para o usuário apenas o

resultado. Agora vamos escrever um script que produza exatamente o mesmo resultado utilizando uma variável:

<html><head><title>Aprendendo PHP</title></head><body>

<?php$texto = "Primeiro Script";echo $texto;?>

</body></html>

Utilizando formulários HTML

Ao clicar num botão “Submit” em um formulário HTML as informações dos campos serão enviadas ao servidor

especificado para que possa ser produzida uma resposta. O PHP trata esses valores como variáveis, cujo nome é o nome do campo

48

Page 49: Apostila Web Php

definido no formulário. O exemplo a seguir mostra isso, e mostra também como o código PHP pode ser inserido em qualquer parte

do código HTML:

<html><head><title>Aprendendo PHP</title></head><body>

<?phpif ($texto != "") echo "Você digitou \"$texto\"<br><br>";?>

<form method=post action="<? echo $PATH_INFO; ?>"><input type="text" name="texto" value="" size=10><br><input type="submit" name="sub" value="Enviar!"></form>

</body></html>

Ao salvar o arquivo acima e carregá-lo no browser, o usuário verá apenas um formulário que contém um espaço

para digitar o texto. Ao digitar um texto qualquer e submeter o formulário, a resposta, que é o mesmo arquivo PHP (indicado pela

constante $PATH_INFO, que retorna o nome do arquivo).

Isso ocorre porque o código PHP testa o conteúdo da variável $texto. Inicialmente ele é uma string vazia, e por isso

nada é impresso na primeira parte. Quando algum texto é digitado no formulário e submetido, o PHP passa a tratá-lo como uma

variável. Como no formulário o campo possui o nome “texto”, a variável com seu conteúdo será $texto. Assim, no próximo teste o

valor da variável será diferente de uma string vazia, e o PHP imprime um texto antes do formulário.

Interagindo com o browser

PHP também permite interagir com informações do browser automaticamente. Por exemplo, o script a seguir

mostra informações sobre o browser do usuário.

<html><head><title>Aprendendo PHP</title></head><body>

<? echo $HTTP_USER_AGENT; ?>

</body></html>

49

Page 50: Apostila Web Php

Observe que o resultado mostra características de cada browser, como a versão, e no caso do Communicator até o

idioma (“en”). Com isso, se você criar uma página com recursos disponíveis somente no Internet Explorer, por exemplo, pode

esconder o código dos outros browsers, com um código semelhante ao seguinte:

<html><head><title>Aprendendo PHP</title></head><body>

<? if (strpos($HTTP_USER_AGENT,"MSIE 5") != 0) { echo "Você usa Internet Explorer";} else { echo "Você não usa Internet Explorer";}?>

</body></html>

Neste exemplo, será apenas exibido um texto informando se está sendo utilizado o Microsoft Internet Explorer ou

não, mas para outras funções poderia ser utilizado algo semelhante.

É bom notar o surgimento de mais uma função no código anterior: strpos(string1,string2). Essa função retorna a

posição da primeira aparição de string2 em string1, contando a partir de zero, e não retorna valor algum se não ocorrer. Assim, para

testar se a string $HTTP_USER_AGENT contém a string “MSIE”, basta testar se strpos devolve algum valor.

Acessando Bancos de Dados

Neste documento todos os exemplos referentes a acesso de bancos de dados utilizarão o gerenciador de banco de

dados MySQL, que pode ser copiado gratuitamente no site http://www.mysql.org.

Para interagir com uma base de dados SQL existem três comandos básicos que devem ser utilizados: um que faz a

conexão com o servidor de banco de dados, um que seleciona a base de dados a ser utilizada e um terceiro que executa uma “query”

SQL.

Conexão com o servidor

A conexão com o servidor de banco de dados mySQL em PHP é feita através do comando mysql_connect, que tem

a seguinte sintaxe:

int mysql_connect(string /*host [:porta]*/ , string /*login*/ , string /*senha*/ );

Os parâmetros são bastante simples: o endereço do servidor(host), o nome do usuário (login) e a senha para a

conexão. A função retorna um valor inteiro, que é o identificador da conexão estabelecida e deverá ser armazenado numa variável

para ser utilizado depois. No nosso exemplo, temos como servidor de banco de dados a mesma máquina que roda o servidor http,

como login o usuário “root” e senha “phppwd”:

50

Page 51: Apostila Web Php

$conexao = mysql_connect(“localhost”, “root”, “phppwd”);

Assim, se a conexão for bem sucedida (existir um servidor no endereço especificado que possua o usuário com a

senha fornecida), o identificador da conexão fica armazenado na variável $conexão.

Seleção do banco de dados

Uma vez conectado, é preciso selecionar o banco de dados existente no servidor com o qual desejamos trabalhar.

Isso é feito através da função int mysql_select_db, que possui a seguinte sintaxe:

int mysql_select_db(string /*nome_base*/, int /*conexao*/ );

O valor de retorno é 0 se o comando falhar, e 1 em caso de sucesso. O nome da base de dados a selecionar é o

primeiro parâmetro fornecido, seguido pelo identificador da conexão. Se este for omitido, o interpretador PHP tentará utilizar a

última conexão estabelecida. Recomenda-se sempre explicitar esse valor, para facilitar a legibilidade do código. No nosso exemplo,

a base de dados a ser selecionada possui o nome “ged”:

mysql_select_db(“ged”, $conexao);

Após a execução desse comando qualquer consulta executada para aquela conexão utilizará a base de dados

selecionada.

Execução de queries SQL

Após estabelecida a conexão e selecionada a base de dados a ser utilizada, quase toda a interação com o servidor

mySQL pode ser feita através de consultas escritas em SQL (Structured Query Language), com o comando mysql_query, que utiliza

a seguinte sintaxe:

int mysql_query(string consulta, int [conexao] );

O valor de retorno é 0 se falhar ou 1 em caso de sucesso. Sucesso aqui significa que a consulta está sintaticamente

correta e foi executada no servidor. Nenhuma informação sobre o resultado é retornada deste comando, ou até mesmo se o resultado

é o esperado. No caso da consulta ser um comando SELECT, o valor de retorno é um valor interno que identifica o resultado, que

poderá ser tratado com a função mysql_result() e outras. A string query não deve conter ponto-e-vírgula no final do comando, e o

identificador da conexão é opcional. Vamos criar uma tabela como exemplo:

$cria = “CREATE TABLE exemplo (codigo INT AUTO_INCREMENT PRIMARY KEY, nome CHAR(40), email CHAR(50))”;

mysql_query($cria, $conexao);

51

Page 52: Apostila Web Php

Agora vejamos como ficou o código completo para executar uma query SQL numa base de dados mySQL, com um

exemplo que cria uma tabela chamada exemplo e adiciona alguns dados:

$conexao = mysql_connect(“localhost”, “root”, “phppwd”);mysql_select_db(“ged”, $conexao);

$cria = “CREATE TABLE exemplo (codigo INT AUTO_INCREMENT PRIMARY KEY, nome CHAR(40), email CHAR(50))”;

$insere1 = “INSERT INTO exemplo (nome,email) VALUES (“Pedro Souza”,”[email protected]”);

$insere2 = “INSERT INTO exemplo (nome,email) VALUES (“Jose da Silva”,”[email protected]”);

$insere3 = “INSERT INTO exemplo (nome,email) VALUES (“Fernando Henrique Cardoso”,”[email protected]”);

$insere4 = “INSERT INTO exemplo (nome,email) VALUES (“Bill Clinton”,”[email protected]”);

mysql_query($cria, $conexao);mysql_query($insere1, $conexao);mysql_query($insere2, $conexao);mysql_query($insere3, $conexao);mysql_query($insere4, $conexao);

Tratamento de resultados de query SELECT

Ao executar uma query SQL SELECT através do comando mysql_query, o identificador do resultado deve ser

armazenado numa variável que pode ser tratada de diversas formas. Duas maneiras interessantes de fazê-lo usam o comando

mysql_result e o comando mysql_fetch_row, respectivamente.

O comando mysql_result tem a seguinte sintaxe:

int mysql_result(int resultado, int linha, mixed [campo]);

Onde resultado é o identificador do resultado, obtido com o retorno da função mysql_query, linha especifica a tupla

a ser exibida, já que uma query SELECT pode retornar diversas tuplas, e campo é o identificador do campo a ser exibido, sendo o

tipo descrito como mixed pela possibilidade de ser de diversos tipos (neste caso, inteiro ou string). Vejamos um exemplo utilizando

a tabela criada anteriormente:

$consulta = “SELECT nome, email FROM exemplo WHERE email LIKE ‘pedro’”;

$resultado = mysql_query($consulta, $conexao);

printf("Nome: ", mysql_result($resultado,0,"nome"), “<br>\n”);printf("e-mail: ", mysql_result($resultado,0,"email"),“<br>”);

Com o exemplo acima, o resultado será:

52

Page 53: Apostila Web Php

Nome: Pedro Souza<br>e-mail: [email protected]<br>

É importante notar que a utilização desta função é um pouco trabalhosa, já que no caso de um resultado com várias

linhas é preciso controlar o número de linhas para tratá-las (pode-se utilizar a função mysql_num_rows(int resultado), que retorna o

número de linhas de um resultado), e no caso de uma alteração no nome do campo é preciso alterar também a maneira de tratá-lo.

Por isso é mais aconselhável que se use uma outra função, como por exemplo mysql_fetch_row, que possui a seguinte sintaxe:

array mysql_fetch_row(int result);

A variável resultado é o identificador da memória de resultados, obtido como retorno da função mysql_query. O

resultado produzido por esta função é de retirar a primeira linha da memória de resultados, se houver, e colocá-la num array. Assim

torna-se mais fácil tratar um resultado com várias linhas, e sem utilizar os nomes dos campos na rotina de tratamento do resultado:

$consulta = “SELECT nome, email FROM exemplo”;

$resultado = mysql_query($consulta, $conexao);

echo "<table border=1>\n";echo "<tr><td>Nome</td><td>e-mail</tr>\n";while ($linha = mysql_fetch_row($resultado)) { printf("<tr><td>$linha[0]</td>”); printf("<td>$linha[1]</td></tr>”);}echo "</table>\n";

O código acima irá imprimir todos os registros da tabela exemplo numa tabela html. Se o programador desejar

“pular” alguma(s) linha(s) do resultado, poderá utilizar a função mysql_data_seek, que tem por objetivo definir qual será a próxima

linha da memória de resultados a ser impressa. Sua sintaxe é:

int mysql_data_seek(int resultado, int linha);

Sendo resultado o identificador do resultado e linha o numero da linha. Retorna 0 em caso de falha, e um valor

diferente de zero em caso de sucesso.

Existem diversas outras funções para o tratamento de resultados, que armazenam as linhas em arrays e objetos,

assim como outras funções para administrar o banco de dados, mas como este documento trata-se de uma introdução, inicialmente

não tratará tópicos mais avançados.

53

Page 54: Apostila Web Php

4. Tipos

Tipos Suportados

PHP suporta os seguintes tipos de dados:

Inteiro

Ponto flutuante

String

Array

Objeto

PHP utiliza checagem de tipos dinâmica, ou seja, uma variável pode conter valores de diferentes tipos em

diferentes momentos da execução do script. Por este motivo não é necessário declarar o tipo de uma variável para usá-la. O

interpretador PHP decidirá qual o tipo daquela variável, verificando o conteúdo em tempo de execução.

Ainda assim, é permitido converter os valores de um tipo para outro desejado, utilizando o typecasting ou a função

settype (ver adiante).

Inteiros (integer ou long)

Uma variável pode conter um valor inteiro com atribuições que sigam as seguintes sintaxes:

$numero = 1234; # inteiro positivo na base decimal$numero = -234; # inteiro negativo na base decimal$numero = 0234; # inteiro na base octal-simbolizado pelo 0

# equivale a 156 decimal$numero = 0x34; # inteiro na base hexadecimal(simbolizado

# pelo 0x) – equivale a 52 decimal.

A diferença entre inteiros simples e long está no número de bytes utilizados para armazenar a variável. Como a

escolha é feita pelo interpretador PHP de maneira transparente para o usuário, podemos afirmar que os tipos são iguais.

Números em Ponto Flutuante (double ou float)

Uma variável pode ter um valor em ponto flutuante com atribuições que sigam as seguintes sintaxes:

$numero = 1.234;$numero = 23e4; # equivale a 230.000

54

Page 55: Apostila Web Php

Strings

Strings podem ser atribuídas de duas maneiras:

a) utilizando aspas simples ( ' ) – Desta maneira, o valor da variável será exatamente o texto contido entre as aspas (com exceção

de \\ e \' – ver tabela abaixo)

b) utilizando aspas duplas ( " ) – Desta maneira, qualquer variável ou caracter de escape será expandido antes de ser atribuído.

Exemplo:

<?$teste = "Antônio";$outra = '---$teste--\n';echo "$outra";?>

A saída desse script será "---$teste--\n".

<?$teste = "Antônio";$outra = "---$teste---\n";echo "$outra";?>

A saída desse script será "---Antônio--" (com uma quebra de linha no final).

55

Page 56: Apostila Web Php

A tabela seguinte lista os caracteres de escape:

Sintaxe Significado

\n Nova linha

\r Retorno de carro (semelhante a \n)

\t Tabulação horizontal

\\ A própria barra ( \ )

\$ O símbolo $

\’ Aspa simples

\” Aspa dupla

No apêndice 01 está disponível uma lista das funções utilizadas no tratamento de strings.

Arrays

Arrays em PHP podem ser observados como mapeamentos ou como vetores indexados. Mais precisamente, um

valor do tipo array é um dicionário onde os índices são as chaves de acesso. Vale ressaltar que os índices podem ser valores de

qualquer tipo e não somente inteiros. Inclusive, se os índices forem todos inteiros, estes não precisam formar um intervalo contínuo

Como a checagem de tipos em PHP é dinâmica, valores de tipos diferentes podem ser usados como índices de

array, assim como os valores mapeados também podem ser de diversos tipos.

Exemplo: <?$cor[1] = “vermelho”;$cor[2] = “verde”;$cor[3] = “azul”;$cor[“teste”] = 1;?>

Equivalentemente, pode-se escrever:

<?$cor = array(1 => “vermelho, 2 => “verde, 3 => “azul”, “teste => 1);?>

Listas

As listas são utilizadas em PHP para realizar atribuições múltiplas. Através de listas é possível atribuir valores que

estão num array para variáveis. Vejamos o exemplo:

Exemplo:

56

Page 57: Apostila Web Php

list($a, $b, $c) = array(“a”, “b”, “c”);

O comando acima atribui valores às três variáveis simultaneamente. É bom notar que só são atribuídos às variáveis

da lista os elementos do array que possuem índices inteiros e não negativos. No exemplo acima as três atribuições foram bem

sucedidas porque ao inicializar um array sem especificar os índices eles passam a ser inteiros, a partir do zero. Um fator importante

é que cada variável da lista possui um índice inteiro e ordinal, iniciando com zero, que serve para determinar qual valor será

atribuído. No exemplo anterior temos $a com índice 0, $b com índice 1 e $c com índice 2. Vejamos um outro exemplo:

$arr = array(1=>”um”,3=>”tres”,”a”=>”letraA”,2=>”dois);list($a,$b,$c,$d) = $arr;

Após a execução do código acima temos os seguintes valores:

$a == null$b == “um”$c == “dois”$d == “tres”

Devemos observar que à variável $a não foi atribuído valor, pois no array não existe elemento com índice 0 (zero).

Outro detalhe importante é que o valor “tres” foi atribuído à variável $d, e não a $b, pois seu índice é 3, o mesmo que $d na lista.

Por fim, vemos que o valor “letraA” não foi atribuído a elemento algum da lista pois seu índice não é inteiro.

Os índices da lista servem apenas como referência ao interpretador PHP para realizar as atribuições, não podendo

ser acessados de maneira alguma pelo programador. De maneira diferente do array, uma lista não pode ser atribuída a uma variável,

servindo apenas para fazer múltiplas atribuições através de um array.

No apêndice 02 está disponível uma lista das funções mais comuns para o tratamento de arrays.

Objetos

Um objeto pode ser inicializado utilizando o comando new para instanciar uma classe para uma variável.

Exemplo:class teste {

function nada() {echo “nada”;

}}

$new = new teste;$new -> nada();

A utilização de objetos será mais detalhada mais à frente.

Booleanos

57

Page 58: Apostila Web Php

PHP não possui um tipo booleano, mas é capaz de avaliar expressões e retornar true ou false, através do tipo

integer: é usado o valor 0 (zero) para representar o estado false, e qualquer valor diferente de zero (geralmente 1) para representar o

estado true.

Transformação de tipos

A transformação de tipos em PHP pode ser feita das seguintes maneiras:

Coerções

Quando ocorrem determinadas operações (“+”, por exemplo) entre dois valores de tipos diferentes, o PHP converte

o valor de um deles automaticamente (coerção). É interessante notar que se o operando for uma variável, seu valor não será alterado.

O tipo para o qual os valores dos operandos serão convertidos é determinado da seguinte forma: Se um dos

operandos for float, o outro será convertido para float, senão, se um deles for integer, o outro será convertido para integer.

Exemplo:$numero = “1”; // $numero é a string “1”$numero = $numero + 1; // $numero é o integer 2$numero = $numero + 3.7;// $numero é o double 5.7$numero = 1 + 1.5 // $numero é o double 2.5

Como podemos notar, o PHP converte string para integer ou double mantendo o valor. O sistema utilizado pelo

PHP para converter de strings para números é o seguinte:

- É analisado o início da string. Se contiver um número, ele será avaliado. Senão, o valor será 0 (zero);

- O número pode conter um sinal no início (“+” ou “-“);

- Se a string contiver um ponto em sua parte numérica a ser analisada, ele será considerado, e o valor obtido será

double;

- Se a string contiver um “e” ou “E” em sua parte numérica a ser analisada, o valor seguinte será considerado

como expoente da base 10, e o valor obtido será double;

Exemplos:$numero = 1 + “10.5”; // $numero == 11.5$numero = 1 + “-1.3e3”;// $numero == -1299$numero = 1 + “teste10.5”; // $numero == 1$numero = 1 + “10testes”; // $numero == 11$numero = 1 + " 10testes"; // $numero == 11$numero = 1 + "+ 10testes"; // $numero == 1

58

Page 59: Apostila Web Php

Transformação explícita de tipos

A sintaxe do typecast de PHP é semelhante ao C: basta escrever o tipo entre parenteses antes do valor

Exemplo:$numero = 15; // $numero é integer (15)$numero = (double) $numero // $numero é double (15.0)$numero = 3.9 // $numero é double (3.9)$numero = (int) $numero // $numero é integer (3)

// o valor decimal é truncado

Os tipos de cast permitidos são:

(int), (integer) Þ muda para integer;

(real), (double), (float) Þ muda para float;

(string) Þ muda para string;

(array) Þ muda para array;

(object) Þ muda para objeto.

Com a função settype

A função settype converte uma variável para o tipo especificado, que pode ser “integer”, “double”, “string”,

“array” ou “object”.

Exemplo:$numero = 15; // $numero é integersettype($numero,double) // $numero é double

59

Page 60: Apostila Web Php

5. Constantes

Constantes pré-definidas

O PHP possui algumas constantes pré-definidas, indicando a versão do PHP, o Sistema Operacional do servidor, o

arquivo em execução, e diversas outras informações. Para ter acesso a todas as constantes pré-definidas, pode-se utilizar a função

phpinfo(), que exibe uma tabela contendo todas as constantes pré-definidas, assim como configurações da máquina, sistema

operacional, servidor http e versão do PHP instalada.

Definindo constantes

Para definir constantes utiliza-se a função define. Uma vez definido, o valor de uma constante não poderá mais ser

alterado. Uma constante só pode conter valores escalares, ou seja, não pode conter nem um array nem um objeto. A assinatura da

função define é a seguinte:

int define(string nome_da_constante, mixed valor);

A função retorna true se for bem-sucedida. Veja um exemplo de sua utilização a seguir:

define ("pi", 3.1415926536);$circunf = 2*pi*$raio;

60

Page 61: Apostila Web Php

6. Operadores

Aritméticos

Só podem ser utilizados quando os operandos são números (integer ou float). Se forem de outro tipo, terão seus

valores convertidos antes da realização da operação.

+ Adição

- Subtração

* Multiplicação

/ Divisão

% Módulo

de strings

Só há um operador exclusivo para strings:

. Concatenação

de atribuição

Existe um operador básico de atribuição e diversos derivados. Sempre retornam o valor atribuído. No caso dos

operadores derivados de atribuição, a operação é feita entre os dois operandos, sendo atribuído o resultado para o primeiro. A

atribuição é sempre por valor, e não por referência.

61

Page 62: Apostila Web Php

= Atribuição simples

+= Atribuição com adição

-= Atribuição com subtração

*= Atribuição com multiplicação

/= Atribuição com divisão

%= Atribuição com módulo

.= Atribuição com concatenação

Exemplo:

$a = 7;$a += 2; // $a passa a conter o valor 9

bit a bit

Comparam dois números bit a bit.

& “e” lógico

| “ou” lógico

^ ou exclusivo

~ não (inversão)

<< Shift left

>> Shift right

Lógicos

Utilizados para inteiros representando valores booleanos

and “e” lógico

or “ou” lógico

xor ou exclusivo

! não (inversão)

&& “e” lógico

|| “ou” lógico

Existem dois operadores para “e” e para “ou porque eles têm diferentes posições na ordem de precedência.

62

Page 63: Apostila Web Php

Comparação

As comparações são feitas entre os valores contidos nas variáveis, e não as referências. Sempre retornam um valor

booleano.

== Igual a

!= Diferente de

< Menor que

> Maior que

<= Menor ou igual a

>= Maior ou igual a

Expressão condicional

Existe um operador de seleção que é ternário. Funciona assim:

(expressao1)?(expressao2):( expressao3)

o interpretador PHP avalia a primeira expressão. Se ela for verdadeira, a expressão retorna o valor de expressão2.

Senão, retorna o valor de expressão3.

de incremento e decremento

++ Incremento

-- Decremento

Podem ser utilizados de duas formas: antes ou depois da variável. Quando utilizado antes, retorna o valor da

variável antes de incrementá-la ou decrementá-la. Quando utilizado depois, retorna o valor da variável já incrementado ou

decrementado.

Exemplos:

$a = $b = 10; // $a e $b recebem o valor 10$c = $a++; // $c recebe 10 e $a passa a ter 11$d = ++$b; // $d recebe 11, valor de $b já incrementado

63

Page 64: Apostila Web Php

Ordem de precedência dos operadores

A tabela a seguir mostra a ordem de precedência dos operadores no momento de avaliar as expressões;

Precedência Associatividade Operadores

1. esquerda

,

2. esquerda

Or

3. esquerda

Xor

4. esquerda

And

5. direita

Print

6. esquerda

= += -= *= /= .= %= &= != ~= <<= >>=

7. esquerda

? :

8. esquerda

||

9. esquerda

&&

10. esquerda

|

11. esquerda

^

12. esquerda

&

13. não associa

== !=

14. não associa

< <= > >=

15. esquerda

<< >>

16. esquerda

+ - .

17. esquerda

* / %

18. direit ! ~ ++ -- (int) (double) (string) (array) (object) @

64

Page 65: Apostila Web Php

Precedência Associatividade Operadores

a

19. direita

[

20. não associa New

65

Page 66: Apostila Web Php

7. Estruturas de Controle

As estruturas que veremos a seguir são comuns para as linguagens de programação imperativas, bastando, portanto,

descrever a sintaxe de cada uma delas, resumindo o funcionamento.

Blocos

Um bloco consiste de vários comandos agrupados com o objetivo de relacioná-los com determinado comando ou

função. Em comandos como if, for, while, switch e em declarações de funções blocos podem ser utilizados para permitir que um

comando faça parte do contexto desejado. Blocos em PHP são delimitados pelos caracteres “{” e “}”. A utilização dos delimitadores

de bloco em uma parte qualquer do código não relacionada com os comandos citados ou funções não produzirá efeito algum, e será

tratada normalmente pelo interpretador.

Exemplo:if ($x == $y) comando1; comando2;

Para que comando2 esteja relacionado ao if é preciso utilizar um bloco:

if ($x == $y){ comando1; comando2;}

Comandos de seleção

Também chamados de condicionais, os comandos de seleção permitem executar comandos ou blocos de comandos

com base em testes feitos durante a execução.

66

Page 67: Apostila Web Php

if

O mais trivial dos comandos condicionais é o if. Ele testa a condição e executa o comando indicado se o resultado

for true (valor diferente de zero). Ele possui duas sintaxes:

if (expressão) comando;

if (expressão): comando; . . . comando;endif;

Para incluir mais de um comando no if da primeira sintaxe, é preciso utilizar um bloco, demarcado por chaves.

O else é um complemento opcional para o if. Se utilizado, o comando será executado se a expressão retornar o

valor false (zero). Suas duas sintaxes são:

if (expressão) comando;else comando;

if (expressão): comando; . . . comando;else comando; . . . comando;endif;

A seguir, temos um exemplo do comando if utilizado com else:

if ($a > $b) $maior = $a;else $maior = $b;

O exemplo acima coloca em $maior o maior valor entre $a e $b

67

Page 68: Apostila Web Php

Em determinadas situações é necessário fazer mais de um teste, e executar condicionalmente diversos comandos ou

blocos de comandos. Para facilitar o entendimento de uma estrutura do tipo:

if (expressao1) comando1;else if (expressao2) comando2; else if (expressao3) comando3; else comando4;

foi criado o comando, também opcional elseif. Ele tem a mesma função de um else e um if usados

sequencialmente, como no exemplo acima. Num mesmo if podem ser utilizados diversos elseif’s, ficando essa utilização a critério

do programador, que deve zelar pela legibilidade de seu script.

O comando elseif também pode ser utilizado com dois tipos de sintaxe. Em resumo, a sintaxe geral do comando if

fica das seguintes maneiras:

if (expressao1) comando;[ elseif (expressao2) comando; ][ else comando; ]

68

Page 69: Apostila Web Php

if (expressao1) : comando; . . . comando;[ elseif (expressao2) comando; . . . comando; ][ else comando; . . . comando; ]endif;

switch

O comando switch atua de maneira semelhante a uma série de comandos if na mesma expressão. Frequentemente o

programador pode querer comparar uma variável com diversos valores, e executar um código diferente a depender de qual valor é

igual ao da variável. Quando isso for necessário, deve-se usar o comando switch. O exemplo seguinte mostra dois trechos de código

que fazem a mesma coisa, sendo que o primeiro utiliza uma série de if’s e o segundo utiliza switch:

if ($i == 0) print “i é igual a zero”;elseif ($i == 1) print “i é igual a um”;elseif ($i == 2) print “i é igual a dois”;

switch ($i) {case 0: print “i é igual a zero”; break;case 1: print “i é igual a um”; break;case 2: print “i é igual a dois”; break;}

É importante compreender o funcionamento do switch para não cometer enganos. O comando switch testa linha a

linha os cases encontrados, e a partir do momento que encontra um valor igual ao da variável testada, passa a executar todos os

comandos seguintes, mesmo os que fazem parte de outro teste, até o fim do bloco. por isso usa-se o comando break, quebrando o

fluxo e fazendo com que o código seja executado da maneira desejada. Veremos mais sobre o break mais adiante. Veja o exemplo:

switch ($i) {case 0:

69

Page 70: Apostila Web Php

print “i é igual a zero”;case 1: print “i é igual a um”;case 2: print “i é igual a dois”;

}

No exemplo acima, se $i for igual a zero, os três comandos “print” serão executados. Se $i for igual a 1, os dois

últimos “print” serão executados. O comando só funcionará da maneira desejada se $i for igual a 2.

Em outras linguagens que implementam o comando switch, ou similar, os valores a serem testados só podem ser do

tipo inteiro. Em PHP é permitido usar valores do tipo string como elementos de teste do comando switch. O exemplo abaixo

funciona perfeitamente:

switch ($s) {case “casa”: print “A casa é amarela”;case “arvore”: print “a árvore é bonita”;case “lampada”: print “joao apagou a lampada”;

}

comandos de repetição

while

O while é o comando de repetição (laço) mais simples. Ele testa uma condição e executa um comando, ou um

bloco de comandos, até que a condição testada seja falsa. Assim como o if, o while também possui duas sintaxes alternativas:

while (<expressao>) <comando>;

while (<expressao>): <comando>; . . . <comando>;endwhile;

A expressão só é testada a cada vez que o bloco de instruções termina, além do teste inicial. Se o valor da

expressão passar a ser false no meio do bloco de instruções, a execução segue até o final do bloco. Se no teste inicial a condição for

avaliada como false, o bloco de comandos não será executado.

O exemplo a seguir mostra o uso do while para imprimir os números de 1 a 10:

$i = 1;

70

Page 71: Apostila Web Php

while ($i <=10) print $i++;

do... while

O laço do..while funciona de maneira bastante semelhante ao while, com a simples diferença que a expressão é

testada ao final do bloco de comandos. O laço do..while possui apenas uma sintaxe, que é a seguinte:

do { <comando> . . . <comando>} while (<expressao>);

O exemplo utilizado para ilustrar o uso do while pode ser feito da seguinte maneira utilizando o do.. while:

$i = 0;do { print ++$i;} while ($i < 10);

for

O tipo de laço mais complexo é o for. Para os que programam em C, C++ ou Java, a assimilação do funcionamento

do for é natural. Mas para aqueles que estão acostumados a linguagens como Pascal, há uma grande mudança para o uso do for. As

duas sintaxes permitidas são:

for (<inicializacao>;<condicao>;<incremento>) <comando>;

for (<inicializacao>;<condicao>;<incremento>) : <comando>; . . . <comando>;endfor;

As três expressões que ficam entre parênteses têm as seguintes finalidades:

Inicialização: comando ou sequencia de comandos a serem realizados antes do inicio do laço. Serve para inicializar

variáveis.

71

Page 72: Apostila Web Php

Condição: Expressão booleana que define se os comandos que estão dentro do laço serão executados ou não.

Enquanto a expressão for verdadeira (valor diferente de zero) os comandos serão executados.

Incremento: Comando executado ao final de cada execução do laço.

Um comando for funciona de maneira semelhante a um while escrito da seguinte forma:

72

Page 73: Apostila Web Php

<inicializacao>while (<condicao>) {comandos...<incremento>}

Quebra de fluxo

Break

O comando break pode ser utilizado em laços de do, for e while, além do uso já visto no comando switch. Ao

encontrar um break dentro de um desses laços, o interpretador PHP para imediatamente a execução do laço, seguindo normalmente

o fluxo do script.

while ($x > 0) { ... if ($x == 20) { echo “erro! x = 20”; break; ...}

No trecho de código acima, o laço while tem uma condição para seu término normal ($x <= 0), mas foi utilizado o

break para o caso de um término não previsto no início do laço. Assim o interpretador seguirá para o comando seguinte ao laço.

Continue

O comando continue também deve ser utilizado no interior de laços, e funciona de maneira semelhante ao break,

com a diferença que o fluxo ao invés de sair do laço volta para o início dele. Vejamos o exemplo:

for ($i = 0; $i < 100; $i++) { if ($i % 2) continue; echo “ $i “;}

O exemplo acima é uma maneira ineficiente de imprimir os números pares entre 0 e 99. O que o laço faz é testar se

o resto da divisão entre o número e 2 é 0. Se for diferente de zero (valor lógico true) o interpretador encontrará um continue, que faz

com que os comandos seguintes do interior do laço sejam ignorados, seguindo para a próxima iteração.

73

Page 74: Apostila Web Php

Exercícios

1) <?phpecho "<p align='Center'> Php, meu primeiro exemplo </p>";

?>

2) <html><head><title> PHP, meu segundo exemplo </title></head><boby><?php

$data = date ("d/m/y",time( ));echo $data;

?></body></html>

3) Arquivo HTML de um formulário completo, onde seus dados serão enviados para um script em PHP, que irá calcular quantos litros de combustível o seu veículo irá necessitar para percorrer um determinado percurso:

<html><head><title> Cálculo de consumo </title></head><body><form method = "POST" action = "media.php"><p> Quantidade de km à percorrer : <input type = "text" name = "T1"size = "10">km / Litros que faz seu veículo: <input type = "text" name = "T2" size = "8"></p><p><input type = "submit" value = "Submeter" name = "B1> <input type = "reset" value = "Redefinir" name = "B2></p></form></body></html>

O arquivo media.php, que deverá ser gerado em um editor de textos comum:

<?Php$T1 = $_POST[‘T1’];$T2 = $_POST[‘T2’];

$total_litros = $T1 / $T2;echo "<p> Você irá necessitar de $total_litros para percorrer esta

Distância</p>" ?>

4) Comando FOR:

<html>

74

Page 75: Apostila Web Php

<head><title> Teste do comando For do PHP </title></head><body><?php

echo "Contagem Progressiva";for ($cont = 1; $cont <= 5; $cont++){ echo "Estamos em $cont <br>";}

?></body></html>

5) Crie em PHP, uma rotina que, ao invés de executar uma contagem progressiva de 1 até 5, irá executar uma mensagem regressiva de 5 a 1, obtendo uma saída, a mesma frase do exemplo exibido anteriormente.

6) Crie em PHP, uma rotina de loop, quq irá possuir dois contadores, sendo que o contador "A" irá de 1 até 6, e o contador "B" irá de 1 até 3, gerando como saída, de forma intercalada.

7) Comando WHILE:

<html><head><title> Teste do comando While do PHP </title></head><body><?php

$cont = 1Echo "Contatem Progressiva";While ($cont <=5){Echo "Estamos em $cont <br>";}

?></body></html>

8) Crie com o While, uma rotina parecida com a exibida acima, porém realizando uma contagem regressiva.

75

Page 76: Apostila Web Php

8. Funções

Definindo funções

A sintaxe básica para definir uma função é:

function nome_da_função([arg1, arg2, arg3]) {Comandos;... ;[return <valor de retorno>];

}

Qualquer código PHP válido pode estar contido no interior de uma função. Como a checagem de tipos em PHP é

dinâmica, o tipo de retorno não deve ser declarado, sendo necessário que o programador esteja atento para que a função retorne o

tipo desejado. É recomendável que esteja tudo bem documentado para facilitar a leitura e compreensão do código. Para efeito de

documentação, utiliza-se o seguinte formato de declaração de função:

tipo function nome_da_funcao(tipo arg1, tipo arg2, ...);

Este formato só deve ser utilizado na documentação do script, pois o PHP não aceita a declaração de tipos. Isso

significa que em muitos casos o programador deve estar atento ao tipos dos valores passados como parâmetros, pois se não for

passado o tipo esperado não é emitido nenhum alerta pelo interpretador PHP, já que este não testa os tipos.

Valor de retorno

Toda função pode opcionalmente retornar um valor, ou simplesmente executar os comandos e não retornar valor

algum.

Não é possível que uma função retorne mais de um valor, mas é permitido fazer com que uma função retorne um

valor composto, como listas ou arrays.

Argumentos

É possível passar argumentos para uma função. Eles devem ser declarados logo após o nome da função, entre

parênteses, e tornam-se variáveis pertencentes ao escopo local da função. A declaração do tipo de cada argumento também é

utilizada apenas para efeito de documentação.

Exemplo:

76

Page 77: Apostila Web Php

function imprime($texto){ echo $texto;}

imprime(“teste de funções”);

Passagem de parâmetros por referência

Normalmente, a passagem de parâmetros em PHP é feita por valor, ou seja, se o conteúdo da variável for alterado,

essa alteração não afeta a variável original.

Exemplo:

function mais5($numero) { $numero += 5;}

$a = 3;mais5($a); //$a continua valendo 3

No exemplo acima, como a passagem de parâmetros é por valor, a função mais5 é inútil, já que após a execução

sair da função o valor anterior da variável é recuperado. Se a passagem de valor fosse feita por referência, a variável $a teria 8 como

valor. O que ocorre normalmente é que ao ser chamada uma função, o interpretador salva todo o escopo atual, ou seja, os conteúdos

das variáveis. Se uma dessas variáveis for passada como parâmetro, seu conteúdo fica preservado, pois a função irá trabalhar na

verdade com uma cópia da variável. Porém, se a passagem de parâmetros for feita por referência, toda alteração que a função

realizar no valor passado como parâmetro afetará a variável que o contém.

Há duas maneiras de fazer com que uma função tenha parâmetros passados por referência: indicando isso na

declaração da função, o que faz com que a pasagem de parâmetros sempre seja assim; e também na própria chamada da função. Nos

dois casos utiliza-se o modificador “&”. Vejamos um exemplo que ilustra os dois casos:

function mais5(&$num1, $num2) { $num1 += 5; $num2 += 5;}

$a = $b = 1;mais5($a, $b); /* Neste caso, só $num1 terá seu valor alterado, pois a passagem por referência está definida na declaração

da função. */

mais5($a, &$b); /* Aqui as duas variáveis terão seus valores alterados. */

77

Page 78: Apostila Web Php

Argumentos com valores pré-definidos (default)

Em PHP é possível ter valores default para argumentos de funções, ou seja, valores que serão assumidos em caso

de nada ser passado no lugar do argumento. Quando algum parâmetro é declarado desta maneira, a passagem do mesmo na chamada

da função torna-se opcional.

function teste($numero = “testando”) { echo $numero;}

teste(); // imprime “testando”teste(“outro teste”); // imprime “outro teste”

É bom lembrar que quando a função tem mais de um parâmetro, o que tem valor default deve ser declarado por

último:

function teste($figura = circulo, $cor) { echo “a figura é um “, $figura, “ de cor “ $cor;}

teste(azul); /* A função não vai funcionar da maneira esperada, ocorrendo um erro no interpretador. A declaração correta é: */

function teste2($cor, $figura = circulo) { echo “a figura é um “, $figura, “ de cor “ $cor;}

teste2(azul);

/* Aqui a funcao funciona da maneira esperada, ou seja, imprime o texto: “a figura é um círculo de cor azul” */

Contexto

O contexto é o conjunto de variáveis e seus respectivos valores num determinado ponto do programa. Na chamada

de uma função, ao iniciar a execução do bloco que contém a implementação da mesma é criado um novo contexto, contendo as

variáveis declaradas dentro do bloco, ou seja, todas as variáveis utilizadas dentro daquele bloco serão eliminadas ao término da

execução da função.

Escopo

O escopo de uma variável em PHP define a porção do programa onde ela pode ser utilizada. Na maioria dos casos

todas as variáveis têm escopo global. Entretanto, em funções definidas pelo usuário um escopo local é criado. Uma variável de

escopo global não pode ser utilizada no interior de uma função sem que haja uma declaração.

Exemplo:

78

Page 79: Apostila Web Php

$numero = “Testando”;

function Teste() { echo $numero;}

Teste();

O trecho acima não produzirá saída alguma, pois a variável $numero é de escopo global, e não pode ser referida

num escopo local, mesmo que não haja outra com nome igual que cubra a sua visibilidade. Para que o script funcione da forma

desejada, a variável global a ser utilizada deve ser declarada.

79

Page 80: Apostila Web Php

Exemplo:$numero = “Testando”;

function Teste() { global $numero; echo $numero;}

Teste();

Uma declaração “global” pode conter várias variáveis, separadas por vírgulas. Uma outra maneira de acessar

variáveis de escopo global dentro de uma função é utilizando um array pré-definido pelo PHP cujo nome é $GLOBALS. O índice

para a variável referida é o proprio nome da variável, sem o caracter $. O exemplo acima e o abaixo produzem o mesmo resultado:

Exemplo:$numero = "Testando";

function Teste() { echo $GLOBALS["vivas"]; // imprime $numero echo $numero; // não imprime nada }

Teste();

80

Page 81: Apostila Web Php

9. Variáveis

O modificador static

Uma variável estática é visível num escopo local, mas ela é inicializada apenas uma vez e seu valor não é perdido

quando a execução do script deixa esse escopo. Veja o seguinte exemplo:

function Teste() { $a = 0; echo $a; $a++;}

O último comando da função é inútil, pois assim que for encerrada a execução da função a variável $a perde seu

valor. Já no exemplo seguinte, a cada chamada da função a variável $a terá seu valor impresso e será incrementada:

function Teste() { static $a = 0; echo $a; $a++;}

O modificador static é muito utilizado em funções recursivas, já que o valor de algumas variáveis precisa ser

mantido. Ele funciona da seguinte forma: O valor das variáveis declaradas como estáticas é mantido ao terminar a execução da

função. Na próxima execução da função, ao encontrar novamente a declaração com static, o valor da variável é recuperado.

Em outras palavras, uma variável declarada como static tem o mesmo “tempo de vida” que uma variável global,

porém sua visibilidade é restrita ao escopo local em que foi declarada e só é recuperada após a declaração.

Exemplo:

function Teste() { echo "$a"; static $a = 0; $a++;}

O exemplo acima não produzirá saída alguma. Na primeira execução da função, a impressão ocorre antes da

atribuição de um valor à função, e portanto o conteúdo de $a é nulo (string vazia). Nas execuções seguintes da função Teste() a

impressão ocorre antes da recuperação do valor de $a, e portanto nesse momento seu valor ainda é nulo. Para que a função retorne

algum valor o modificador static deve ser utilizado.

81

Page 82: Apostila Web Php

Variáveis Variáveis

O PHP tem um recurso conhecido como variáveis variáveis, que consiste em variáveis cujos nomes também são

variáveis. Sua utilização é feita através do duplo cifrão ($$).

$a = “teste”;$$a = “Manoel Ribas”;

O exemplo acima e equivalente ao seguinte:

$a = “teste”;$teste = “Manoel Ribas”;

Variáveis enviadas pelo navegador

Para interagir com a navegação feita pelo usuário, é necessário que o PHP possa enviar e receber informações para

o software de navegação. A maneira de enviar informações, como já foi visto anteriormente, geralmente é através de um comando

de impressão, como o echo. Para receber informações vindas do navegador através de um link ou um formulário html o PHP utiliza

as informações enviadas através da URL. Por exemplo: se seu script php está localizado em “http://localhost/teste.php3” e você o

chama com a url “http://localhost/teste.php3?variavel=teste”, automaticamente o PHP criará uma variável com o nome $numero

contendo a string “teste”. Note que o conteúdo da variável está no formato urlencode. Os formulários html já enviam informações

automaticamente nesse formato, e o PHP decodifica sem necessitar de tratamento pelo programador.

URLencode

O formato urlencode é obtido substituindo os espaços pelo caracter “+” e todos os outros caracteres não alfa-

numéricos (com exceção de “_”) pelo caracter “%” seguido do código ASCII em hexadecimal.

Por exemplo: o texto “Testando 1 2 3 !!” em urlencode fica “Testando+1+2+3+%21%21”

O PHP possui duas funções para tratar com texto em urlencode. Seguem suas sintaxes:

string urlencode(string texto);string urldecode(string texto);

Essas funções servem respectivamente para codificar ou decodificar um texto passado como argumento. Para

entender melhor o que é um argumento e como funciona uma função, leia o tópico “funções”.

82

Page 83: Apostila Web Php

Variáveis de ambiente

O PHP possui diversas variáveis de ambiente, como a $PHP_SELF, por exemplo, que contém o nome e o path do

próprio arquivo. Algumas outras contém informações sobre o navegador do usuário, o servidor http, a versão do PHP e diversas

informações. Para ter uma listagem de todas as variáveis e constantes de ambiente e seus respectivos conteúdos, deve-se utilizar a

função phpinfo().

Verificando o tipo de uma variável

Por causa da tipagem dinâmica utilizada pelo PHP, nem sempre é possível saber qual o tipo de uma variável em

determinado instantese não contar com a ajuda de algumas funções que ajudam a verificar isso. A verificação pode ser feita de duas

maneiras:

Função que retorna o tipo da variável

Esta função é a gettype. Sua assinatura é a seguinte:

string gettype(mixed var);

A palavra “mixed” indica que a variável var pode ser de diversos tipos.

A função gettype pode retornar as seguintes strings: “integer”, “double”, “string”, “array”, “object” e “unknown

type”.

Funções que testam o tipo da variável

São as funções is_int, is_integer, is_real, is_long, is_float, is_string, is_array e is_object. Todas têm o mesmo

formato, seguindo modelo da assinatura a seguir:

int is_integer(mixed var);

Todas essas funções retornam true se a variável for daquele tipo, e false em caso contrário.

83

Page 84: Apostila Web Php

Destruindo uma variável

É possível desalocar uma variável se ela não for usada posteriormente através da função unset, que tem a seguinte

assinatura:

int unset(mixed var);

A função destrói a variável, ou seja, libera a memória ocupada por ela, fazendo com que ela deixe de existir. Se

mais na frente for feita uma chamada á variável, será criada uma nova variável de mesmo nome e de conteúdo vazio, a não ser que a

chamada seja pela função isset. Se a operação for bem sucedida, retorna true.

Verificando se uma variável possui um valor

Existem dois tipos de teste que podem ser feitos para verificar se uma variável está setada: com a função isset e

com a função empty.

A função isset

Possui o seguinte protótipo:

int isset(mixed var);

E retorna true se a variável estiver setada (ainda que com uma string vazia ou o valor zero), e false em caso

contrário.

A função empty

Possui a seguinte assinatura:

int empty(mixed var);

E retorna true se a variável não contiver um valor (não estiver setada) ou possuir valor 0 (zero) ou uma string vazia.

Caso contrário, retorna false.

84

Page 85: Apostila Web Php

10. Classes e Objetos

Classe

Uma classe é um conjunto de variáveis e funções relacionadas a essas variáveis. Uma vantagem da utilização é

poder usufruir do recurso de encapsulamento de informação. Com o encapsulamento o usuário de uma classe não precisa saber

como ela é implementada, bastando para a utilização conhecer a interface, ou seja, as funções disponíveis. Uma classe é um tipo, e

portanto não pode ser atribuída a uma variável. Para definir uma classe, deve-se utilizar a seguinte sintaxe:

class Nome_da_classe { var $variavel1; var $variavel2; function funcao1 ($parametro) { /* === corpo da função === */ }}

Objeto

Como foi dito anteriormente, classes são tipos, e não podem ser atribuídas a variáveis. Variáveis do tipo de uma

classe são chamadas de objetos, e devem ser criadas utilizando o operador new, seguindo o exemplo abaixo:

$variavel = new $nome_da_classe;

Para utilizar as funções definidas na classe, deve ser utilizado o operador “->”, como no exemplo:

$variavel->funcao1(

A variável $this

Na definição de uma classe, pode-se utilizar a variável $this, que é o próprio objeto. Assim, quando uma classe é

instanciada em um objeto, e uma função desse objeto na definição da classe utiliza a variável $this, essa variável significa o objeto

que estamos utilizando.

Como exemplo da utilização de classes e objetos, podemos utilizar a classe conta, que define uma conta bancária

bastante simples, com funções para ver saldo e fazer um crédito.

class conta { var $saldo; function saldo() { return $this->saldo; } function credito($valor) { $this->saldo += $valor; }}

85

Page 86: Apostila Web Php

$minhaconta = new conta; $minhaconta->saldo(); // a variavel interna não foi

// inicializada, e não contém// valor algum

$minhaconta->credito(50);$minhaconta->saldo(); // retorna 50

SubClasses

Uma classe pode ser uma extensão de outra. Isso significa que ela herdará todas as variáveis e funções da outra

classe, e ainda terá as que forem adicionadas pelo programador. Em PHP não é permitido utilizar herança múltipla, ou seja, uma

classe pode ser extensão de apenas uma outra.Para criar uma classe extendida, ou derivada de outra, deve ser utilizada a palavra

reservada extends, como pode ser visto no exemplo seguinte:

class novaconta extends conta { var $numero; function numero() { return $this->numero; }}

A classe acima é derivada da classe conta, tendo as mesmas funções e variáveis, com a adição da variável $numero

e a função numero().

Construtores

Um construtor é uma função definida na classe que é automaticamente chamada no momento em que a classe é

instanciada (através do operador new). O construtor deve ter o mesmo nome que a classe a que pertence. Veja o exemplo:

class conta { var $saldo;

function conta () { $this.saldo = 0; }

function saldo() { return $this->saldo; } function credito($valor) { $this->saldo += $valor; }}

Podemos perceber que a classe conta agora possui um construtor, que inicializa a variável $saldo com o valor 0.

Um construtor pode conter argumentos, que são opcionais, o que torna esta ferramenta mais poderosa. No exemplo

acima, o construtor da classe conta pode receber como argumento um valor, que seria o valor inicial da conta.

86

Page 87: Apostila Web Php

Vale observar que para classes derivadas, o construtor da classe pai não é automaticamente herdado quando o

construtor da classe derivada é chamado.

87

Page 88: Apostila Web Php

12. Considerações Finais

Essa disciplina possibilitou o estudo da linguagem PHP, que se mostrou uma ferramenta poderosa e simples de

utilizar na construção de sites para a World Wide Web dinâmicos, possibilitando uma maior interação com o usuário e a

armazenagem das informações em Bancos de Dados.

Após a conclusão da aplicação, tornou-se claro que a combinação de scripts server-side, como é o PHP, com

scripts client-side, como JavaScript, por exemplo, possibilita um maior aproveitamento dos recursos disponíveis para criar páginas

dinâmicas, e no processo de criação deve-se ponderar bastante para concluir qual dos dois tipos de scripts deve ser utilizado para

determinado fim.

Entre as linguagens de script server-side, PHP surgiu como uma ótima opção, por diversos motivos: o custo de

aquisição, que não existe; a portabilidade, permitindo que uma aplicação seja desenvolvida em uma plataforma para ser executada

em outra; a simplicidade, já que os scripts ficam no próprio código html, e possuem uma sintaxe bastante simples; a possibilidade de

trabalhar com diversos bancos de dados e servidores http, além do grande número de funções pré-definidas, entre outras coisas.

88

Page 89: Apostila Web Php

13. Bibliografia e Referências

Esta apostila foi baseada no manual de PHP, disponível em www.php.net, e em diversos tutoriais disponíveis no

site www.phpbuilder.com. Esses dois endereços contém uma vasta documentação sobre a linguagem, além de endereços para listas

de discussão, onde pode-se solicitar ajuda de programadores mais experientes.

Uma boa referência em português é a lista “PHP para quem fala Português”, que pode ser assinada no endereço

www.egroups.com/group/php-pt/.

Em inglês, além dos endereços citados acima, uma boa fonte é o site PHPWizard, que pode ser encontrado em

www.phpwizard.net.

89

Page 90: Apostila Web Php

APÊNDICE 01 - Funções para tratamento de strings

Funções relacionadas a HTML

htmlspecialchars

string htmlspecialchars(string str);

Retorna a string fornecida, substituindo os seguintes caracteres:

& para '&amp;'

" para '&quot;'

< para '&lt;'

> para ‘&gt;'

htmlentities

string htmlentities(string str);

Funciona de maneira semelhante ao comando anterior, mas de maneira mais completa, pois converte todos os

caracteres da string que possuem uma representação especial em html, como por exemplo:

º para '&ordm;'

ª para '&ordf;'

á para '&aacute;'

ç para ‘&ccedil;'

nl2br

string nl2br(string str);

Retorna a string fornecida substituindo todas as quebras de linha (“\n”) por quebras de linhas em html (“<br>”).

Exemplo:echo nl2br(“Mauricio\nVivas\n”);

Imprime:Maurício<br>Vivas<br>

get_meta_tags

array get_meta_tags(string arquivo);

90

Page 91: Apostila Web Php

Abre um arquivo html e percorre o cabeçalho em busca de “meta” tags, retornando num array todos os valores

encontrados.

Exemplo:No arquivo teste.html temos:...<head><meta name="author" content="jose"><meta name="tags" content="php3 documentation">...</head><!-- busca encerra aqui -->...

a execução da função:

get_meta_tags(“teste.html”);

retorna o array:

array(“author”=>”jose”,”tags”=>"php3 documentation");

strip_tags

string strip_tags(string str);

Retorna a string fornecida, retirando todas as tags html e/ou PHP encontradas.

Exemplo:strip_tags('<a href="teste1.php3">testando</a><br>');

Retorna a string “testando”

urlencode

string urlencode(string str);

Retorna a string fornecida, convertida para o formato urlencode. Esta função é útil para passar variáveis para uma

próxima página.

urldecode

string urldecode(string str);

Funciona de maneira inversa a urlencode, desta vez decodificando a string fornecida do formato urlencode para

texto normal.

91

Page 92: Apostila Web Php

Funções relacionadas a arrays

Implode e join

string implode(string separador, array partes);string join(string separador, array partes);

As duas funções são idênticas. Retornam uma string contendo todos os elementos do array fornecido separados

pela string também fornecida.

Exemplo:$partes = array("a", "casa número", 13, "é azul");$inteiro = join(" ",$partes);

$inteiro passa a conter a string: “a casa número 13 é azul”

split

array split(string padrao, string str, int [limite]);

Retorna um array contendo partes da string fornecida separadas pelo padrão fornecido, podendo limitar o número

de elementos do array.

Exemplo:$data = “11/14/1975”;$data_array = split(“/”,$data);

O código acima faz com que a variável $data_array receba o valor:array(11,14,1975);

explode

array explode(string padrao, string str);

Funciona de maneira bastante semelhante à função split, com a diferença que não é possível estabelecer um limite

para o número de elementos do array.

92

Page 93: Apostila Web Php

Comparações entre strings

similar_text

int similar_text(string str1, string str2, double [porcentagem]);

Compara as duas strings fornecidas e retorna o número de caracteres coincidentes. Opcionalmente pode ser

fornecida uma variável, passada por referência (ver tópico sobre funções), que receberá o valor percentual de igualdade entre as

strings. Esta função é case sensitive, ou seja, maiúsculas e minúsculas são tratadas como diferentes.

Exemplo:

$num = similar_text("teste", "testando",&$porc);

As variáveis passam a ter os seguintes valores:

$num == 4; $porc == 61.538461538462

strcasecmp

int strcasecmp(string str1, string str2);

Compara as duas strings e retorna 0 (zero) se forem iguais, um valor maior que zero se str1 > str2, e um valor

menor que zero se str1 < str2. Esta função é case insensitive, ou seja, maiúsculas e minúsculas são tratadas como iguais.

strcmp

int strcasecmp(string str1, string str2);

Funciona de maneira semelhante à função strcasecmp, com a diferença que esta é case sensitive, ou seja,

maiúsculas e minúsculas são tratadas como diferentes.

strstr

string strstr(string str1, string str2);string strchr(string str1, string str2);

As duas funções são idênticas. Procura a primeira ocorrência de str2 em str1. Se não encontrar, retorna uma string

vazia, e se encontrar retorna todos os caracteres de str1 a partir desse ponto.

Exemplo:

strstr("Jose Silva", "Sil"); // retorna “Silva”

93

Page 94: Apostila Web Php

stristr

string strstr(string str1, string str2);

Funciona de maneira semelhante à função strstr, com a diferença que esta é case insensitive, ou seja, maiúsculas e

minúsculas são tratadas como iguais.

strpos

int strpos(string str1, string str2, int [offset] );

Retorna a posição da primeira ocorrência de str2 em str1, ou zero se não houver. O parâmetro opcional offset

determina a partir de qual caracter de str1 será efetuada a busca. Mesmo utilizando o offset, o valor de retorno é referente ao início

de str1.

strrpos

int strrpos(string haystack, char needle);

Retorna a posição da última ocorrência de str2 em str1, ou zero se não houver.

Funções para edição de strings

chop

string chop(string str);

Retira espaços e linhas em branco do final da string fornecida.

Exemplo:chop(“ Teste \n \n “); // retorna “ Teste”

ltrim

string ltrim(string str);

Retira espaços e linhas em branco do final da string fornecida.

Exemplo:ltrim(“ Teste \n \n “); // retorna “Teste \n \n”

94

Page 95: Apostila Web Php

trim

string trim(string str);

Retira espaços e linhas em branco do início e do final da string fornecida.

Exemplo:trim(“ Teste \n \n “); // retorna “Teste”

strrev

string strrev(string str);

Retorna a string fornecida invertida.

Exemplo:

strrev(“Teste”); // retorna “etseT”

strtolower

string strtolower(string str);

Retorna a string fornecida com todas as letras minúsculas.

Exemplo:

strtolower(“Teste”); // retorna “teste”

strtoupper

string strtoupper(string str);

Retorna a string fornecida com todas as letras maiúsculas.

Exemplo:

strtolower(“Teste”); // retorna “TESTE”

ucfirst

string ucfirst(string str);

Retorna a string fornecida com o primeiro caracter convertido para letra maiúscula.

95

Page 96: Apostila Web Php

Exemplo:

ucfirst(“teste de funcao”); // retorna “Teste de funcao”

ucwords

string ucwords(string str);

Retorna a string fornecida com todas as palavras iniciadas por letras maiúsculas.

Exemplo:

ucwords(“teste de funcao”); // retorna “Teste De Funcao”

str_replace

string str_replace(string str1, string str2, string str3);

Altera todas as ocorrências de str1 em str3 pela string str2.

Funções diversas

chr

string chr(int ascii);

Retorna o caracter correspondente ao código ASCII fornecido.

ord

int ord(string string);

Retorna o código ASCII correspontente ao caracter fornecido.

echo

echo(string arg1, string [argn]... );

96

Page 97: Apostila Web Php

Imprime os argumentos fornecidos.

print

print(string arg);

Imprime o argumento fornecido.

strlen

int strlen(string str);

Retorna o tamanho da string fornecida.

97

Page 98: Apostila Web Php

Exercícios

98

Page 99: Apostila Web Php

99

Page 100: Apostila Web Php

CÓDIGO FONTE

<html>

<head>

<title>Clientes</title>

</head>

<body bgcolor="#CCCCCC" link="#000000" vlink="#000000" alink="#000000"

background="fundo.jpg">

<font face="Arial" color="#000000">

<table border =0 width = 100% height = 1% bgcolor = #BBBBBB background="fundoPrincipal.gif">

<td><h2>Clientes</h2></td>

<td ><a href='principal.htm'><div align="right">Principal</div ></a></td>

<HR>

</table>

<?

$arquivo ="clientes.php";

if(empty($opcoes)){

print "<form action='$arquivo' method='post'>";

print "<input type='submit' name='opcoes' value='Cadastrar'> ";

print "<input type='submit' name='opcoes' value='Consultar'> ";

print "<input type='submit' name='opcoes' value='Alterar'> ";

print "<input type='submit' name='opcoes' value='Excluir'> ";

print "</form>";

}//end if

else

100

Page 101: Apostila Web Php

switch($opcoes){

case "Cadastrar":

func_cadastrar();

break;

case "Consultar":

func_consultar();

break;

case "Alterar":

func_alterar();

break;

case "Excluir":

func_excluir();

break;

}//end switch

//*****************************************************************************

function func_cadastrar(){

global $banco;

global $usuario;

global $senha;

global $arquivo;

global $opcoes;

global $confirmar;

global $codigo;

global $razao_social;

global $endereco;

101

Page 102: Apostila Web Php

global $telefone;

if(empty($razao_social)){

print "<h3>Preencha os dados:</h3><P>";

print "<form action='$arquivo' method='post'>";

print "<input type='hidden' name='opcoes' value='$opcoes'>";

print "<input type='hidden' name='razao_social' value='$razao_social'>";

print "<input type='hidden' name='endereco' value='$endereco'>";

print "<input type='hidden' name='telefone' value='$telefone'>";

print "<table>";

print "<tr><td>Razão Social: </td>";

print "<td><input type='text' name='razao_social' value='$razao_social' size=50></td></tr>";

print "<tr><td>Endereço: </td>";

print "<td><input type='text' name='endereco' value='$endereco' size=50></td></tr>";

print "<tr><td>Telefone: </td>";

print "<td><input type='text' name='telefone' value='$telefone' size=10

maxlenght=10></td></tr>";

print "</table><P>";

print "<input type='submit' value='Cadastrar'> ";

print "<input type='reset' value='Limpar'> ";

print "</form>";

}//end if

else{

if(empty($confirmar)){

102

Page 103: Apostila Web Php

$razao_social = strtoupper("$razao_social");

$endereco = strtoupper("$endereco");

print "<H3>Confirmar?</H3><P>";

print "<table>";

print "<tr><td><b>Razão Social:</b> <td>$razao_social</td></tr>";

print "<tr><td><b>Endereço:</b> <td>$endereco</td></tr>";

print "<tr><td><b>Telefone:</b> <td>$telefone</td></tr>";

print "</table>";

print "<form action='$arquivo' method='post'>";

print "<input type='hidden' name='opcoes' value='$opcoes'>";

print "<input type='hidden' name='razao_social' value='$razao_social'>";

print "<input type='hidden' name='endereco' value='$endereco'>";

print "<input type='hidden' name='telefone' value='$telefone'>";

print "<input type='submit' name='confirmar' value='$Confirmar'>";

}//end if

else{

$conn=mysql_connect('localhost','usuario','senha');

mysql_select_db('kiko');

$p_sql = "insert into cliente (cli_razaosocial, cli_endereco, cli_telefone)

values('$razao_social', '$endereco', '$telefone')";

$gravar = mysql_query($conn, $p_sql);

if($gravar)

print "Cliente Cadastrado com sucesso!";

else

103

Page 104: Apostila Web Php

print "Falha em algum dos passos.";

mysql_close($conn);

}//end else

}//end else

print "<hr><a href='principal.htm' font color='#CCFFFF'><h3>Voltar<h3></a>";

}//end function

104