Você está na página 1de 30

Juliano Niederauer

Novatec

Captulo 1
Reviso de PHP

Este um livro que aborda tpicos avanados da linguagem PHP (www.php.net). Porm, para voc que teve pouco ou nenhum contato com essa linguagem, este captulo ser de grande importncia, visto que 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 operaes sobre um banco de dados MySQL, que um sistema bastante utilizado com o PHP. Se voc um programador mais experiente, pode passar diretamente ao captulo 2.

Iniciando em PHP
Um programa PHP pode ser escrito em qualquer editor de texto, como, por exemplo, o Bloco de Notas (Notepad), do Windows, ou o Vi, do Linux. J existem tambm diversos 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 PHP deve estar entre as tags <?php e ?>, para que o servidor web possa reconhecer que se trata de um cdigo de programao e possa chamar o interpretador PHP para execut-lo. Para comear a treinar, abra o editor de texto de sua preferncia e digite as linhas a seguir:
<?php // legal, estou escrevendo meu primeiro programa em PHP echo "<h1 align='center'>Este meu primeiro programa!</h1>"; ?>

Salve esse programa como prog1.php e envie-o para o diretrio que voc est utilizando para hospedar o site. Esse programa vai gerar como resultado a frase "Este meu primeiro programa!" centralizada na pgina, conforme mostrado na figura

23

24

PHP para quem conhece PHP

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 endereo do servidor que est utilizando para executar os programas 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:
Elemento
<?php //

echo ?>

Descrio Indica o incio de um trecho de cdigo PHP. Representa uma linha de comentrio. Tudo que vem aps essas barras na mesma linha ignorado pelo PHP. Os comentrios so muito teis para uma boa documentao de seu programa. As duas barras servem para transformar uma nica linha em comentrio, mas voc pode usar /* para iniciar uma seqncia de comentrios e, depois, finalizar os comentrios com */. Trata-se de um dos comandos mais utilizados em PHP. Serve para escrever algo na tela. Indica o trmino de um trecho de cdigo PHP.

Se voc escolher a opo Exibir-Cdigo-fonte em seu navegador, ver o cdigo que seu browser recebeu, que foi o seguinte:
<h1 align='center'>Este meu primeiro programa!</h1>

Note que o navegador no recebe nenhuma linha em PHP, somente o cdigo HTML puro. Isso acontece porque o PHP roda no servidor, que processa todos os trechos de programao e retorna somente o resultado final para o navegador.

Captulo 1 Reviso de PHP


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 torna-se um pouco mais lento. Por essa razo, s coloque extenso .php nas pginas que realmente possuem cdigos PHP, seno voc estar desperdiando tempo ao procurar a cada linha cdigos que no existem na pgina.

25

Em relao velocidade de processamento, podemos fazer uma pequena comparao entre o PHP e a linguagem ASP (Active Server Pages), da Microsoft. Mesmo que as pginas .php demorem um pouco mais para ser processadas que as pginas com HTML puro, diversos testes realizados por programadores americanos comprovaram que so processadas muito mais rpido do que aquelas que usam programao ASP. Alm disso, o PHP possui um gerenciamento de memria superior ao do ASP.

Embutindo PHP na HTML


Normalmente uma pgina PHP no contm apenas cdigos de programao PHP, mas tambm tags de marcao HTML. Enquanto o PHP representa 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 a sada gerada pelos cdigos PHP pode ser diferente a cada acesso. As tags HTML devem aparecer fora das tags <?php e ?>, pois estas delimitam 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 escritas entre as tags deve 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 PHP lhe oferece, 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 utilizamos o PHP para gerar os dados de forma dinmica, enquanto o HTML utilizado para formatar e exibir esses dados nas pginas mostradas no navegador. Vamos ver um exemplo que mistura HTML e PHP para mostrar a data atual. Digite o seguinte programa em seu editor de textos e salve-o como prog2.php:
<html> <body>

26

PHP para quem conhece PHP


<?php $data_de_hoje = date ("d/m/Y",time()); ?> <p align="center">Hoje dia <?php echo $data_de_hoje; ?></p> </body> </html>

Note a combinao existente entre as tags HTML e o cdigo PHP. No incio do programa, atribumos a data atual 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.

Exibindo a pgina no navegador


Para o navegador mostrar qualquer coisa na tela necessrio que a pgina tenha pelo menos um comando de exibio (como o echo) para escrever algo ou, ento, comandos HTML que escrevam o contedo da pgina. Porm, somente se for usado o comando echo ou algum outro comando PHP que produza uma sada na tela, voc realmente ter informaes dinmicas, pois o HTML esttico e imprime sempre as mesmas informaes na tela. Veja o seguinte exemplo:
<html> <body> <?php $base = 10; $altura = 20; $area = $base * $altura; ?> </body> </html>

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:
<html> <body> </body> </html>

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

Captulo 1 Reviso de PHP

27

seu editor de textos e salve-o como prog4.php:


<html> <body> <?php $pais = "Brasil"; $frase = "O $pais pentacampeo mundial de futebol"; echo "<h2 align=center>$frase</h2>"; ?> </body> </html>

Abrindo essa pgina em seu navegador, voc obter o resultado exibido na figura 1.2.

Figura 1.2 Resultado gerado pelo programa prog4.php.

Com esses exemplos voc descobriu duas informaes fundamentais: 1. A importncia do comando echo: para gerar dados dinmicos fundamental dominar esse comando ou algum outro que produza sada na tela. 2. A interpolao de variveis: daqui em diante voc vai usar muito essa tcnica. Trata-se da incluso do valor de uma varivel dentro da outra, como, por exemplo, em nosso programa prog4.php, na varivel chamada $frase, inclumos o valor da varivel $pais. Ou seja, dentro da string que atribuda a uma varivel, podemos colocar outra varivel e, no momento do processamento do programa, o PHP ir substituir a varivel por seu valor. Como veremos no tpico Variveis, importante lembrar que em PHP as variveis comeam sempre pelo smbolo de cifro ($).

Constantes

28

PHP para quem conhece PHP

So valores que so predefinidos no incio do programa e que no mudam ao longo de sua execuo. Voc pode definir suas prprias constantes utilizando o comando define. Leve em considerao que, por padro, o PHP diferencia letras maisculas de minsculas. O nome da constante deve ser referenciado no programa exatamente do mesmo modo que voc a definiu. A sintaxe do comando define a seguinte:
bool define (string nome, misto valor [, bool case_insensitive])

Onde nome o nome que voc vai utilizar para representar a constante, valor um valor qualquer (numrico ou alfanumrico) a ser atribudo a ela e case_insensitive um valor lgico (true ou false) que indica se o PHP deve diferenciar letras maisculas de minsculas quando houver uma referncia a essa constante. Veja o exemplo a seguir, nomeado como prog5.php, que mostra como devemos usar as constantes: prog5.php
<html> <body> <?php define ("meunome","Juliano Niederauer"); define ("peso",78); echo "O meu nome " . meunome; echo "<br>"; echo "O meu peso " . peso . " quilos"; ?> </body> </html>

Executando esse programa, voc ter o seguinte resultado em seu navegador:


O meu nome Juliano Niederauer O meu peso 78 quilos

Note que, no exemplo que acabamos de ver, referenciamos as constantes diretamente 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 (.). Podemos concatenar quantos dados quisermos, e todos eles sero exibidos como apenas uma seqncia de caracteres. Alm de voc poder definir suas prprias constantes, o PHP j possui diversas constantes predefinidas. A tabela a seguir mostra algumas delas:
Constante
TRUE FALSE

Descrio Valor verdadeiro (utilizado para comparao). Valor falso.

Captulo 1 Reviso de PHP


_ _FILE_ _ _ _LINE_ _ PHP_OS PHP_VERSION E_ERROR E_PARSE

29

E_WARNING E_NOTICE

Contm o nome do script que est sendo executado. Contm o nmero da linha do script que est sendo executado. Contm a verso corrente do PHP. Nome do sistema operacional no qual o PHP est rodando. Exibe um erro ocorrido em um script. A execuo interrompida. Exibe uma mensagem de aviso do PHP. A execuo no pra. Exibe um erro de sintaxe. A execuo interrompida. Mostra que ocorreu algo, no necessariamente um erro. A execuo no pra.

Variveis
As variveis servem para armazenar dados que podem ser usados em qualquer ponto do programa. Cada varivel est associada a uma posio de memria de seu computador. Ao contrrio de linguagens tradicionais, como C, Pascal e Delphi, no PHP no necessrio declarar variveis. Basta atribuir diretamente um valor a estas e, a partir desse momento, j estaro criadas e associadas a um tipo (numrico, alfanumrico etc.), dependendo do valor que lhes foi atribudo. Vimos que em PHP as variveis devem iniciar com o smbolo $. Aps esse smbolo, deve vir o identificador da varivel, ou seja, o nome pelo qual ser referenciada durante a execuo do programa. Esse identificador no pode iniciar com um nmero. Os nmeros podem aparecer em qualquer posio do identificador, menos na primeira. Exemplos de variveis vlidas e invlidas: Vlidas
$nota1 $casal20 $bisc8 $gremio_2_vezes_campeao_america

Invlidas
$100vergonha $5 $20assustar $60nacadeira

recomendvel que voc utilize sempre identificadores com letras minsculas, pois o PHP faz a distino entre maisculas e minsculas. Se voc misturar os dois

30

PHP para quem conhece PHP

tipos de letras, poder confundir-se ao utilizar as variveis, j que $nota_aluno no a mesma coisa que $Nota_aluno. Imagine se um aluno tirou nota 10 e esse valor foi armazenado na varivel $nota_ aluno. Na hora de imprimir a nota do aluno, voc digitar a seguinte linha:
<?php echo $Nota_aluno; ?>

O aluno ser reprovado, pois voc imprimiu a varivel errada. Portanto, tome cuidado: o PHP distingue letras maisculas de minsculas para nomes de variveis.

Escopo das variveis


Em relao ao escopo, quando uma varivel utilizada dentro de uma funo, pode haver uma outra varivel com o mesmo nome sendo utilizada em outra funo ou no cdigo do programa principal. So espaos de memria diferentes, e cada um funciona dentro de 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. 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: prog6.php
<?php $num = 5000; function testa_escopo1 () { global $num; $num += 5; echo $num . "<br>"; } echo $num . "<br>"; testa_escopo1(); ?>

Ao executar esse programa, sero mostrados os seguintes valores na tela:

Captulo 1 Reviso de PHP


5000 5005

31

Isso ocorreu porque no incio da funo testa_escopo1 se indicou que a varivel era a mesma utilizada globalmente. Desse modo, todas as alteraes feitas na varivel $num dentro da funo, alteraram o valor que existia nessa varivel global. Se retirssemos da funo a declarao global, a varivel $num no seria reconhecida.
$num

Variveis geradas dinamicamente


Em diversas ocasies muito til criarmos variveis dinamicamente, ou seja, durante a execuo do programa. Essa tcnica funciona assim: utiliza-se o valor de uma varivel para servir como identificador para outra que criada. Para isso, utilizamos duas vezes o smbolo $, ou seja, devemos usar $$. Acompanhe o exemplo a seguir: prog7.php
<?php $nome = "Juliano"; $futuro_identificador = "autor"; $$futuro_identificador = $nome; echo "O nome do autor "; echo $autor; ?>

Ao executar o programa prog7.php em seu navegador, voc ver a seguinte frase:


O nome do autor Juliano

Veja que a varivel $autor foi criada dinamicamente. Primeiro o valor autor foi atribudo varivel $futuro_identificador e, depois, com o uso de $$, o valor autor tornou-se o identificador da varivel recm-criada. A varivel criada $autor recebeu o valor da varivel $nome e, em seguida, seu contedo foi mostrado na tela aps a frase "O nome do autor ". Guarde bem esse conceito de variveis com nomes dinmicos, pois existiro situaes em que esse recurso poder ser a nica soluo para resolver um problema.

Arrays
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 variveis, possui um identificador, mas alm disso h um ndice associado (que pode

32

PHP para quem conhece PHP

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. Vamos ver um exemplo para voc entender melhor o conceito de array: na entrada de um edifcio, h um daqueles armrios com diversas gavetas para guardar correspondncias, uma para cada apartamento. Podemos comparar o armrio com o array, e os apartamentos com os ndices do array. Ou seja, existe apenas um nome identificador, que o armrio, mas, se um morador do edifcio chega para pegar suas correspondncias, ele deve acessar a gaveta correspondente a seu ndice, que o nmero de 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 devem ser mostrados na tela. Obviamente no seria vivel que utilizssemos variveis escalares para armazenar 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 estivessem guardados em um array, bastaria que utilizssemos um comando de repetio (que veremos mais adiante) para imprimir desde a primeira posio do array at a ltima, ou seja, variando o ndice de 0 a 59. Veja a seguir alguns exemplos de armazenamento em arrays:
$vetor[0] = 30; $vetor[1] = 40; $vetor[5] = 50; $vetor[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:
$vet[ ] = "Grmio"; $vet[ ] = "Campeo";

Nesse exemplo teremos o valor Grmio armazenado em $vet[0] e o valor Campeo 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 nesses casos o texto chamado de chave associativa:
$vetor["time"] = "Grmio"; $vetor["titulo"] = "Tetracampeo da Copa do Brasil"; $vetor["ano"] = 2001;

Captulo 1 Reviso de PHP

33

Repare que cada posio do array pode ser de um tipo diferente. Os valores das posies referenciadas por time e ttulo so do tipo string, mas o valor da posio referenciada por ano numrico. Outra situao que pode ocorrer o array possuir ndices numricos e strings ao mesmo tempo. No h problema algum em usar os dois tipos de ndices no mesmo array. Existem tambm as matrizes, que so arrays multidimensionais. Essas estruturas de armazenamento tambm contm um nico identificador, mas possuem dois ou mais ndices para referenciar uma posio de memria. Imagine que queremos armazenar na memria os nomes dos melhores clubes do futebol brasileiro, separando-os por estados e cidades. Podemos fazer isso utilizando um array bidimensional, como mostra o exemplo a seguir:
$clube ["RS"] ["PortoAlegre"] = "Grmio"; $clube ["RS"] ["Caxias"] = "Juventude"; $clube ["RS"] ["BentoGoncalves"] = "Esportivo"; $clube ["MG"] ["BeloHorizonte"] = "Atltico"; $clube ["MG"] ["NovaLima"] = "Vila Nova"; $clube ["MG"] ["Ipatinga"] = "Ipatinga"; $clube ["SP"] ["SaoPaulo"] = "Corinthians"; $clube ["SP"] ["Americana"] = "Rio Branco";

Esse exemplo mostra um array bidimensional, mas podemos usar arrays com mais de 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: prog8.php
<?php $vetor = array (10,50,100,150,200); echo $vetor[2] . "<br>"; $vet = array (1, 2, 3, "nome"=>"Joaquim"); echo $vet[0] . "<br>"; echo $vet["nome"]; ?>

Aps a execuo desse programa, os resultados mostrados na tela sero os seguintes:


100 1 Joaquim

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 se criou um array que possui ndices numricos e tambm uma chave

34
associativa. Com o uso do comando posies desse array.
echo,

PHP para quem conhece PHP

mostramos na tela os valores de duas

Objetos
Tambm possvel programar em PHP com o modelo orientado a objetos. Podemos definir uma classe e, dentro dela, as variveis e funes que estaro disponveis a seus objetos. Um objeto a varivel que utilizamos para instanciar uma classe. Se voc alguma vez j estudou programao orientada a objetos, esse conceito deve lhe ser familiar. Veja um pequeno exemplo: prog9.php
<?php class teste { function Saudacao() { echo "Oi pessoal!"; } } $objeto = new teste; // $objeto se torna uma estncia da classe teste $objeto -> Saudacao(); ?>

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 PHP 5 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 novidades desse novo modelo.

Operadores
Como o prprio nome indica, os operadores informam ao PHP quais operaes devem ser executadas com os valores recebidos, como, por exemplo, atribuir um valor a uma varivel, realizar operaes aritmticas (soma, subtrao etc.), realizar comparao de valores, testar se um maior ou menor que o outro etc. Veremos os seguintes tipos de operadores: aritmticos, binrios, de comparao, de atribuio, e ternrio.

Captulo 1 Reviso de PHP

35

Aritmticos
Utilizando esses operadores, voc poder efetuar qualquer operao matemtica com 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 PHP possui tambm outros operadores aritmticos que atuam em apenas um operando. Esses operadores so bastante teis, pois nos permitem realizar de forma simples operaes, como troca de sinal, incremento ou decremento de valor etc. Se voc j programou em linguagem C, deve lembrar-se do incremento utilizando o operador ++. No PHP tambm possvel utiliz-lo. Vamos conhecer todos esses operadores com a tabela a seguir:
Operador -oper
++oper --oper oper++ oper--

Descrio Troca o sinal do operando. Pr-incremento. Primeiro incrementa o valor do operando e depois realiza a operao. Pr-decremento. Primeiro decrementa o valor do operando e depois realiza a operao. Ps-incremento. Primeiro realiza a operao e depois incrementa o operando. Ps-decremento. Primeiro realiza a operao e depois decrementa o operando.

Os operadores apresentados nessa tabela tambm so conhecidos como operadores unrios, 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 uma varivel, pode-se simplesmente digitar o nome da varivel seguida do operador ++. Exemplo:
$contador++;

Na verdade, esses operadores que acabamos de ver deixam seu programa muito mais simples em PHP, pois com o uso deles voc pode fazer em apenas uma linha

36

PHP para quem conhece PHP

de cdigo o que faria em duas ou mais linhas se no os usasse. Ao entender como funcionam, seus cdigos ficaro mais simples e claros.

Binrios
Esses operadores atuam em um nvel de abstrao bem mais baixo: trabalham diretamente com bits. Podem ser utilizados para fazer comparaes binrias (bit a bit), inverter 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 esquerda equivale a multiplicar o nmero por 2). Em alguns casos interessante usar os operadores binrios. Veja a tabela a seguir para conhec-los:
Operador
~op1 op1 & op2 op1 | op2 op1 ^ op2 op1 >> n op1 << n

Descrio Inverte os bits de op1. Operao E (AND) bit a bit. Operao OU (OR) bit a bit. Operao OU exclusivo (XOR). Desloca op1 n bits direita. Desloca op1 n bits esquerda.

Veja um exemplo: prog10.php


<html> <body> <?php $num = 50; $deslocado = $num >> 1; // desloca 1 bit para direita echo $deslocado; ?> </body> </html>

No exemplo apresentado, o valor 50 (que equivale a 110010 na base binria) deslocado um bit direita, o que equivale a dividi-lo por 2. O resultado escrito na tela ser a diviso de 50 por 2, que d 25 (equivalente na base binria a 11001). Perceba que o nmero que vem aps o operando >> representa o nmero de bits que o operando ser deslocado para a direita. Portanto, se tivermos o 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 2n.

Comparao

Captulo 1 Reviso de PHP

37

Tambm chamados de condicionais. So aqueles que executam comparaes entre o valor de duas variveis, ou de uma varivel e um texto, ou uma varivel e um nmero. Com eles podemos testar, por exemplo, se uma varivel possui um valor maior que o da outra ou se possui um valor maior que o de um determinado nmero, ou se o retorno dado pela chamada de uma funo verdadeiro ou falso. Veja a tabela a seguir:
Operador
op1 == op2 op1 === op2 op1 >= op2 op1 <= op2 op1 != op2 op1 !== op2 op1 <> op2 op1 > op2 op1 < op2

Descrio Verdadeiro se op1 for igual a op2. Verdadeiro se op1 for igual a op2 e se ambos forem do mesmo tipo. Verdadeiro se op1 for maior que ou igual a op2. Verdadeiro se op1 for menor que ou igual a op2. Verdadeiro se op1 for diferente de op2. Verdadeiro se op1 for diferente de op2 ou se ambos no forem do mesmo tipo. Tambm serve para representar diferena. Verdadeiro se op1 for maior que op2. Verdadeiro se op1 for menor que op2.

O operador de comparao == pode ser usado tanto na comparao de nmeros como na comparao de textos, ao contrrio de outras linguagens, que utilizam comandos especficos para comparar dados alfanumricos.

Atribuio
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 direita. Alm disso, temos diversas variaes dos comandos de atribuio que podemos utilizar para facilitar a programao. So operadores que, assim como os operadores de incremento (++) e decremento (--), servem para deixar o cdigo mais simples e mais fcil de ser programado. Veja a seguir a tabela dos comandos de atribuio:
Operador
op1 = op2 op1 += op2 op1 -= op2 op1 *= op2 op1 /= op2 op1 .= op2

Descrio op1 recebe o valor de op2. Equivale a op1=op1+op2. Equivale a op1=op1-op2. Equivale a op1=op1*op2. Equivale a op1=op1/op2. Concatenao: equivale a op1=op1.op2.

38
op1 %= op2 op1 <<= op2 op1 &= op2 op1 |= op2 op1 ^= op2

PHP para quem conhece PHP Equivale a op1=op1%op2. Equivale a op1=op1<<op2. Equivale a op1=op1>>op2. Equivale a op1=op1&op2. Equivale a op1=op1|op2. Equivale a op1=op1^op2.
Muitas vezes programas podem apresentar problemas em razo da 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, deveremos usar a expresso $a==$b, e no $a=$b.

op1 >>= op2

Vamos ver um exemplo envolvendo operadores de atribuio: prog11.php


<html> <body> <?php $soma = 0; $valor1 = 10; $valor2 = 20; $valor3 = 30; $soma += $valor1; $soma += $valor2; $soma *= $valor3; $soma %= 100; echo $soma; ?> </body> </html>

// $soma fica com 10 // $soma fica com 10+20 = 30 // $soma fica com 30*30 = 900 // $soma fica com 900%100 = 0

Como voc pode ver pelos comentrios do programa, o valor que ser mostrado na tela zero. O ltimo operador utilizado (%=) representa o resto da diviso (em outras linguagens chamado de MOD). Dividindo 900 por 100 temos como resultado exato 9, portanto o resto da diviso zero. No exemplo anterior, utilizamos os operadores +=, *= e %= para atribuir varivel $soma resultados de operaes realizadas entre a prpria varivel $soma e outro operando. Perceba que o cdigo fica bem mais claro e fcil de entender com o uso desses operadores de atribuio.

Lgicos
So aqueles que retornam o valor verdadeiro ou falso. Veja a tabela:
Operador
!op1 op1 AND op2

Descrio Verdadeiro se op1 for falso. Verdadeiro se op1 E op2 forem verdadeiros.

Captulo 1 Reviso de PHP


op1 OR op2 op1 && op2 op1 || op2 op1 XOR op2

39

Verdadeiro se op1 OU op2 forem verdadeiros. Verdadeiro se s op1 ou s op2 for verdadeiro. Verdadeiro se op1 E op2 forem verdadeiros. Verdadeiro se op1 OU op2 forem verdadeiros.

Depois de observar essa tabela, voc provavelmente est com dvidas quanto diferena entre os operadores AND e &&, e tambm os operadores OR e ||. A diferena entre eles a precedncia dos operadores na avaliao de expresses. A precedncia mais alta dos operadores && e ||, enquanto os operadores AND e OR possuem precedncia mais baixa. Por isso, tome muito cuidado ao us-los, pois podem gerar resultados diferentes, dependendo da ordem em que forem colocados. Veremos mais diante um tpico especial sobre precedncia de operadores. Um exemplo tpico no qual usamos operadores lgicos o caso de testar se todos os campos obrigatrios de um formulrio foram preenchidos. Suponha termos um formulrio em que os campos nome, e-mail e CPF so obrigatrios. Certamente no programa que recebe os dados do formulrio haver um teste, como o mostrado no trecho de programa a seguir:
<?php ... if (empty($nome) OR empty($email) OR empty($cpf)) { echo "Voc deve preencher os campos nome, e-mail e CPF!"; exit; } ... ?>

Nesse exemplo, temos uma expresso sendo avaliada. A funo empty(), que significa vazio em portugus, retorna verdadeiro se a varivel estiver vazia e falso se houver algo na varivel. Ento, estamos testando se a varivel $nome est vazia ou a varivel $email ou a varivel $cpf est vazia. Se pelo menos uma das trs estiver vazia, o resultado ser verdadeiro, e isso far que seja impressa a mensagem Voc deve preencher os campos nome, e-mail e CPF! e, logo aps o programa, ser encerrado por meio do comando exit. Acompanhe as tabelas a seguir para ver os resultados gerados em cada um dos operadores de acordo com o tipo de expresso avaliada:

Operador AND (E)


Exp1 V Exp2 V Resultado V

40
V F F F V F F F F

PHP para quem conhece PHP

Operador OR (OU)
Exp1 V V F F Exp2 V F V F Resultado V V V F

Operador XOR (OU exclusivo)


Exp1 V V F F Exp2 V F V F Resultado F V V F

Operador ! (NOT)
Exp1 V F Resultado F V

Ternrio
uma forma abreviada de usar o comando condicional if, que veremos mais adiante. Uma condio avaliada e, caso seja verdadeira, atribui-se um valor varivel, e caso seja falsa, atribui-se um outro valor. A sintaxe a seguinte:
cond ? exp1 : exp2

Vamos ver um exemplo de uso desse operador, embora seja mais recomendado utilizar o comando condicional if, por ser mais simples. Observe:
$nota = ($frequencia >= 0.75) ? ($nota+2) : ($nota-2);

Quando o PHP executar a linha anterior, se a varivel $frequencia possuir um valor maior que ou igual a 0,75, a varivel $nota ser aumentada de duas unidades, caso

Captulo 1 Reviso de PHP

41

contrrio haver a diminuio de duas unidades. Escrevendo essa mesma operao por meio do comando if, temos o seguinte cdigo:
<?php if ($frequencia >= 0.75) $nota = $nota+2; else $nota = $nota-2; ?>

Utilizando o comando if, torna-se bem mais fcil entender qual o objetivo do cdigo, pois conseguimos distinguir perfeitamente qual a condio e quais operaes sero executadas aps a avaliao desta.

Precedncia de operadores
Para evitar erros de lgica em programas, fundamental que voc conhea a ordem utilizada pelo PHP para tratar os operadores. A tabela a seguir mostra a ordem decrescente de precedncia que o PHP segue ao encontrar diversos operadores no programa:
Operador
new [ ! ~ ++ -- (int) (float) (string) (array) (object) @ * / % + - . << >>

Descrio Criao de objetos. Colchete.

> < >= <= & ^ | && || ?:

== != <> === !==

No-lgico, inverso de bits, incremento e decremento, converso de tipos e controle de erro. Multiplicao, diviso e resto da diviso. 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. Impresso.

= += -= *= /= %= &= ~= <<= >>= ^= print

42
AND XOR OR ,

PHP para quem conhece PHP AND lgico (de menor prioridade). XOR lgico (de menor prioridade). OR lgico (de menor prioridade). Vrgula.

importante lembrar que primeiro o PHP executar todas as operaes que estiverem entre parnteses. Se dentro dos parnteses houver diversas operaes, a precedncia de operadores ser usada para definir a ordem. Depois de resolver todas as operaes que aparecem entre parnteses, o PHP resolver o resto da expresso baseando-se na tabela anterior para determinar a ordem de avaliao dos operadores. Quando houver operadores de mesma prioridade em uma mesma expresso, e no existirem parnteses, o PHP resolver a expresso da esquerda para a direita. Observe o seguinte trecho de programa: prog12.php
<?php $num = 5; $resultado = 8 + 3 * 2 + ++$num; echo "$num<br>"; echo $resultado; ?>

O resultado mostrado na tela ser:


6 20

Observe que o operador ++ tem prioridade mais alta que os operadores + e *, por isso a primeira operao realizada pelo PHP foi o incremento do valor da varivel $num. O segundo operador de maior prioridade no exemplo apresentado o de multiplicao, portanto a segunda operao realizada foi 3*2. Aps essas duas operaes, ficamos com a soma 8+6+6. Note que temos dois operadores iguais (de adio), portanto, como tm a mesma prioridade, a expresso avaliada da esquerda para a direita: 8+6 = 14. E depois 14+6 = 20, que foi o resultado mostrado na tela. Analisando esse exemplo, voc pode perceber a importncia da precedncia dos operadores. Muitas vezes o uso incorreto dessas informaes causa a exibio de resultados errados na sada dos programas.

Estruturas de controle em PHP

Captulo 1 Reviso de PHP

43

So comandos comuns maioria das linguagens de programao, e o uso deles fundamental para realizar decises lgicas, testar se determinada expresso verdadeira e repetir um bloco de comandos por um certo nmero de vezes ou 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.

if
Comando que avalia uma expresso e, dependendo do resultado, executa-se um conjunto diferente de instrues. O comando if pode possuir como complemento o elseif e/ou o else. Observe a sintaxe do comando if:
If ( exp1 ) { bloco1 } elseif ( exp2 ) { bloco2 } else { bloco3 }

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. Em portugus, if significa se e else, seno Dentro da construo do comando . if, podem aparecer diversos elseif, cada um avaliando uma expresso. Quando a expresso avaliada pelo comando if resultar em valor verdadeiro (True), ser executado o bloco de comandos definido logo a seguir, que aparece entre chaves ({}). Se no houver a delimitao do bloco por chaves, ser executada apenas a primeira linha aps o if. Aps executar esse bloco de comandos, a execuo do programa ser desviada para o fim do comando if, e as demais expresses (contidas no elseif e no else) no

44
sero avaliadas, pois o comando instrues para execuo.
if

PHP para quem conhece PHP

escolhe apenas um entre vrios conjuntos de

Se a condio avaliada no comando if for falsa (False), o bloco de comandos seguinte no ser executado, e ser testada a expresso contida no primeiro elseif (se houver). Se todas as expresses avaliadas (do if e do elseif) forem falsas, o bloco de comandos executado ser aquele que vier 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 if ($nota == 10) { echo "Parabns! <br>"; echo "Voc tirou a nota mxima!" } ?>

Nesse exemplo, se o valor da varivel $nota for igual a 10, ser mostrada na tela a seguinte mensagem:
Parabns! Voc tirou a nota mxima!

Se o valor da varivel $nota no for igual a 10, esse bloco de comandos simplesmente no ser executado, e a execuo do programa seguir normalmente. Poderamos acrescentar um else ao comando e imprimir outra mensagem caso o aluno no tirasse nota 10.

switch
O comando switch similar if, pois ambos avaliam o valor de uma expresso 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 igualdade, enquanto o if trabalha com qualquer tipo de operador. Veja a sintaxe do comando switch:
switch (operador) { case valor1: <comandos> break; case valor2: <comandos>

Captulo 1 Reviso de PHP


} break; .... case valorN: <comandos> break; default: <comandos> break;

45

Perceba que, aps cada bloco de comandos, se deve utilizar o break, para que o comando switch seja encerrado e a execuo continue aps ele. Se no utilizarmos o break, o PHP continuar a execuo dentro do switch, avaliando as demais expresses. Veja a seguir um exemplo de uso desse comando:
<?php switch ($numero) { case 's': echo "Voc escolheu a opo SIM"; break; case 'n': echo " Voc escolheu a opo NO "; break; default: echo " A opo digitada invlida"; break; } ?>

A opo default tem a mesma funo da opo else no comando if. Se todas as expresses anteriores retornarem falso, ser executado o bloco de comandos que aparecer aps o default. O uso do default no obrigatrio no comando switch.

while
Traduzindo para o portugus, while significa enquanto. O comando while composto 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 comandos em questo ser repetida. Quando o valor retornado falso, encerra-se o lao de repetio (loop) e a execuo transferida para o fim do comando while. Assim como no comando if, devemos utilizar chaves como delimitadores sempre que o bloco possuir mais de uma instruo para executar. Veja a sintaxe do comando:
while (exp)

46
{ }

PHP para quem conhece PHP


comandos

Devemos tomar cuidado para no colocar 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: prog13.php
<?php $cont = 1; while ($cont < 100) { echo "O valor atual do contador $cont <br>"; $cont++; } ?>

A execuo desse programa resultar em 99 linhas mostradas na tela:


O valor atual do contador 1 O valor atual do contador 2 O valor atual do contador 3 ... O valor atual do contador 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 que o loop seja encerrado.

do...while
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 { comandos } while (exp);

Veja a seguir um exemplo: prog14.php


<?php $numero = 1;

Captulo 1 Reviso de PHP


?> do { echo "O valor atual de nmero $numero <br>"; $numero++; } while ($numero < 4);

47

O resultado gerado pela execuo desse programa ser:


O valor atual de nmero 1 O valor atual de nmero 2 O valor atual de nmero 3

for
Utilizamos o comando for quando queremos executar um conjunto de instrues um dado nmero de vezes. um comando muito til que pode ser usado, por exemplo, para imprimir todos os elementos de um array ou todos os registros retornados de uma consulta a um banco de dados. A sintaxe do comando for a seguinte:
for ( inicializao; condio; operador ) { comandos }

Como inicializao, geralmente determinamos o valor inicial da varivel que controlar o loop. O parmetro de inicializao poder ser $cont=0. No segundo parmetro, devemos colocar a condio que deve ser atingida para que o lao continue. Se quisssemos executar o loop 20 vezes, o valor do parmetro de condio seria $cont<20. Quando essa condio retorna 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 interao do loop, o valor da varivel de controle atualizado automaticamente, dependendo do terceiro parmetro que voc definiu quando utilizou o comando for. Veja um exemplo de utilizao do comando: prog15.php
<?php for ($cont = 0; $cont < 10; $cont++) { echo "A varivel \$cont vale $cont"; echo "<br>"; } ?>

48

PHP para quem conhece PHP

O resultado gerado pela execuo desse programa ser o seguinte:


A varivel $cont vale 0 A varivel $cont vale 1 ... A varivel $cont vale 9

foreach
O comando foreach nos oferece uma maneira mais fcil de navegar entre os elementos de um array. Observe as duas sintaxes possveis:
foreach ($nome_array as $elemento) { comandos }

ou
foreach ($nome_array as $chave => $valor) { comandos }

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. Dessa forma, podemos trabalhar com todos os valores do array utilizando apenas a varivel $elemento. A segunda forma segue o mesmo critrio, mas com uma diferena: alm de o valor do elemento corrente do array ser atribudo varivel $elemento, a chave (ou ndice) do elemento atual atribudo varivel $chave. Acompanhe o exemplo a seguir: prog16.php
<?php $vetor = array (1, 2, 3, 4); foreach ($vetor as $v) { print "O valor atual do vetor $v. <br>"; } $a = array ( "um" => 1, "dois" => 2, "tres" => 3 ); foreach ($a as $chave => $valor) { print "\$a[$chave] => $valor.<br>"; } ?>

O programa apresentado mostrar na tela todos os valores do array

$vetor

e,

Captulo 1 Reviso de PHP

49
$a.

depois, todas as chaves e valores do array mostrar o seguinte:


$a [um] => 1. $a [dois] => 2. $a [tres] => 3.

O segundo

foreach

desse exemplo

Integrao com bancos de dados


O PHP suporta diversos SGBDs (Sistemas de Gerncia de Bancos de Dados), oferecendo um conjunto de funes para executar operaes (consultas, incluses, alteraes, excluses etc.) sobre cada um deles. Entre eles, temos: MySQL, PostgreSQL, SQLite, InterBase, Oracle, SQL Server, Sybase, entre outros que oferecem suporte linguagem SQL (Structured Query Language). Os bancos de dados no suportados diretamente pelo PHP podem ser acessados via ODBC. Os comandos existentes para cada um dos SGBDs esto disponveis na documentao do PHP, que pode ser obtida no site oficial (http://www.php.net). Este livro no tem o objetivo de ensinar a linguagem SQL nem de mostrar como instalar um determinado sistema de banco de dados. Neste tpico, faremos apenas uma rpida reviso de como utilizar o PHP para acessar e realizar consultas sobre o MySQL (http://www.mysql.com), que um dos SGBDs mais utilizados com o PHP. Essa reviso ser importante, visto que alguns exemplos que sero apresentados neste 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 a 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 dados e comear a realizar operaes sobre ele, precisamos estabelecer uma conexo com o servidor MySQL. Para isso, utilizaremos a funo de conexo mysql_connect, que possui a seguinte sintaxe:
recurso mysql_connect ([string servidor [, string usurio [, string senha [, bool novo_link [, int flags_cliente ]]]]])

Parmetro
servidor usurio senha novo_link

Descrio Endereo do servidor no qual est localizado o banco de dados. Nome de usurio a ser utilizado para a abertura da conexo. Senha a ser utilizada para a abertura da conexo. Indica se deve ser aberto um novo link quando for feita mais de uma chamada a essa funo com os mesmos parmetros.

50
flags_cliente

PHP para quem conhece PHP Define algumas configuraes do cliente. Pode ser uma combinao das constantes MYSQL_CLIENT_COMPRESS, MYSQL_CLIENT_IGNORE_SPACE e MYSQL_CLIENT_INTERACTIVE.

Em caso de sucesso, essa funo retorna o identificador da conexo, que posteriormente ser passado como parmetro para a funo de fechamento desta. 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, podemos executar o seguinte comando:
$conexao = mysql_connect ("localhost", "juliano", "teste");

Se o banco de dados estiver localizado em um servidor diferente, bastar substituir localhost pelo nome ou endereo IP desse servidor. Aps abrir a conexo, o prximo passo selecionar, por meio do comando mysql_select_db, qual ser o banco de dados utilizado. Por exemplo:
mysql_select_db ("bdteste");

A partir da, j podemos realizar operaes sobre o banco de dados. A funo PHP responsvel por executar comandos SQL a mysql_query, que possui a seguinte sintaxe:
recurso mysql_query (string comando [, recurso id_conexo])

Parmetro
comando id_conexo

Descrio Comando SQL a ser executado. 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 resultados, utilizando funes como mysql_result, mysql_fetch_row, mysql_fetch_assoc e mysql_fetch_array. Aps realizar todas as operaes necessrias, devemos encerrar a conexo com o banco de dados executando a funo mysql_close. Vamos ver rapidamente um exemplo de programa PHP que realiza todos os passos descritos nesse tpico. Antes de criar o programa, vamos criar 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:
create table livros ( isbn varchar(13), titulo varchar(80) NOT NULL, autor varchar(80) NOT NULL, paginas smallint NOT NULL,

Captulo 1 Reviso de PHP


preco float NOT NULL );

51

O programa PHP dever abrir uma conexo 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: prog17.php
<?php $servidor = "localhost"; $usuario = "juliano"; $senha = "12345"; $banco = "test"; $con = mysql_connect($servidor, $usuario, $senha); mysql_select_db ($banco); $res = mysql_query("SELECT titulo,autor FROM livros"); $num_linhas = mysql_num_rows($res); for ($i = 0; $i < $num_linhas; $i++) { $dados = mysql_fetch_row ($res); $titulo = $dados[0]; $autor = $dados[1]; echo "$titulo - $autor <br>"; } mysql_close($con); ?>

Veja que para percorrer o resultado com o comando for, utilizou-se antes a funo que retorna o nmero de linhas resultantes em uma consulta SQL. Ao executar esse programa no navegador, ser exibido, para cada um dos livros, seu ttulo e, ao lado, o nome do autor.
mysql_num_rows,

Importante: se sua verso do MySQL for 4.1 ou superior, para aproveitar todos seus recursos, voc dever usar os comandos da biblioteca mysqli (Improved MySQL). Por exemplo: em vez de mysql_connect, use a funo mysqli_connect; em vez de mysql_query, use a funo mysqli_query; e assim por diante. No site da Novatec Editora, o exemplo anterior est disponvel tambm na verso da biblioteca mysqli .