Você está na página 1de 28

PHP par a quem

conhece PHP
Recur sos avanados par a a cr i ao de
Websi t es di nmi cos

Jul i ano Ni eder auer
1 9 1 9 1 9 1 9 1 9
Capt ul o 1
Revi so de PHP
Este um livro que aborda tpicos avanados da linguagem PHP (www.php.net).
Porm, paravoc que teve pouco ou nenhum contato com essalinguagem, este cap-
tulo ser de grande importncia. Ele contm uma reviso de PHP, apresentando sua
sintaxe bsica e ensinando a utilizar constantes, variveis, operadores e estruturas de
controle (como if, switch, while e for). Alm disso, ser mostrado como realizar ope-
raes sobre um banco de dados MySQL, que um sistema bastante utilizado com o
PHP. Se voc j for um programador mais experiente, pode passar diretamente ao
prximo captulo.
I ni ci ando em PHP
Um programa PHPpode ser escrito em qualquer editor de texto, como por exemplo
o Bloco de Notas(Notepad) do Windowsou o VI do Linux. Jexistem tambm diver-
sos editores especficos para o PHP, que exibem cada elemento (variveis, textos,
palavras reservadas etc.) com cores diferentes, para melhorar a visualizao.
Um trecho de cdigo PHPdeve estar entre astags<?php e ?>, paraque o servidor Web
possareconhecer que trata-se de um cdigo de programao e possachamar o inter-
pretador PHP para execut-lo. Para comear a treinar, abra o editor de texto de sua
preferncia e digite as linhas a seguir.
<? php
/ / Le ga l , e s t ou e s c r e ve ndo me u pr i me i r o pr ogr a ma e m PHP
e c ho <h1 a l i gn= c e nt e r >Es t e me u pr i me i r o pr ogr a ma ! </ h1> ;
? >
Salve esse programa como prog1.php e envie-o para o diretrio que voc est utili-
zando para hospedar o site. Esse programa vai gerar como resultado a frase Este
meu primeiro programa! centralizada na pgina, conforme mostrado na figura 1.1.
Para ver o resultado, basta voc acessar pelo navegador (browser) o endereo http:/
/ <seu_endereo>/ prog1.php, onde voc deve substituir <seu_endereo> pelo ende-
reo do servidor que est utilizando para executar os programas PHP.
2 0 2 0 2 0 2 0 2 0 PHP para quem conhece PHP
Figura 1.1 Resultado do programa prog1.php.
A seguir apresentado o significado de cada uma das linhas que voc digitou no
programa prog1.php:
El ement o Descri o
<?php Indica o incio de um trecho de cdigo PHP.
// Representa uma linha de comentrio. Tudo que vem aps estas barras na mesma linha
ignorado pelo PHP. Os comentrios so muito teis para uma boa documentao do
seu programa. As duas barras servem para transformar uma nica linha em comentrio,
mas voc pode usar o /* para iniciar uma seqncia de comentrios, e depois finalizar os
comentrios com o */.
echo Um dos comandos mais utilizados em PHP. Serve para escrever alguma coisa na tela.
?> Indica o trmino de um trecho de cdigo PHP.
Se voc escolher aopo Exibir-Cdigo-fonte em seu navegador, voc vero cdigo
que seu browser recebeu, que foi o seguinte:
<h1 a l i gn= c e nt e r >Es t e me u pr i me i r o pr ogr a ma ! </ h1>
Note que o navegador no recebe nenhuma linha em PHP. Ele recebe somente cdi-
go HTML puro. Isso acontece porque o PHProda no servidor, que processa todos os
trechos de programao e retorna somente o resultado final para o navegador.
Dica: quando as pginas possuem extenso .html, o servidor Web as tratar como HTML puro, e no
reconhecer cdigos PHP. Se a pgina possuir extenso .php, o servidor Web ir testar linha a linha em
busca de cdigos de programao, por isso o processo fica um pouco mais lento. Por essa razo, s
coloque extenso .php nas pginas que realmente possuem cdigos PHP, seno voc estar gastando
tempo desnecessrio, procurando a cada linha cdigos que no existem na pgina.
Em relao velocidade de processamento, podemos fazer uma pequena compara-
o entre o PHPe alinguagem ASP(Active Server Pages), daMicrosoft. Mesmo que as
pginas .php demorem um pouco mais para serem processadas do que as pginas
com HTML puro, diversos testes realizados por programadores americanos j com-
provaram que elasso processadasmuito maisrpido do que aquelasque usam pro-
gramao ASP. Alm disso, o PHPpossui um gerenciamento de memria superior ao
do ASP.
2 1 2 1 2 1 2 1 2 1
Embut i ndo PHP na HTML
Normalmente uma pgina PHP no contm apenas cdigos de programao PHP,
mas tambm tags de marcao HTML. Enquanto o PHPrepresenta a parte dinmica
da pgina, a HTML representa a parte esttica. Ou seja, toda vez que voc acessar a
pgina, a sada HTML ser a mesma, enquanto que a sada gerada pelos cdigos PHP
pode ser diferente a cada acesso.
AstagsHTMLdevem aparecer foradastags<?php e?>, poisestasdelimitam um trecho
de programa PHP. Dentro dessas tags at podem aparecer tags HTML, mas somente
se utilizarmos um comando de exibio (como o echo) para escrev-las.
Voc pode concatenar scripts PHP com tags HTML, podendo dessa forma, escrever
vrios trechos de cdigo PHP em uma nica pgina. Cada script PHP existente na
pgina deve comear com a tag <?php, e terminar com ?>. A maioria das linhas de
programao que sero escritasentre astagsdeve terminar com o caractere ; (ponto-
e-vrgula), seno ocorrero erros no momento da execuo da pgina. Entre essas
tags voc pode escrever programas, utilizando todos os recursos que o PHPlhe ofe-
rece, como definio e chamada de funes, acesso a banco de dados, atribuio de
valores a variveis, frmulas matemticas etc.
Essa combinao entre HTML e PHP muito til, pois ns utilizamos o PHP para
gerar os dados de forma dinmica, enquanto que o HTML utilizado para formatar e
exibir esses dados nas pginas mostradas no navegador.
Vamos ver um exemplo que mistura HTML e PHPpara mostrar a data atual. Digite o
seguinte programa em seu editor de textos, e salve-o como prog2.php:
<ht ml >
<body>
<? php
$da t a _de _hoj e = da t e ( d/ m/ Y , t i me ( ) ) ;
? >
<p a l i gn= c e nt e r >Hoj e di a <? php e c ho $da t a _de _hoj e ; ? ></ p>
</ body>
</ ht ml >
Note acombinao existente entre astagsHTMLe o cdigo PHP. No incio do progra-
maatribumosadataatual varivel $data_de_hoje , utilizando o comando date. Essa
varivel estar disponvel para uso em qualquer parte da pgina. Depois utilizamos
HTML para escrever a frase Hoje dia, e completamos abrindo um novo trecho de
PHP, escrevendo a data atual armazenada na varivel $data_de_hoje por meio do
comando echo.
Exi bi ndo a pgi na no navegador
Para o navegador mostrar alguma coisa na tela necessrio que a pgina tenha pelo
menosum comando de exibio (como o echo) paraescrever algo, ou ento coman-
dos HTML que escrevam o contedo da pgina. Porm, somente se for usado o co-
Captulo 1 Reviso de PHP
2 2 2 2 2 2 2 2 2 2 PHP para quem conhece PHP
mando echo ou algum outro comando PHP que produza uma sada na tela, voc
realmente ter informaes dinmicas, pois o HTML esttico, imprime sempre as
mesmas informaes na tela. Veja o seguinte exemplo:
<ht ml >
<body>
<? php
$ba s e = 10;
$a l t ur a = 20;
$a r e a = $ba s e * $a l t ur a ;
? >
</ body>
</ ht ml >
Salve esse programa como prog3.php e veja o resultado em seu navegador. Perceba
que no h nenhum comando echo no programa, por isso seu navegador mostrar
uma tela em branco. Os valores atribudos s variveis ficaram armazenados apenas
na memria, mas no foram mostrados na tela. Ao visualizar o cdigo-fonte recebido
pelo navegador, voc ver apenas as tags do HTML:
<ht ml >
<body>
</ body>
</ ht ml >
Vejamos agora um exemplo parecido com o anterior, mas dessa vez vamos utilizar o
comando echo para mostrar informaes na tela. Digite o seguinte programa em seu
editor de textos e salve-o como prog4.php:
<ht ml >
<body>
<? php
$pa i s = Br a s i l ;
$f r a s e = O $pa i s pe nt a c a mpe o mundi a l de f ut e bol ;
e c ho <h2 a l i gn=c e nt e r >$f r a s e </ h2> ;
? >
</ body>
</ ht ml >
Abrindo essapginaem seu navegador, voc obtero resultado exibido nafigura1.2:
Figura 1.2 Resultado gerado pelo programa prog4.php.
2 3 2 3 2 3 2 3 2 3
Com essesexemplosvocdescobriu duasinformaesfundamentais:
1) aimportnciado comando echo: paragerar dadosdinmicosfundamental domi-
nar esse comando ou algum outro que produzasadanatela.
2) ainterpolao devariveis: daqui em diantevocvai usar muito essatcnica. Trata-
se da incluso do valor de uma varivel dentro da outra, como, por exemplo, em
nosso programaprog4.php, navarivel chamada$frase, inclumoso valor davari-
vel $pais. Ou seja, dentro dastring queatribudaaumavarivel podemoscolocar
outra varivel, e na hora do processamento do programa o PHP ir substituir a
varivel pelo seu valor.
Como veremosno tpico sobrevariveis, importantelembrar queemPHPasvariveis
comeam sempre pelo smbolo de cifro ($).
Const ant es
So valoresqueso predefinidosno incio do programaequeno mudam ao longo de
suaexecuo. Vocpodedefinir suasprpriasconstantes, utilizando o comando defi-
ne. Leveemconsiderao que, por padro, o PHPdiferencialetrasmaisculasemins-
culas. O nomedaconstantedeveser referenciado no programaexatamentedo mesmo
modo que voc adefiniu. A sintaxe do comando define aseguinte:
bool de f i ne ( s t r i ng bool de f i ne ( s t r i ng bool de f i ne ( s t r i ng bool de f i ne ( s t r i ng bool de f i ne ( s t r i ng nome , mi s t o , mi s t o , mi s t o , mi s t o , mi s t o va l or [ , bool [ , bool [ , bool [ , bool [ , bool c a s e _i ns e ns i t i ve ] ) ] ) ] ) ] ) ] )
Ondenomeo nomequevocvai utilizar pararepresentar aconstante, valor umvalor
qualquer (numrico ou alfanumrico) aser atribudo aelaecase_insensitiveumvalor
lgico (trueou false) queindicaseo PHPdevediferenciar letrasmaisculaseminscu-
lasquando houver umarefernciaaessaconstante. Vejao exemplo aseguir, nomeado
como prog5.php, que mostracomo devemosusar asconstantes:
7 pr og5. php
<ht ml >
<body>
<?php
def i ne ( meunome, Jul i ano Ni eder auer ) ;
def i ne ( peso, 78) ;
echo Omeu nome . meunome;
echo <br >;
echo Omeu pes o . pes o . qui l os ;
?>
</ body>
</ ht ml >
Executando esseprograma, voctero seguinteresultado em seu navegador:
Omeu nome J ul i ano Ni eder auer
Omeu pes o 78 qui l os
Captulo 1 Reviso de PHP
2 4 2 4 2 4 2 4 2 4 PHP para quem conhece PHP
Note que no exemplo que acabamosde ver, referenciamosasconstantesdiretamente
pelo nome que escolhemos, e no utilizamos na frente delas o smbolo $, pois esse
smbolo utilizado apenas para representar variveis.
Outro recurso que utilizamos neste exemplo foi a concatenao, representada pelo
ponto (.). Podemosconcatenar quantosdadosquisermos, e todoselessero exibidos
como apenas uma seqncia de caracteres.
Alm de voc poder definir suas prprias constantes, o PHPj possui diversas cons-
tantes predefinidas. A tabela a seguir mostra algumas:
Const ant e Descri o
TRUE Valor verdadeiro (utilizado para comparao).
FALSE Valor falso.
__FILE__ Contm o nome do script que est sendo executado.
__LINE__ Contm o nmero da linha do script que est sendo executado.
PHP_VERSION Contm a verso corrente do PHP.
PHP_OS Nome do sistema operacional no qual o PHP est rodando.
E_ERROR Exibe um erro ocorrido em um script. A execuo interrompida.
E_WARNING Exibe uma mensagem de aviso do PHP. A execuo no pra.
E_PARSE Exibe um erro de sintaxe. A execuo interrompida.
E_NOTICE Mostra que ocorreu algo, no necessariamente um erro. A execuo no pra.
Var i vei s
Asvariveisservemparaarmazenar dadosquepodemser usadosemqualquer ponto do
programa. Cadavarivel estassociadaaumaposio dememriadeseu computador.
Ao contrrio delinguagenstradicionais, como C, Pascal eDelphi, no PHPno neces-
srio fazer declarao de variveis. Bastaatribuir diretamente um valor aela, e apartir
dessemomento elajestarcriadaeassociadaaumtipo (numrico, alfanumrico etc.),
dependendo do valor quelhefoi atribudo.
J vimos que em PHPas variveis devem iniciar com o smbolo $. Aps esse smbolo
deve vir o identificador da varivel, ou seja, o nome pelo qual ela ser referenciada
durante a execuo do programa. Esse identificador no pode iniciar com um nme-
ro. Os nmeros podem aparecer em qualquer posio do identificador, menos na
primeira. Exemplos de variveis vlidas e invlidas:
Vl i das
$nota1
$casal20
$bisc8
$gremio_2_vezes_campeao_america
2 5 2 5 2 5 2 5 2 5
Invl i das
$100vergonha
$5
$20assustar
$60nacadeira
recomendvel quevocutilizesempreidentificadorescom letrasminsculas, poiso
PHPfaz adistino entremaisculaseminsculas. Sevoccomear amisturar osdois
tiposdeletras, podeocorrer umaconfuso nautilizao davarivel, jque$nota_aluno
no amesmacoisaque $Nota_aluno.
Imagineseumaluno tirou nota10, eessevalor foi armazenado navarivel $nota_aluno.
Na hora de imprimir a nota do aluno, voc digita a seguinte linha:
<? php
e c ho $Not a _a l uno;
? >
O aluno ser reprovado, pois voc imprimiu a varivel errada. Portanto tome cuida-
do: o PHPdistingue letras maisculas e minsculas para nomes de variveis.
Escopo das var i vei s
Em relao ao escopo, quando uma varivel utilizada dentro de uma funo, pode
haver uma outra varivel com o mesmo nome que utilizada em outrafuno, ou no
cdigo do programa principal. So espaos de memria diferentes, e cada um funci-
ona dentro do seu contexto, ou seja, a varivel definida dentro da funo s pode ser
acessada ali dentro. Fora dali seu valor no acessvel em nenhuma outra parte do
programa.
No entanto, possvel usar dentro de uma funo o valor de uma varivel existente
tambm no programa principal, e para isso h duas formas:
1) defini-la como global no incio da funo;
2) utilizar o array predefinido $GLOBALS, que utiliza os nomes das variveis como
chave associativa.
Como exemplo, acompanhe o programa prog6.php.
7 prog6.php
<? php
$num = 5000;
f unc t i on t e s t a _e s c opo1 ( )
{
gl oba l $num;
$num += 5;
e c ho $num . <br > ;
Captulo 1 Reviso de PHP
2 6 2 6 2 6 2 6 2 6 PHP para quem conhece PHP
}
echo $num. <br >;
t est a_escopo1( ) ;
?>
Ao executar esseprograma, sero mostradososseguintesvaloresnatela:
5000
5005
Isso ocorreu porqueno incio dafuno testa_escopo1foi indicado queavarivel $num
era a mesma utilizada globalmente. Desse modo todasasalteraesfeitasna varivel
$num dentro dafuno, alteraram o valor queexistianessavarivel global. Seretirsse-
mosdafuno adeclarao global, avarivel $num no seriareconhecida.
Var i vei s ger adas di nami cament e
Em diversasocasiesmuito til criarmosvariveisdinamicamente, ou seja, durantea
execuo do programa. Essatcnicafuncionaassim: utiliza-seo valor deumavarivel
paraservir como identificador paraoutraquecriada. Paraisso utilizamosduasvezeso
smbolo $, ou seja, devemosusar $$. Acompanhe o exemplo aseguir:
7 pr og7. php
<?php
$nome =Jul i ano;
$f ut ur o_i dent i f i cador =aut or ;
$$f ut ur o_i dent i f i cador =$nome;
echo Onome do aut or ;
echo $aut or ;
?>
Ao executar o programaprog7.php em seu navegador, vocveraseguintefrase:
Onome do aut or J ul i ano
Vejaqueavarivel $autor foi criadadinamicamente. Primeiro o valor autor foi atribu-
do varivel $futuro_identificador, edepoiscomo uso de$$, o valor autor tornou-se
o identificador da varivel recm-criada. A varivel criada $autor recebeu o valor da
varivel $nome, eem seguidaseu contedo foi mostrado natelaapsafraseO nome
do autor .
Guardebem esseconceito devariveiscom nomesdinmicos, poisexistiro situaes
em queesserecurso podeser anicasoluo pararesolver um problema.
2 7 2 7 2 7 2 7 2 7
Ar r ays
As variveis comuns (tambm chamadas de variveis escalares) podem armazenar
apenas um valor por vez. Um array (vetor) pode armazenar vrios valores ao mesmo
tempo, pois trata-se de uma estrutura de armazenamento que, assim como as vari-
veis, possui um identificador, mas alm disso h um ndice associado (que pode ser
um nmero ou um texto), e cada ndice indica uma posio de memria em que fica
armazenado um elemento do array. O ndice deve aparecer entre colchetes ([]) logo
aps o identificador do array.
Vamosver um exemplo paravoc entender melhor o conceito de array: naentradade
um edifcio h um daqueles armrios com diversas gavetas para guardar correspon-
dncias, umaparacadaapartamento. Podemoscomparar o armrio com o array, e os
apartamentoscom osndicesdo array. Ou seja, existe apenasum nome identificador,
que o armrio, mas, se um morador do edifcio chega para pegar suas correspon-
dncias, ele deve acessar a gaveta correspondente ao seu ndice, que o nmero do
seu apartamento.
Os arrays so muito teis quando precisamos realizar automatizao de tarefas em
nossos programas. Imagine que os nomes de todos os moradores de um edifcio de-
vem ser mostrados na tela.
Obviamente no seriavivel que utilizssemosvariveisescalaresparaarmazenar os
nomes. Se fossem 60 nomes, teramos 60 variveis, e para mostrar os valores na tela
deveramos usar 60 vezes o comando echo. Mas se os nomes dos 60 moradores esti-
vessem guardados em um array, bastaria que utilizssemos um comando de repeti-
o (que veremos mais adiante) para imprimir desde a primeira posio do array at
a ltima, ou seja, variando o ndice de 0 at 59. Veja a seguir alguns exemplos de
armazenamento em arrays:
$ve t or [ 0] = 30;
$ve t or [ 1] = 40;
$ve t or [ 5] = 50;
$ve t or [ 15] = 60;
Se no colocarmos o ndice do vetor entre colchetes, o PHP ir procurar o ltimo
ndice utilizado e increment-lo, armazenando assim o valor na posio seguinte do
array, conforme mostra o exemplo a seguir:
$ve t [ ] = Gr mi o ;
$ve t [ ] = Ca mpe o ;
Nesse exemplo teremos o valor Grmio armazenado em $vet[0] e o valor Cam-
peo armazenado em $vet[1].
At agora s vimos exemplos em que o ndice do array um valor numrico, mas o
ndice tambm pode ser um texto, e nessescasoso texto chamado de chave associ-
ativa.
Captulo 1 Reviso de PHP
2 8 2 8 2 8 2 8 2 8 PHP para quem conhece PHP
$vet or [ t i me] =Gr mi o;
$vet or [ t i t ul o] =Tet r acampeo da Copa do Br as i l ;
$vet or [ ano] =2001;
Reparequecadaposio do array podeser deumtipo diferente. Osvaloresdasposies
referenciadaspor time e ttulo so do tipo string, maso valor daposio referenciada
por ano numrico. Outracoisaquepodeacontecer o array possuir ndicesnumricos
estringsao mesmo tempo. No hproblemanenhum em usar osdoistiposdendices
no mesmo array.
Existem tambm as matrizes, que so arrays multidimensionais. Essas estruturas de
armazenamento tambm possuem um nico identificador, maspossuem doisou mais
ndicesparareferenciar umaposio de memria. Imagine que queremosarmazenar
na memria os nomes dos melhores clubes do futebol brasileiro, separando-os por
Estadose cidades. Podemosfazer isso utilizando um array bidimensional, como mos-
tra o exemplo a seguir:
$c l ube [ RS ] [ Por t oAl e gr e ] = Gr mi o ;
$c l ube [ RS ] [ Ca xi a s ] = J uve nt ude ;
$c l ube [ RS ] [ Be nt oGonc a l ve s ] = Es por t i vo ;
$c l ube [ MG ] [ Be l oHor i z ont e ] = At l t i c o ;
$c l ube [ MG ] [ Nova Li ma ] = Vi l a Nova ;
$c l ube [ MG ] [ I pa t i nga ] = I pa t i nga ;
$c l ube [ SP ] [ Sa oPa ul o ] = Cor i nt hi a ns ;
$c l ube [ SP ] [ Ame r i c a na ] = Ri o Br a nc o ;
Esse exemplo mostraum array bidimensional, maspodemosusar arrayscom maisde
duas dimenses, bastando acrescentar mais colchetes com seus respectivos ndices.
Outra forma de criar um array por meio da funo array do PHP. Veja o exemplo
prog8.php, apresentado a seguir:
7 prog8.php
<? php
$ve t or = a r r a y ( 10, 50, 100, 150, 200) ;
e c ho $ve t or [ 2] . <br > ;
$ve t = a r r a y ( 1, 2, 3, nome => J oa qui m ) ;
e c ho $ve t [ 0] . <br > ;
e c ho $ve t [ nome ] ;
? >
Aps a execuo desse programa os resultados mostrados na tela sero os seguintes:
100
1
J oa qui m
Lembre-se de que o array iniciado na posio 0 (zero), por isso, apesar de ser o
terceiro elemento do array, o 100 foi o primeiro valor mostrado, pois seu ndice 2.
Depois foi criado um array que possui ndices numricos e tambm uma chave associ-
ativa. Com o uso do comando echo mostramos na tela os valores de duas posies
desse array.
2 9 2 9 2 9 2 9 2 9
Obj et os
Tambm possvel programar em PHPcom o modelo orientado a objetos. Podemos
definir uma classe, e dentro dela as variveis e funes que estaro disponveis aos
seus objetos. Um objeto a varivel que utilizamos para instanciar uma classe. Se
voc algumavez jestudou programao orientadaaobjetos, esse conceito deve lhe
ser familiar. Veja um pequeno exemplo:
7 prog9.php
<? php
c l a s s t e s t e
{
f unc t i on Sa uda c a o( )
{
e c ho Oi pe s s oa l ! ;
}
}
$obj e t o = ne w t e s t e ; / / $obj e t o s e t or na uma e s t nc i a da c l a s s e t e s t e
$obj e t o - > Sa uda c a o( ) ;
? >
Ao criar uma instncia da classe na varivel $objeto, podemos acessar as funes
definidas dentro da classe. Esse programa mostrar a mensagem Oi pessoal!.
Uma das principais novidades do PHP5 o novo modelo de orientao a objetos. A
partir dessa verso, o PHP passa a operar com a Zend Engine 2.0. Para obter mais
informaes, consulte o Apndice B deste livro, que apresenta as principais novida-
des desse novo modelo.
Oper ador es
Como o prprio nome j diz, os operadores informam ao PHP quais as operaes
devem ser executadas com os valores recebidos, como por exemplo, atribuir um va-
lor aumavarivel, realizar operaesaritmticas(soma, subtrao etc.), realizar com-
parao de valores, testar se um maior ou menor que o outro etc. Veremos os se-
guintes tipos de operadores:
Operadores aritmticos
Operadores binrios
Operadores de comparao
Operadores de atribuio
Operadores lgicos
Operador ternrio
Captulo 1 Reviso de PHP
3 0 3 0 3 0 3 0 3 0 PHP para quem conhece PHP
Ar i t mt i cos
Utilizando essesoperadores, vocpoderefetuar qualquer operao matemticacom
dados do tipo numrico, como, por exemplo, somar, subtrair, multiplicar, dividir etc.
Confira a tabela com os operadores aritmticos do PHP:
Operador Operao
+ Adio
- Subtrao
* Multiplicao
/ Diviso
% Resto da diviso
O PHPpossui tambm outrosoperadoresaritmticos, que atuam em apenasum ope-
rando. Esses operadores so bastante teis, pois nos permitem realizar de forma sim-
ples operaes, como troca de sinal, incremento ou decremento de valor etc.
Se voc j programou em linguagem C, deve lembrar do incremento utilizando o
operador ++. No PHPtambm possvel utiliz-lo. Vamos conhecer todos esses ope-
radores com a tabela a seguir:
Operador Descri o
-oper Troca o sinal do operando.
++oper Pr-incremento. Primeiro incrementa o valor do operando e depois realiza a operao.
--oper Pr-decremento. Primeiro decrementa o valor do operando e depois realiza a operao.
oper++ Ps-incremento. Primeiro realiza a operao e depois incrementa o operando.
oper-- Ps-decremento. Primeiro realiza a operao e depois decrementa o operando.
Osoperadoresmostradosnestatabelatambm so conhecidoscomo operadoresun-
rios, pois necessitam apenas de um operando, ao contrrio da adio, subtrao e
outras operaes que necessitam de pelo menos dois operandos.
Por exemplo, se o objetivo for somente incrementar o valor de umavarivel, pode-se
simplesmente digitar o nome da varivel seguida do operador ++.
Exemplo:
$c ont a dor ++;
Naverdade essesoperadoresque acabamosde ver deixam seu programamuito mais
simples em PHP, pois com o uso deles voc pode fazer em apenas uma linha de
cdigo o que faria em duas ou mais linhas se no os usasse. Entendendo como eles
funcionam, seus cdigos ficaro mais simples e claros.
3 1 3 1 3 1 3 1 3 1
Bi nri os
Essesoperadoresatuam em um nvel de abstrao bem maisbaixo: trabalham direta-
mente com bits. Podem ser utilizados para fazer comparaes binrias (bit a bit), in-
verter os bits de um operando, deslocar bits para direita (cada deslocamento para a
direita equivale a uma diviso por 2) ou esquerda (cada deslocamento para a esquer-
da equivale a multiplicar o nmero por 2). Em alguns casos interessante usar os
operadores binrios. Veja a tabela a seguir para conhec-los:
Operador Descri o
~op1 Inverte os bits de op1.
op1 & op2 Operao E (AND) bit a bit.
op1 | op2 Operao OU (OR) bit a bit.
op1 ^ op2 Operao OU exclusivo (XOR).
op1 >> n Desloca op1 n bits direita.
op1 << n Desloca op1 n bits esquerda.
Vejaum exemplo:
7 pr og10.php
<ht ml >
<body>
<?php
$num= 50;
$des l ocado = $num>> 1; / / des l oca 1 bi t par a di r ei t a
echo $des l ocado;
?>
</ body>
</ ht ml >
No exemplo apresentado, o valor 50(queequivalea110010nabasebinria) deslocado
um bit adireita, o queequivaleadividi-lo por 2. Oresultado escrito natelaseradiviso
de50por 2, qued25(equivalentenabasebinriaa11001).
Percebaqueo nmero quevemapso operando >>representao nmero debitsqueo
operando serdeslocado paraadireita. Portanto setivermoso nmero 2, o nmero ser
dividido por 4 (duas divises sucessivas por 2). Se aps o operador >> houver um
nmero n, estaremos dividindo o operando por 2
n
.
Compar ao
Tambm chamadosde condicionais. So aquelesque executam comparaesentre o
valor de duasvariveis, ou de umavarivel e um texto, ou umavarivel e um nmero.
Com elespodemostestar, por exemplo, se uma varivel possui um valor maior que a
outra ou se possui um valor maior que determinado nmero, ou se o retorno dado
pela chamada de uma funo verdadeiro ou falso. Veja a tabela a seguir:
Captulo 1 Reviso de PHP
3 2 3 2 3 2 3 2 3 2 PHP para quem conhece PHP
Operador Descrio
op1 == op2 Verdadeiro se op1 for igual a op2.
op1 === op2 Verdadeiro se op1 for igual a op2 e se eles forem do mesmo tipo.
op1 >= op2 Verdadeiro se op1 for maior ou igual a op2.
op1 <= op2 Verdadeiro se op1 for menor ou igual a op2.
op1 != op2 Verdadeiro se op1 for diferente de op2.
op1 !== op2 Verdadeiro se op1 for diferente de op2 ou se eles no forem do mesmo tipo.
op1 <> op2 Tambm serve para representar diferena.
op1 > op2 Verdadeiro se op1 for maior que op2.
op1 < op2 Verdadeiro se op1 for menor que op2.
O operador decomparao ==podeser usado tanto nacomparao denmeroscomo
na comparao de textos, ao contrrio de outras linguagens, que utilizam comandos
especficos para comparao de dados alfanumricos.
At r i bui o
Atribuio o termo utilizado para representar a colocao de um valor em uma
varivel. A varivel que receber a atribuio encontra-se sempre do lado esquerdo
do operador, e esta recebe o valor gerado pela expresso ou operador que est a
direita. Alm disso temos diversas variaes dos comandos de atribuio, que pode-
mos utilizar para facilitar a programao. So operadores que, assim como os opera-
dores de incremento (++) e decremento (--), servem para deixar o cdigo mais sim-
ples e mais fcil de ser programado.
Veja a seguir a tabela dos comandos de atribuio:
Operador Descri o
op1 = op2 op1 recebe o valor de op2.
op1 += op2 Equivale a op1=op1+op2.
op1 -= op2 Equivale a op1=op1-op2.
op1 *= op2 Equivale a op1=op1*op2.
op1 /= op2 Equivale a op1=op1/op2.
op1 .= op2 Concatenao: equivale a op1=op1.op2.
op1 %= op2 Equivale a op1=op1%op2.
op1 <<= op2 Equivale a op1=op1<<op2.
op1 >>= op2 Equivale a op1=op1>>op2.
op1 &= op2 Equivale a op1=op1&op2.
op1 |= op2 Equivale a op1=op1|op2.
op1 ^= op2 Equivale a op1=op1^op2.
Dica: muitas vezes programas podem apresentar problemas devido troca do operador de comparao == pelo
operador de atribuio =. O programa acaba gerando resultado incorreto, pois se quisermos fazer uma comparao,
por exemplo, entre as variveis $a e $b, devemos usar a expresso $a==$b, e no $a=$b.
3 3 3 3 3 3 3 3 3 3
Vamosver um exemplo envolvendo operadoresdeatribuio:
7 pr og11.php
<ht ml >
<body>
<?php
$soma=0;
$val or 1 =10;
$val or 2 =20;
$val or 3 =30;
$s oma +=$val or 1; / / $s oma f i ca com10
$soma +=$val or 2; / / $s oma f i ca com10+20 = 30
$s oma *=$val or 3; / / $s oma f i ca com30*30 = 900
$s oma %=100; / / $s oma f i ca com900%100 = 0
echo $s oma;
?>
</ body>
</ ht ml >
Como vocpodever peloscomentriosdo programa, o valor quesermostrado natela
zero. O ltimo operador utilizado (%=) representa o resto da diviso (em outras
linguagens chamado de MOD). Dividindo 900 por 100 temos como resultado exa-
to 9, portanto o resto da diviso zero. No exemplo anterior utilizamos os operado-
res+=, *=e %=para atribuir varivel $somaresultadosde operaesrealizadasentre
aprpriavarivel $somae outro operando. Percebaque o cdigo ficabem maisclaro
e fcil de entender com o uso desses operadores de atribuio.
Lgi cos
So aqueles que retornam o valor verdadeiro ou falso. Veja a tabela:
Operador Descri o
!op1 Verdadeiro se op1 for falso.
op1 AND op2 Verdadeiro se op1 E op2 forem verdadeiros.
op1 OR op2 Verdadeiro se op1 OU op2 forem verdadeiros.
op1 XOR op2 Verdadeiro se s op1 ou s op2 for verdadeiro.
op1 && op2 Verdadeiro se op1 E op2 forem verdadeiros.
op1 || op2 Verdadeiro se op1 OU op2 forem verdadeiros.
Depoisdeobservar essatabela, vocprovavelmenteestcomdvidasquanto diferen-
aentreosoperadoresAND e&&, etambm osoperadoresORe| | . Adiferenaentre
elesaprecednciadosoperadoresnaavaliao deexpresses. Aprecednciamaisalta
dosoperadores&& e | | , enquanto osoperadoresAND e ORpossuem precedncia
mais baixa. Por isso, tome muito cuidado ao us-los, pois podem gerar resultados
diferentes, dependendo daordem em que forem colocados. Veremosmaisdiante um
tpico especial sobreprecednciadeoperadores.
Captulo 1 Reviso de PHP
3 4 3 4 3 4 3 4 3 4 PHP para quem conhece PHP
Um exemplo tpico no qual usamosoperadoreslgicos o caso de testar se todosos
campos obrigatrios de um formulrio foram preenchidos. Suponha que tenhamos
um formulrio em que os campos nome, e-mail e CPF so obrigatrios. Certamente
no programa que recebe os dados do formulrio haveria um teste, como o mostrado
no trecho de programa a seguir:
<?php
. . .
i f ( empt y( $nome) ORempt y( $emai l ) ORempt y( $cpf ) )
{
echo Voc deve pr eencher os campos nome, e- mai l e CPF! ;
exi t ;
}
. . .
?>
Nesseexemplo temosumaexpresso sendo avaliada. Afuno empty(), quesignifica
vazio em portugus, retorna verdadeiro se a varivel estiver vazia, e falso se houver
algo na varivel. Ento estamos testando se a variveil $nome est vazia ou a varivel
$email ou avarivel $cpf estvazia. Se pelo menosumadastrsestiver vaziao resul-
tado ser verdadeiro, e isso far com que seja impressa a mensagem Voc deve pre-
encher os campos nome, e-mail e CPF!, e logo aps o programa ser encerrado por
meio do comando exit.
Acompanhe astabelasaseguir paraver osresultadosgeradosem cadaum dosopera-
dores de acordo com o tipo de expresso avaliada:
Oper Oper Oper Oper Operador AND (E) ador AND (E) ador AND (E) ador AND (E) ador AND (E)
Exp1 Exp2 Resul t ado
V V V
V F F
F V F
F F F
Operador OR ( OU) Operador OR ( OU) Operador OR ( OU) Operador OR ( OU) Operador OR ( OU)
Exp1 Exp2 Resul t ado
V V V
V F V
F V V
F F F
Oper Oper Oper Oper Operador X ador X ador X ador X ador XOR ( OU excl usi vo) OR ( OU excl usi vo) OR ( OU excl usi vo) OR ( OU excl usi vo) OR ( OU excl usi vo)
Exp1 Exp2 Resul t ado
V V F
V F V
F V V
F F F
3 5 3 5 3 5 3 5 3 5
Oper ador ! ( NOT) Oper ador ! ( NOT) Oper ador ! ( NOT) Oper ador ! ( NOT) Oper ador ! ( NOT)
Exp1 Resul t ado
V F
F V
Ternri o
umaformaabreviadade usar o comando condicional if, que veremosmaisadiante.
Uma condio avaliada, e se ela for verdadeira, atribui-se um valor varivel, e se
for falsa atribui-se um outro valor. A sintaxe a seguinte:
c ond ? ?? ?? e xp1 : :: :: e xp2
Vamosver um exemplo de uso desse operador, emborasejamaisrecomendado utili-
zar o comando condicional if, por ser mais simples. Observe:
$not a = ( $f r e que nc i a >= 0. 75) ? ( $not a +2) : ( $not a - 2) ;
Quando o PHP executar a linha anterior, se a varivel $frequencia possuir um valor
maior ou igual a0,75, avarivel $notaseraumentadade duasunidades, caso contr-
rio haver a diminuio de duas unidades. Escrevendo essa mesma operao por
meio do comando if, temos o seguinte cdigo:
<? php
i f ( $f r e que nc i a >= 0. 75)
$not a = $not a +2;
e l s e
$not a = $not a - 2;
? >
Utilizando o comando if fica bem mais fcil entender qual o objetivo do cdigo,
poisconseguimosfazer perfeitamente adistino de qual acondio e quaisopera-
es sero executadas aps a avaliao desta.
Precednci a de oper adores
Para evitar erros de lgica em programas fundamental que voc conhea a ordem
utilizada pelo PHPpara tratar os operadores. A tabela a seguir mostra a ordem decres-
cente de precednciaque o PHPsegue ao encontrar diversosoperadoresno programa:
Operador Descri o
new Criao de objetos
[ Colchete
! ~ ++ -- (int) (float)
(string) (array)
(object) @ No-lgico, inverso de bits, incremento e decremento, converso de tipos e
controle de erro.
* / % Multiplicao, diviso e resto da diviso
Captulo 1 Reviso de PHP
3 6 3 6 3 6 3 6 3 6 PHP para quem conhece PHP
Operador Descrio (cont . )
+ - . Adio, subtrao e concatenao
<< >> Deslocamentos binrios
> < >= <= Maior, menor, maior ou igual, menor ou igual
== != <> === !== Igual e diferente
& AND binrio
^ XOR binrio
| OR binrio
&& AND lgico
| | OR lgico
?: Operador ternrio
= += -= *= /= %=
&= ~= <<= >>= ^= Operadores de atribuio
print Impresso.
AND AND lgico (de menor prioridade)
XOR XOR lgico (de menor prioridade)
OR OR lgico (de menor prioridade)
, vrgula
importantelembrar queprimeiro o PHPexecutartodasasoperaesqueestiverem
entreparnteses. Sedentro dosparnteseshouver diversasoperaes, aprecednciade
operadoresserusadaparadefinir aordem. Depoisderesolver todasasoperaesque
aparecementreparnteses, o PHPresolvero resto daexpresso baseando-senatabela
anterior paradeterminar aordem deavaliao dosoperadores.
Quando houver operadores de mesma prioridade em uma mesma expresso, e no
existirem parnteses, o PHPresolver a expresso da esquerda para a direita.
Observe o seguinte trecho de programa:
7 prog12.php
<? php
$num = 5;
$r e s ul t a do = 8 + 3 * 2 + ++$num;
e c ho $num<br > ;
e c ho $r e s ul t a do;
? >
O resultado mostrado na tela ser:
6
20
Observe que o operador ++tem prioridade maisaltaque osoperadores+e *, por isso
a primeira operao realizada pelo PHPfoi o incremento do valor da varivel $num.
O segundo operador de maior prioridade no exemplo apresentado o de multiplica-
3 7 3 7 3 7 3 7 3 7
o, portanto asegundaoperao realizadafoi 3*2. Apsessasduasoperaes, ficamos
com asoma8+6+6. Notequetemosdoisoperadoresiguais(deadio), portanto, como
tm amesmaprioridade, aexpresso avaliadadaesquerdaparaadireita: 8+6 =14. E
depois14+6 =20, que foi o resultado mostrado natela.
Analisando esseexemplo, vocpodeperceber aimportnciadaprecednciadosopera-
dores. Muitasvezeso uso incorreto dessasinformaescausaaexibio deresultados
erradosnasadadosprogramas.
Est r ut ur as de cont r ol e em PHP
So comandos comuns maioria das linguagens de programao, e o uso deles
fundamental para realizar decises lgicas, testar se determinada expresso verda-
deirae repetir um bloco de comandospor um certo nmero de vezesou at que uma
condio seja atingida. Veremos os seguintes comandos:
Comandos condicionais: if e switch.
Comandos de repetio: while, do...while, for e foreach.
Vamos ver ento como utilizar cada um deles.
i f
Comando que avalia uma expresso e, dependendo do resultado, executado um
conjunto diferente de instrues. O comando if pode possuir como complemento o
elseif e/ ou o else.
Observe a sintaxe do comando if:
I f ( (( (( e xp1 ) )) ))
{ {{ {{ bl oc o1 } }} }}
e l s e i f ( (( (( e xp2 ) )) ))
{ {{ {{ bl oc o2 } }} }}
e l s e
{ {{ {{ bl oc o3 } }} }}
Podemos ler essa sintaxe da seguinte maneira:
se exp1 for verdadeira, execute bloco1;
seno se exp2 for verdadeira, execute bloco2;
seno execute bloco3.
importante lembrar que apenas um dos blocos ser executado, e depois disso a
execuo continuar aps o comando if.
Captulo 1 Reviso de PHP
3 8 3 8 3 8 3 8 3 8 PHP para quem conhece PHP
Em portugus if significa se e o else significa seno. Dentro da construo do co-
mando if, podem aparecer diversoselseif, cadaum avaliando umaexpresso. Quando
aexpresso avaliadapelo comando if resultar emvalor verdadeiro (True), serexecuta-
do o bloco decomandosdefinido logo aseguir, queapareceentrechaves({ } ). Seno
houver adelimitao do bloco por chaves, serexecutadaapenasaprimeiralinhaaps
o if.
Apsexecutar essebloco decomandos, aexecuo do programaserdesviadaparao
fim do comando if, e as demais expresses (contidas no elseif e no else) no sero
avaliadas, poiso comando if escolhe apenasum entre vriosconjuntosde instrues
para execuo.
Se acondio avaliadano comando if for falsa(False), o bloco de comandosseguinte
no serexecutado, e sertestadaaexpresso contidano primeiro elseif (se houver).
Se todasasexpressesavaliadas(do if e do elseif) forem falsas, o bloco de comandos
executado ser aquele que vem aps o else.
importante destacar que no obrigatrio o uso de elseif e else com o comando if.
O if pode aparecer sozinho, simplesmente determinando se um bloco de instrues
ser executado ou no. Por exemplo:
<? php
i f ( $not a == 10)
{
e c ho Pa r a b ns ! <br > ;
e c ho Voc t i r ou a not a m xi ma !
}
? >
Nesse exemplo, se o valor da varivel $nota for igual a 10, ser mostrada na tela a
seguinte mensagem:
Pa r a b ns !
Voc t i r ou a not a m xi ma !
Se o valor davarivel $notano for igual a10, esse bloco de comandossimplesmente
no ser executado, e a execuo do programa seguir normalmente. Poderamos
acrescentar um else ao comando, e imprimir outra mensagem caso o aluno no tiras-
se nota 10.
sw i t ch
O comando switch parecido com o if, poisambosavaliam o valor deumaexpresso
para escolher qual bloco de instrues deve ser executado. Em algumas ocasies,
voc tem uma mesma varivel a ser testada com valores diferentes, e nesse caso
interessante utilizar o switch, que trabalha basicamente com o operador de igualda-
de, enquanto o if trabalhacom qualquer tipo de operador. Vejaasintaxe do comando
switch:
3 9 3 9 3 9 3 9 3 9
s wi t c h ( (( (( ope r a dor ) )) ))
{ {{ {{
c a s e va l or 1: :: ::
< << <<c oma ndos > >> >>
br e a k; ;; ;;
c a s e va l or 2: :: ::
< << <<c oma ndos > >> >>
br e a k; ;; ;;
. . . . . . . . . . . . . . . . . . . .
c a s e va l or N: :: ::
< << <<c oma ndos > >> >>
br e a k; ;; ;;
de f a ul t :
< << <<c oma ndos > >> >>
br e a k; ;; ;;
} }} }}
Perceba que aps cada bloco de comandos deve ser utilizado o break, para que o
comando switch seja encerrado e a execuo continue aps ele. Se no utilizarmoso
break o PHPcontinuaraexecuo dentro do switch, avaliando asdemaisexpresses.
Veja a seguir um exemplo de uso desse comando.
<? php
s wi t c h ( $nume r o)
{
c a s e s :
e c ho Voc e s c ol he u a op o SI M ;
br e a k;
c a s e n :
e c ho Voc e s c ol he u a op o NO ;
br e a k;
de f a ul t :
e c ho A op o di gi t a da i nv l i da ;
br e a k;
}
? >
A opo default tem a mesma funo da opo else no comando if. Se todas as ex-
presses anteriores retornarem falso, ser executado o bloco de comandos que apa-
rece aps o default. O uso do default no obrigatrio no comando switch.
w hi l e
Traduzindo parao portugus, while significaenquanto. O comando while compos-
to por uma expresso e por um bloco de comandos. O comando avalia a expresso,
e enquanto essa expresso retornar o valor verdadeiro, a execuo do bloco de co-
mandos em questo ser repetida. Quando o valor retornado for falso, encerra-se o
lao de repetio (loop), e a execuo transferida para o fim do comando while.
Assim como no comando if, devemosutilizar chavescomo delimitadoressempreque
o bloco possuir mais de uma instruo para executar.
Captulo 1 Reviso de PHP
4 0 4 0 4 0 4 0 4 0 PHP para quem conhece PHP
Vejaasintaxe do comando:
whi l e ( (( (( e xp ) )) ))
{ {{ {{
c oma ndos
} }} }}
Devemos tomar cuidado para no colocarmos no comando while expresses que
jamais se tornaro falsas, seno teremos um loop infinito, pois o PHP repetir para
sempre o bloco de instrues. Veja a seguir um exemplo de utilizao do while:
7 prog13.php
<? php
$c ont = 1;
whi l e ( $c ont <100)
{
e c ho O va l or a t ua l do c ont a dor $c ont <br > ;
$c ont ++;
}
? >
A execuo desse programa resultar em 99 linhas mostradas na tela:
O va l or a t ua l do c ont a dor 1
O va l or a t ua l do c ont a dor 2
O va l or a t ua l do c ont a dor 3
. . .
O va l or a t ua l do c ont a dor 99
Quando a varivel $cont atingir o valor 100, a expresso retornar o valor falso, pois
100 no menor que o prprio 100, e isso far com que o loop seja encerrado.
do...w hi l e
A diferena entre o while e o do...while que o while avalia a expresso no incio do
lao, e o do...while avalia a expresso no final do lao. Portanto, utilizando do...while
o lao ser executado pelo menos uma vez, e utilizando somente while o lao pode
no ser executado, caso a expresso avaliada retorne falso na primeira avaliao. A
sintaxe do comando a seguinte:
do
{ {{ {{
c oma ndos
} }} }} whi l e ( (( (( e xp) ; ) ; ) ; ) ; ) ;
Veja a seguir um exemplo:
4 1 4 1 4 1 4 1 4 1
7 pr og14.php
<?php
$numer o = 1;
do
{
echo Oval or at ual de nmer o $numer o <br >;
$numer o++;
} whi l e ( $numer o<4) ;
?>
O resultado gerado pelaexecuo desseprogramaser:
Oval or at ual de nmer o 1
Oval or at ual de nmer o 2
Oval or at ual de nmer o 3
f or
Utilizamoso comando for quando queremosexecutar um conjunto de instruesum
nmero determinado de vezes. um comando muito til que pode ser usado, por
exemplo, para imprimir todos os elementos de um array, ou todos os registros retor-
nados de uma consulta a um banco de dados.
A sintaxe do comando for a seguinte:
f or ( (( (( i ni c i a l i z a o ; ;; ;; c ondi o ; ;; ;; ope r a dor ) )) ))
{ {{ {{
c oma ndos
} }} }}
Como inicializao geralmente determinamos o valor inicial da varivel que contro-
laro loop. O parmetro de inicializao poderiaser $cont=0. No segundo parmetro
devemos colocar a condio que deve ser atingida para que o lao continue. Se qui-
sssemosexecutar o loop 20 vezes, o valor do parmetro de condio seria$cont<20.
Quando essacondio retornar o valor falso, o loop encerrado. O ltimo parmetro
geralmente usado para atualizar o valor da varivel de controle do loop, fazendo
um incremento ou um decremento (por exemplo, $cont++). Ao final de cada intera-
o do loop, o valor da varivel de controle atualizado automaticamente, depen-
dendo do terceiro parmetro que voc definiu quando utilizou o comando for. Veja
um exemplos de utilizao do comando:
7 prog15.php
<? php
f or ( $c ont =0 ; $c ont <10 ; $c ont ++)
{
e c ho A va r i ve l \ $c ont va l e $c ont ;
e c ho <br > ;
}
? >
Captulo 1 Reviso de PHP
4 2 4 2 4 2 4 2 4 2 PHP para quem conhece PHP
O resultado gerado pelaexecuo desseprogramasero seguinte:
Avar i vel $cont val e 0
Avar i vel $cont val e 1
. . .
Avar i vel $cont val e 9
f oreach
O comando foreach nosofereceumamaneiramaisfcil denavegar entreoselemen-
tosdeum array. Observeasduassintaxespossveis:
f o r e a c h f o r e a c h f o r e a c h f o r e a c h f o r e a c h ( $ n o me _ a r r a y a s a s a s a s a s $ e l e me n t o )
{
c oma ndos
}
ou
f or e a c h f or e a c h f or e a c h f or e a c h f or e a c h ( $nome _a r r a y a s a s a s a s a s $c ha ve => $va l or )
{
c oma ndos
}
A primeira forma vai do primeiro ao ltimo ndice do array definido na varivel
$nome_array, e a cada interao o valor do elemento corrente do array atribudo
varivel $elemento, e o ponteiro interno do array avanado. Dessaforma, podemos
trabalhar com todos os valores do array utilizando apenas a varivel $elemento.
A segunda forma faz a mesma coisa, mas com uma diferena: alm do valor do ele-
mento corrente do array ser atribudo varivel $elemento, a chave (ou ndice) do
elemento atual atribudo varivel $chave. Acompanhe o exemplo a seguir:
7 prog16.php
<? php
$ve t or = a r r a y ( 1, 2, 3, 4) ;
f or e a c h ( $ve t or a s $v)
{
pr i nt O va l or a t ua l do ve t or $v. <br > ;
}
$a = a r r a y ( um => 1, doi s => 2, t r e s => 3 ) ;
f or e a c h( $a a s $c ha ve => $va l or )
{
pr i nt \ $a [ $c ha ve ] => $va l or . <br > ;
}
? >
O programa apresentado mostrar na tela todos os valores do array $vetor, e depois
mostrar todas as chaves e valores do array $a. O segundo foreach desse exemplo
mostrar o seguinte:
$a [ um] => 1.
$a [ doi s ] => 2.
$a [ t r e s ] => 3.
4 3 4 3 4 3 4 3 4 3
I nt egr ao com bancos de dados
O PHPsuportadiversosSGBDs(SistemasdeGernciadeBancosdeDados), oferecen-
do um conjunto defunesparaexecutar operaes(consultas, incluses, alteraes,
excluses, etc.) sobre cada um deles. Entre eles temos: MySQL, PostgreSQL, SQLite,
InterBase, Oracle, SQLServer, Sybase, entreoutrosqueoferecem suportelinguagem
SQL (Structured Query Language). Os bancos de dados no suportados diretamente
pelo PHPpodem ser acessadosviaODBC. Oscomandosexistentesparacadaum dos
SGBDsesto disponveisnadocumentao do PHP, quepodeser obtidano siteoficial
(http:/ / www.php.net).
Este livro no tem o objetivo de ensinar alinguagem SQLou de mostrar como instalar
um determinado sistema de banco de dados. Neste tpico faremos apenas uma rpi-
da reviso de como utilizar o PHP para acessar e realizar consultas sobre o MySQL
(http:/ / www.mysql.com), que um dosSGBDsmaisutilizadoscom o PHP. Essarevi-
so ser importante, visto que alguns exemplos que sero apresentados nesse livro
necessitam de acesso ao banco de dados.
Mais adiante, no captulo 10, voc ir aprender outra forma de realizar operaes
sobre um banco de dados. Nele sero apresentadas bibliotecas de abstrao, que
visam oferecer um conjunto de comandos nico para acessar diferentes SGBDs.
Vamos ver ento as principais funes para operar sobre o MySQL. Antes de acessar
um banco de dadose comear arealizar operaessobre ele, precisamosestabelecer
uma conexo com o servidor MySQL. Para isso, utilizaremos a funo de conexo
mysql_connect, que possui a seguinte sintaxe:
r e c ur s o mys ql _c onne c t ( [ s t r i ng r e c ur s o mys ql _c onne c t ( [ s t r i ng r e c ur s o mys ql _c onne c t ( [ s t r i ng r e c ur s o mys ql _c onne c t ( [ s t r i ng r e c ur s o mys ql _c onne c t ( [ s t r i ng s e r vi dor [ , s t r i ng [ , s t r i ng [ , s t r i ng [ , s t r i ng [ , s t r i ng us u r i o [ , s t r i ng [ , s t r i ng [ , s t r i ng [ , s t r i ng [ , s t r i ng
s e nha
[ , bool [ , bool [ , bool [ , bool [ , bool novo_l i nk [ , i nt [ , i nt [ , i nt [ , i nt [ , i nt f l a gs _c l i e nt e ] ] ] ] ] ) ] ] ] ] ] ) ] ] ] ] ] ) ] ] ] ] ] ) ] ] ] ] ] )
Parm et ro Descri o
servidor Endereo do servidor no qual est localizado o banco de dados.
usurio Nome de usurio a ser utilizado para a abertura da conexo.
senha Senha a ser utilizada para a abertura da conexo.
novo_link Indica se deve ser aberto um novo link quando for feita mais de uma chamada a essa
funo com os mesmos parmetros.
flags_cliente Define algumas configuraes do cliente. Pode ser uma combinao das constantes
MYSQL_CLIENT_COMPRESS, MYSQL_CLIENT_IGNORE_SPACE e
MYSQL_CLIENT_INTERACTIVE.
Emcaso desucesso, essafuno retornao identificador daconexo, queposteriormen-
te serpassado como parmetro paraafuno de fechamento damesma. Em caso de
falha, retorna FALSE. Para fazer, por exemplo, a conexo com um banco de dados
chamado bdteste, que possui como nome de usurio juliano, e como senha teste,
poderamosexecutar o seguintecomando:
$conexao =mysql _connect ( l ocal host , j ul i ano, t est e) ;
Captulo 1 Reviso de PHP
4 4 4 4 4 4 4 4 4 4 PHP para quem conhece PHP
Seo banco dedadosestiver localizado em um servidor diferente, bastasubstituir loca-
lhost pelo nomeou endereo IPdesseservidor. Apsabrir aconexo, o prximo passo
selecionar por meio do comando mysql_select_db qual sero banco dedadosutiliza-
do. Por exemplo:
mysql _sel ect _db ( bdt est e) ;
A partir da, j podemos realizar operaes sobre o banco de dados. A funo PHP
responsvel por executar comandosSQL a mysql_query, que possui aseguinte sin-
taxe:
r e c ur s o mys ql _que r y ( s t r i ng r e c ur s o mys ql _que r y ( s t r i ng r e c ur s o mys ql _que r y ( s t r i ng r e c ur s o mys ql _que r y ( s t r i ng r e c ur s o mys ql _que r y ( s t r i ng c oma ndo [ , r e c ur s o [ , r e c ur s o [ , r e c ur s o [ , r e c ur s o [ , r e c ur s o i d_c one x o] ) ] ) ] ) ] ) ] )
Parm et ro Descri o
comando Comando SQL a ser executado.
id_conexo Pode ser usado caso exista mais de uma conexo aberta. Deve conter o
identificador da conexo na qual o comando deve ser executado.
No caso da execuo de comandos SELECT, a funo mysql_query ir retornar um
conjunto de resultados (se houver). Existem vrias formas de obter os valores desses
resul tados, uti l i zando f unes como mysql _resul t, mysql _fetch_row,
mysql_fetch_assoc e mysql_fetch_array. Apsrealizar todasasoperaesnecessrias,
devemosencerrar aconexo como banco dedadosexecutando afuno mysql_close.
Vamos ver rapidamente um exemplo de programa PHP que realiza todos os passos
descritosnesse tpico. Antesde criar o programa, vamoscriar uma tabela no MySQL,
na qual ficaro armazenados os dados. Essa tabela, que ir armazenar informaes
sobre livros, ser criada da seguinte forma no utilitrio mysql:
c r e a t e t a bl e l i vr os
(
i s bn va r c ha r ( 13) ,
t i t ul o va r c ha r ( 80) NOT NULL,
a ut or va r c ha r ( 80) NOT NULL,
pa gi na s s ma l l i nt NOT NULL,
pr e c o f l oa t NOT NULL
) ;
O programaPHPdeverabrir umaconexo com o servidor MySQL, selecionar todos
os nomes de livros e seus respectivos autores, e logo aps exibir essas informaes
na tela, uma em cada linha. Acompanhe ento o cdigo do programa prog17.php,
apresentado a seguir.
7 prog17.php
<? php
$s e r vi dor = l oc a l hos t ;
$us ua r i o = j ul i a no ;
$s e nha = 12345 ;
$ba nc o = t e s t ;
4 5 4 5 4 5 4 5 4 5
$c on = mys ql _c onne c t ( $s e r vi dor , $us ua r i o, $s e nha ) ;
mys ql _s e l e c t _db ( $ba nc o) ;
$r e s = mys ql _que r y( SELECT t i t ul o, a ut or FROM l i vr os ) ;
$num_l i nha s = mys ql _num_r ows ( $r e s ) ;
f or ( $i =0 ; $i <$num_l i nha s ; $i ++)
{
$da dos = mys ql _f e t c h_r ow ( $r e s ) ;
$t i t ul o = $da dos [ 0] ;
$a ut or = $da dos [ 1] ;
e c ho $t i t ul o - $a ut or <br > ;
}
mys ql _c l os e ( $c on) ;
? >
Veja que para percorrer o resultado com o comando for foi utilizada antes a funo
mysql_num_rows, que retorna o nmero de linhas resultantes em uma consulta SQL.
Ao executar esse programa no navegador, ser exibido, para cada um dos livros, o
seu ttulo e, ao lado, o nome do autor.
Captulo 1 Reviso de PHP