Você está na página 1de 66

Tutorial da linguagem PHP

ndice
NDICE................................................................................
..........2
1. INTRODUO...................................................................
........5
O QUE PHP?.....................................................................................5
O QUE PODE SER FEITO COM PHP?.............................................................5
COMO SURGIU A LINGUAGEM PHP?.............................................................5
2. SINTAXE BSICA.....................................................................7
DELIMITANDO O CDIGO PHP....................................................................7
SEPARADOR DE INSTRUES........................................................................7
NOMES DE VARIVEIS...............................................................................7
COMENTRIOS........................................................................................8
Comentrios de uma linha:............................................................8
Comentrios de mais de uma linha:...............................................8
3. CRIANDO OS PRIMEIROS SCRIPTS.....................................10
PRIMEIRO EXEMPLO...............................................................................10
UTILIZANDO FORMULRIOS HTML............................................................11
INTERAGINDO COM O BROWSER..................................................................12
ACESSANDO BANCOS DE DADOS................................................................13
Conexo com o servidor...............................................................13
Seleo do banco de dados..........................................................14
Execuo de queries SQL.............................................................14
Tratamento de resultados de query SELECT..............................15
4. TIPOS.............................................................................
.........18
TIPOS SUPORTADOS...............................................................................18
Inteiros (integer ou long).............................................................18
Nmeros em Ponto Flutuante (double ou float)..........................19
Strings...........................................................................................
19
Arrays..........................................................................................
..20
Listas...................................................................... ..........................20
Objetos..............................................................................
............21
Booleanos...................................................................................
...22
TRANSFORMAO DE TIPOS.......................................................................22
Coeres.......................................................................................22
Transformao explcita de tipos.................................................23
Com a funo settype...................................................................23
5. CONSTANTES.........................................................................25
CONSTANTES PR-DEFINIDAS.....................................................................25
DEFININDO CONSTANTES.........................................................................25
6. OPERADORES.......................................................................
..26
ARITMTICOS.......................................................................................26
DE STRINGS.........................................................................................26
DE ATRIBUIO......................................................................................26
BIT A BIT.............................................................................................27
LGICOS.............................................................................................27
COMPARAO.......................................................................................27
EXPRESSO CONDICIONAL........................................................................28
DE INCREMENTO E DECREMENTO................................................................28
ORDEM DE PRECEDNCIA DOS OPERADORES...................................................28
7. ESTRUTURAS DE CONTROLE...............................................30

BLOCOS.............................................................................................30
COMANDOS DE SELEO..........................................................................30
if...............................................................................
.....................31
switch....................................................................................
........33
COMANDOS DE REPETIO........................................................................34
while...........................................................................................
...34
do... while.....................................................................................
.35
for...........................................................................................
.......35
QUEBRA DE FLUXO.................................................................................37
Break.......................................................................................
......37
Continue........................................................................................
37
8. FUNES............................................................................
....39
DEFININDO FUNES..............................................................................39
VALOR DE RETORNO...............................................................................39
ARGUMENTOS......................................................................................39
Passagem de parmetros por referncia.....................................40
Argumentos com valores pr-definidos (default)........................41
CONTEXTO..........................................................................................42
ESCOPO.............................................................................................42
9. VARIVEIS..............................................................................44
O MODIFICADOR STATIC...........................................................................44
VARIVEIS VARIVEIS.............................................................................45
VARIVEIS ENVIADAS PELO NAVEGADOR.........................................................45
URLencode...................................................................................45
VARIVEIS DE AMBIENTE..........................................................................46
VERIFICANDO O TIPO DE UMA VARIVEL........................................................46
Funo que retorna o tipo da varivel.........................................46
Funes que testam o tipo da varivel........................................47
DESTRUINDO UMA VARIVEL......................................................................47
VERIFICANDO SE UMA VARIVEL POSSUI UM VALOR...........................................47
A funo isset...............................................................................47
A funo empty.............................................................................48
10. CLASSES E OBJETOS...........................................................49
CLASSE..............................................................................................49
OBJETO..............................................................................................49
A VARIVEL $THIS.................................................................................49
SUBCLASSES.......................................................................................50
CONSTRUTORES....................................................................................50
12. CONCLUSES................................................................
...........
13. BIBLIOGRAFIA E REFERNCIAS........................................53
APNDICE 01 - FUNES PARA TRATAMENTO DE STRINGS 54
FUNES RELACIONADAS A HTML............................................................54
htmlspecialchars...........................................................................
54
htmlentities............................................................................
.......54
nl2br..........................................................................................
....54
get_meta_tags...............................................................................55
strip_tags......................................................................................55
urlencode......................................................................................55
urldecode......................................................................................55
FUNES RELACIONADAS A ARRAYS.............................................................56
Implode e join...............................................................................56
split...............................................................................................56
explode.....................................................................................
.....56

COMPARAES ENTRE STRINGS..................................................................57


similar_text...................................................................................57
strcasecmp...............................................................................
.....57
strcmp............................................................................
...............57
strstr.............................................................................................57
stristr............................................................................................58
strpos............................................................................................58
strrpos.....................................................................................
......58
FUNES PARA EDIO DE STRINGS............................................................58
chop...............................................................................................
58
ltrim..............................................................................................58
trim...............................................................................................59
strrev.........................................................................................
....59
strtolower.....................................................................................59
strtoupper.....................................................................................59
ucfirst...................................................................................
.........60
ucwords........................................................................................
.60
str_replace....................................................................................60
FUNES DIVERSAS...............................................................................60
chr...................................................................................
..............60
ord......................................................................................
...........61
echo..........................................................................................
.....61
print..............................................................................................61
strlen.................................................................................
............61
APNDICE 02 - FUNES PARA TRATAMENTO DE ARRAYS. .62
FUNES GENRICAS.............................................................................62
Array.............................................................................................62
range.................................................................................
............62
shuffle...........................................................................................63
sizeof...............................................................................
..............63
FUNES DE NAVEGAO.....................................................................63
reset............................................................................
..................63
end................................................................................................63
next...............................................................................................63
prev..............................................................................
.................64
pos..........................................................................................
.......64
key...........................................................................................
......64
each.........................................................................................
......64
FUNES DE ORDENAO........................................................................65
sort..................................................................................
..............65
rsort..............................................................................................65
asort.............................................................................
.................65
arsort............................................................................................65
ksort..............................................................................
................66
usort..................................................................................
............66
uasort..............................................................................
..............66
uksort...............................................................................
.............66

1. Introduo

O que PHP?

PHP uma linguagem que permite criar sites WEB dinmicos,


possibilitando uma interao com o usurio atravs de formulrios, parmetros da
URL e links. A diferena de PHP com relao a linguagens semelhantes a
Javascript que o cdigo PHP executado no servidor, sendo enviado para o
cliente apenas html puro. Desta maneira possvel interagir com bancos de dados
e aplicaes existentes no servidor, com a vantagem de no expor o cdigo fonte
para o cliente. Isso pode ser til quando o programa est lidando com senhas ou
qualquer tipo de informao confidencial.
O que diferencia PHP de um script CGI escrito em C ou Perl que o
cdigo PHP fica embutido no prprio HTML, enquanto no outro caso necessrio
que o script CGI gere todo o cdigo HTML, ou leia de um outro arquivo.

O que pode ser feito com PHP?

Basicamente, qualquer coisa que pode ser feita por algum programa
CGI pode ser feita tambm com PHP, como coletar dados de um formulrio, gerar
pginas dinamicamente ou enviar e receber cookies.
PHP tambm tem como uma das caractersticas mais importantes o
suporte a um grande nmero de bancos de dados, como dBase, Interbase, mSQL,
mySQL, Oracle, Sybase, PostgreSQL e vrios outros. Construir uma pgina
baseada em um banco de dados torna-se uma tarefa extremamente simples com
PHP.
Alm disso, PHP tem suporte a outros servios atravs de protocolos
como IMAP, SNMP, NNTP, POP3 e, logicamente, HTTP. Ainda possvel abrir
sockets e interagir com outros protocolos.

Como surgiu a linguagem PHP?

A linguagem PHP foi concebida durante o outono de 1994 por


Rasmus Lerdorf. As primeiras verses no foram disponibilizadas, tendo sido
utilizadas em sua home-page apenas para que ele pudesse ter informaes sobre
as visitas que estavam sendo feitas. A primeira verso utilizada por outras pessoas

foi disponibilizada em 1995, e ficou conhecida como Personal Home Page Tools
(ferramentas para pgina pessoal). Era composta por um sistema bastante simples
que interpretava algumas macros e alguns utilitrios que rodavam por trs das
home-pages: um livro de visitas, um contador e algumas outras coisas.
Em meados de 1995 o interpretador foi reescrito, e ganhou o nome
de PHP/FI, o FI veio de um outro pacote escrito por Rasmus que interpretava
dados de formulrios HTML (Form Interpreter). Ele combinou os scripts do pacote
Personal Home Page Tools com o FI e adicionou suporte a mSQL, nascendo assim o
PHP/FI, que cresceu bastante, e as pessoas passaram a contribuir com o projeto.
Estima-se que em 1996 PHP/FI estava sendo usado por cerca de
15.000 sites pelo mundo, e em meados de 1997 esse nmero subiu para mais de
50.000. Nessa poca houve uma mudana no desenvolvimento do PHP. Ele deixou
de ser um projeto de Rasmus com contribuies de outras pessoas para ter uma
equipe de desenvolvimento mais organizada. O interpretador foi reescrito por Zeev
Suraski e Andi Gutmans, e esse novo interpretador foi a base para a verso 3.
Atualmente o uso do PHP3 vem crescendo numa velocidade incrvel,
e j est sendo desenvolvida a verso 4 do PHP.

2. Sintaxe Bsica

Delimitando o cdigo PHP

O cdigo PHP fica embutido no prprio HTML. O interpretador


identifica quando um cdigo PHP pelas seguintes tags:

<?php
comandos
?>
<script language=php>
comandos
</script>
<?
comandos
?>
<%
comandos
%>
O tipo de tags mais utilizado o terceiro, que consiste em uma
abreviao do primeiro. Para utiliz-lo, necessrio habilitar a opo short-tags
na configurao do PHP. O ltimo tipo serve para facilitar o uso por programadores
acostumados sintaxe de ASP. Para utiliz-lo tambm necessrio habilit-lo no
PHP, atravs do arquivo de configurao php.ini.

Separador de instrues

Entre cada instruo em PHP preciso utilizar o ponto-e-vrgula,


assim como em C, Perl e outras linguagens mais conhecidas. Na ltima instruo
do bloco de script no necessrio o uso do ponto-e-vrgula, mas por questes
estticas recomenda-se o uso sempre.

Nomes de variveis

Toda varivel em PHP tem seu nome composto pelo caracter $ e uma
string, que deve iniciar por uma letra ou o caracter _. PHP case sensitive, ou

seja, as variveis $vivas e $VIVAS so diferentes. Por isso preciso ter muito
cuidado ao definir os nomes das variveis. bom evitar os nomes em maisculas,
pois como veremos mais adiante, o PHP j possui alguma variveis pr-definidas
cujos nomes so formados por letras maisculas.

Comentrios

H dois tipos de comentrios em cdigo PHP:

Comentrios de uma linha:

Marca como comentrio at o final da linha ou at o final do bloco de


cdigo PHP o que vier antes. Pode ser delimitado pelo caracter # ou por duas
barras ( // ).

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

Comentrios de mais de uma linha:


Tem como delimitadores os caracteres /* para o incio do bloco e

*/ para o final do comentrio. Se o delimitador de final de cdigo PHP ( ?> )


estiver dentro de um comentrio, no ser reconhecido pelo interpretador.

Exemplos:
<?
echo teste; /* Isto um comentrio com mais
de uma linha, mas no funciona corretamente ?>
*/
<?
echo teste; /* Isto um comentrio com mais
de uma linha que funciona corretamente
*/
?>

3. Criando os primeiros scripts


Primeiro Exemplo

Neste exemplo, criaremos um script com uma sada simples, que


servir para testar se a instalao foi feita corretamente:

<html>
<head><title>Aprendendo PHP</title></head>
<body>
<?php
echo "Primeiro Script";
?>
</body>
</html>

Salve o arquivo como primeiro.php3 no diretorio de documentos do


Apache (ou o Web Server escolhido). Abra uma janela do navegador e digite o
endereo http://localhost/primeiro.php3. Verificando o cdigo fonte da
pgina exibida, temos o seguinte:

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

Isso mostra como o PHP funciona. O script executado no servidor,


ficando disponvel para o usurio apenas o resultado. Agora vamos escrever um
script que produza exatamente o mesmo resultado utilizando uma varivel:

<html>
<head><title>Aprendendo PHP</title></head>
<body>
<?php
$texto = "Primeiro Script";
echo $texto;
?>
</body>
</html>

Utilizando formulrios HTML

Ao clicar

num

boto Submit

em um formulrio HTML as

informaes dos campos sero enviadas ao servidor especificado para que possa
ser produzida uma resposta. O PHP trata esses valores como variveis, cujo nome
o nome do campo definido no formulrio. O exemplo a seguir mostra isso, e
mostra tambm como o cdigo PHP pode ser inserido em qualquer parte do
cdigo HTML:

<html>
<head><title>Aprendendo PHP</title></head>
<body>
<?php
if ($texto != "")
echo "Voc digitou \"$texto\"<br><br>";
?>
<form method=post action="<? echo $PATH_INFO; ?>">
<input type="text" name="texto" value="" size=10>
<br>
<input type="submit" name="sub" value="Enviar!">
</form>
</body>
</html>

Ao salvar o arquivo acima e carreg-lo no browser, o


usurio ver apenas um formulrio que contm um espao para
digitar o texto, como visto na figura 01. Ao digitar um texto qualquer
e submeter o formulrio, a resposta, que o mesmo arquivo PHP
(indicado pela constante $PATH_INFO, que retorna o nome do
arquivo) ser como na figura 02:

figura 01

figura 02

Isso ocorre porque o cdigo PHP testa o contedo da varivel $texto.


Inicialmente ele uma string vazia, e por isso nada impresso na primeira parte.
Quando algum texto digitado no formulrio e submetido, o PHP passa a trat-lo
como uma varivel. Como no formulrio o campo possui o nome texto, a varivel
com seu contedo ser $texto. Assim, no prximo teste o valor da varivel ser
diferente de uma string vazia, e o PHP imprime um texto antes do formulrio.

Interagindo com o browser

PHP

tambm

permite

interagir

com

informaes

do

browser

automaticamente. Por exemplo, o script a seguir mostra informaes sobre o


browser do usurio. As figuras 03 e 04 mostram o resultado visto no Netscape
Communicator e o Microsoft Internet Explorer, respectivamente.

<html>
<head><title>Aprendendo PHP</title></head>
<body>
<? echo $HTTP_USER_AGENT; ?>
</body>
</html>
figura 03

figura 04
Observe que o resultado mostra caractersticas de cada browser,

como a verso, e no caso do Communicator at o idioma (en). Com isso, se voc


criar uma pgina com recursos disponveis somente no Internet Explorer, por
exemplo, pode esconder o cdigo dos outros browsers, com um cdigo semelhante
ao seguinte:

<html>
<head><title>Aprendendo PHP</title></head>
<body>
<?
if (strpos($HTTP_USER_AGENT,"MSIE 5") != 0) {
echo "Voc usa Internet Explorer";
} else {
echo "Voc no usa Internet Explorer";
}
?>

</body>
</html>

Neste exemplo, ser apenas exibido um texto informando se est


sendo utilizado o Microsoft Internet Explorer ou no, mas para outras funes
poderia ser utilizado algo semelhante.
bom notar o surgimento de mais uma funo no cdigo anterior:

strpos(string1,string2). Essa funo retorna a posio da primeira apario


de string2 em string1, contando a partir de zero, e no retorna valor algum se no
ocorrer. Assim, para testar se a string $HTTP_USER_AGENT contm a string

MSIE, basta testar se strpos devolve algum valor.

Acessando Bancos de Dados


Neste documento todos os exemplos referentes a acesso de bancos de
dados utilizaro o gerenciador de banco de dados MySQL, que pode ser copiado
gratuitamente no site http://www.mysql.org.
Para interagir com uma base de dados SQL existem trs comandos
bsicos que devem ser utilizados: um que faz a conexo com o servidor de banco
de dados, um que seleciona a base de dados a ser utilizada e um terceiro que
executa uma query SQL.

Conexo com o servidor


A conexo com o servidor de banco de dados mySQL em PHP feita
atravs do comando mysql_connect, que tem a seguinte sintaxe:

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


string /*senha*/ );
Os parmetros so bastante simples: o endereo do servidor(host), o
nome do usurio (login) e a senha para a conexo. A funo retorna um valor
inteiro, que o identificador da conexo estabelecida e dever ser armazenado
numa varivel para ser utilizado depois. No nosso exemplo, temos como servidor
de banco de dados a mesma mquina que roda o servidor http, como login o
usurio root e senha phppwd:

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

Assim, se a conexo for bem sucedida (existir um servidor no

endereo especificado que possua o usurio com a senha fornecida), o


identificador da conexo fica armazenado na varivel $conexo.

Seleo do banco de dados


Uma vez conectado, preciso selecionar o banco de dados existente
no servidor com o qual desejamos trabalhar. Isso feito atravs da funo int

mysql_select_db, que possui a seguinte sintaxe:


int
mysql_select_db(string
/*conexao*/ );

/*nome_base*/,

int

O valor de retorno 0 se o comando falhar, e 1 em caso de sucesso. O


nome da base de dados a selecionar o primeiro parmetro fornecido, seguido
pelo identificador da conexo. Se este for omitido, o interpretador PHP tentar
utilizar a ltima conexo estabelecida. Recomenda-se sempre explicitar esse valor,
para facilitar a legibilidade do cdigo. No nosso exemplo, a base de dados a ser
selecionada possui o nome ged:

mysql_select_db(ged, $conexao);
Aps a execuo desse comando qualquer consulta executada para
aquela conexo utilizar a base de dados selecionada.

Execuo de queries SQL


Aps estabelecida a conexo e selecionada a base de dados a ser
utilizada, quase toda a interao com o servidor mySQL pode ser feita atravs de
consultas escritas em SQL (Structured Query Language), com o comando

mysql_query, que utiliza a seguinte sintaxe:


int mysql_query(string consulta, int [conexao] );
O valor de retorno 0 se falhar ou 1 em caso de sucesso. Sucesso
aqui significa que a consulta est sintaticamente correta e foi executada no
servidor. Nenhuma informao sobre o resultado retornada deste comando, ou
at mesmo se o resultado o esperado. No caso da consulta ser um comando
SELECT, o valor de retorno um valor interno que identifica o resultado, que
poder ser tratado com a funo mysql_result() e outras. A string query no
deve conter ponto-e-vrgula no final do comando, e o identificador da conexo
opcional. Vamos criar uma tabela como exemplo:

$cria = CREATE TABLE exemplo (codigo INT AUTO_INCREMENT PRIMARY

KEY, nome CHAR(40), email CHAR(50));


mysql_query($cria, $conexao);
Agora vejamos como ficou o cdigo completo para executar uma
query SQL numa base de dados mySQL, com um exemplo que cria uma tabela
chamada exemplo e adiciona alguns dados:

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


mysql_select_db(ged, $conexao);
$cria = CREATE TABLE exemplo (codigo INT AUTO_INCREMENT
PRIMARY KEY, nome CHAR(40), email CHAR(50));
$insere1 = INSERT INTO exemplo
(Mauricio Vivas,vivas@usa.net);

(nome,email)

VALUES

$insere2 = INSERT INTO exemplo (nome,email) VALUES (Jose


da Silva,jose@teste.com);
$insere3 = INSERT INTO exemplo (nome,email)
(Fernando Henrique Cardoso,fhc@planalto.gov.br);

VALUES

$insere4 = INSERT INTO exemplo (nome,email) VALUES (Bill


Clinton,president@whitehouse.gov);
mysql_query($cria, $conexao);
mysql_query($insere1, $conexao);
mysql_query($insere2, $conexao);
mysql_query($insere3, $conexao);
mysql_query($insere4, $conexao);
Tratamento de resultados de query SELECT

Ao

executar

uma

query

SQL

SELECT

atravs

do

comando

mysql_query, o identificador do resultado deve ser armazenado numa varivel


que pode ser tratada de diversas formas. Duas maneiras interessantes de faz-lo
usam

comando

mysql_result

comando

mysql_fetch_row,

respectivamente.
O comando mysql_result tem a seguinte sintaxe:

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


Onde resultado o identificador do resultado, obtido com o retorno
da funo mysql_query, linha especifica a tupla a ser exibida, j que uma query
SELECT pode retornar diversas tuplas, e campo o identificador do campo a ser

exibido, sendo o tipo descrito como mixed pela possibilidade de ser de diversos
tipos (neste caso, inteiro ou string). Vejamos um exemplo utilizando a tabela criada
anteriormente:

$consulta = SELECT nome, email FROM exemplo WHERE email


LIKE vivas;
$resultado = mysql_query($consulta, $conexao);
printf("Nome: ", mysql_result($resultado,0,"nome"), <br>\n);
printf("e-mail: ", mysql_result($resultado,0,"email"),<br>);
Com o exemplo acima, o resultado ser:

Nome: Mauricio Vivas<br>


e-mail: vivas@usa.net<br>
importante notar que a utilizao desta funo um pouco
trabalhosa, j que no caso de um resultado com vrias linhas preciso controlar o
nmero de linhas para trat-las (pode-se utilizar a funo mysql_num_rows(int

resultado), que retorna o nmero de linhas de um resultado), e no caso de uma


alterao no nome do campo preciso alterar tambm a maneira de trat-lo. Por
isso mais aconselhvel que se use uma outra funo, como por exemplo

mysql_fetch_row, que possui a seguinte sintaxe:


array mysql_fetch_row(int result);
A varivel resultado o identificador da memria de resultados,
obtido como retorno da funo mysql_query. O resultado produzido por esta
funo de retirar a primeira linha da memria de resultados, se houver, e colocla num array. Assim torna-se mais fcil tratar um resultado com vrias linhas, e
sem utilizar os nomes dos campos na rotina de tratamento do resultado:

$consulta = SELECT nome, email FROM exemplo;


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

O cdigo acima ir imprimir todos os registros da tabela exemplo


numa tabela html. Se o programador desejar pular alguma(s) linha(s) do
resultado, poder utilizar a funo mysql_data_seek, que tem por objetivo definir
qual ser a prxima linha da memria de resultados a ser impressa. Sua sintaxe :

int mysql_data_seek(int resultado, int linha);


Sendo resultado o identificador do resultado e linha o numero da
linha. Retorna 0 em caso de falha, e um valor diferente de zero em caso de
sucesso.
Existem diversas outras funes para o tratamento de resultados, que
armazenam as linhas em arrays e objetos, assim como outras funes para
administrar o banco de dados, mas como este documento trata-se de uma
introduo, inicialmente no tratar tpicos mais avanados.

4. Tipos

Tipos Suportados

PHP suporta os seguintes tipos de dados:

Inteiro

Ponto flutuante

String

Array

Objeto

PHP utiliza checagem de tipos dinmica, ou seja, uma


varivel pode conter valores de diferentes tipos em diferentes
momentos da execuo do script. Por este motivo no necessrio
declarar o tipo de uma varivel para us-la. O interpretador PHP
decidir qual o tipo daquela varivel, verificando o contedo em
tempo de execuo.
Ainda assim, permitido converter os valores de um tipo
para outro desejado, utilizando o typecasting ou a funo settype
(ver adiante).

Inteiros (integer ou long)


Uma varivel pode conter um valor inteiro com atribuies que sigam
as seguintes sintaxes:

$vivas = 1234; #
$vivas = -234; #
$vivas = 0234; #
#
$vivas = 0x34; #
#

inteiro positivo na base decimal


inteiro negativo na base decimal
inteiro na base octal-simbolizado pelo 0
equivale a 156 decimal
inteiro na base hexadecimal(simbolizado
pelo 0x) equivale a 52 decimal.

A diferena entre inteiros simples e long est no nmero de bytes


utilizados para armazenar a varivel. Como a escolha feita pelo interpretador
PHP de maneira transparente para o usurio, podemos afirmar que os tipos so
iguais.

Nmeros em Ponto Flutuante (double ou float)


Uma varivel pode ter um valor em ponto flutuante com atribuies
que sigam as seguintes sintaxes:

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

Strings

Strings podem ser atribudas de duas maneiras:


a) utilizando aspas simples ( ' ) Desta maneira, o valor da varivel ser
exatamente o texto contido entre as aspas (com exceo de \\ e \' ver tabela
abaixo)
b) utilizando aspas duplas ( " ) Desta maneira, qualquer varivel ou caracter de
escape ser expandido antes de ser atribudo.
Exemplo:

<?
$teste = "Mauricio";
$vivas = '---$teste--\n';
echo "$vivas";
?>
A sada desse script ser "---$teste--\n".

<?
$teste = "Mauricio";
$vivas = "---$teste---\n";
echo "$vivas";
?>
A sada desse script ser "---Mauricio--" (com uma quebra de linha no
final).

A tabela seguinte lista os caracteres de escape:


Sintaxe Significado

\n
\r
\t
\\
\$
\
\

Nova linha
Retorno de carro
(semelhante a \n)
Tabulao horizontal
A prpria barra ( \ )
O smbolo $
Aspa simples
Aspa dupla

No apndice 01 est disponvel uma lista das funes utilizadas no


tratamento de strings.

Arrays

Arrays em PHP podem ser observados como mapeamentos ou como


vetores indexados. Mais precisamente, um valor do tipo array um dicionrio onde
os ndices so as chaves de acesso. Vale ressaltar que os ndices podem ser valores
de qualquer tipo e no somente inteiros. Inclusive, se os ndices forem todos
inteiros, estes no precisam formar um intervalo contnuo
Como a checagem de tipos em PHP dinmica, valores de tipos
diferentes podem ser usados como ndices de array, assim como os valores
mapeados tambm podem ser de diversos tipos.

Exemplo:
<?
$cor[1] = vermelho;
$cor[2] = verde;
$cor[3] = azul;
$cor[teste] = 1;
?>
Equivalentemente, pode-se escrever:
<?
$cor = array(1 => vermelho, 2 => verde, 3 => azul,
teste => 1);
?>
Listas
As listas so utilizadas em PHP para realizar atribuies mltiplas.
Atravs de listas possvel atribuir valores que esto num array para variveis.
Vejamos o exemplo:

Exemplo:
list($a, $b, $c) = array(a, b, c);
O comando acima atribui valores s trs variveis simultaneamente.
bom notar que s so atribudos s variveis da lista os elementos do array que
possuem ndices inteiros e no negativos. No exemplo acima as trs atribuies
foram bem sucedidas porque ao inicializar um array sem especificar os ndices eles
passam a ser inteiros, a partir do zero. Um fator importante que cada varivel da
lista possui um ndice inteiro e ordinal, iniciando com zero, que serve para
determinar qual valor ser atribudo. No exemplo anterior temos $a com ndice 0,
$b com ndice 1 e $c com ndice 2. Vejamos um outro exemplo:

$arr = array(1=>um,3=>tres,a=>letraA,2=>dois);
list($a,$b,$c,$d) = $arr;
Aps a execuo do cdigo acima temos os seguintes valores:

$a
$b
$c
$d

==
==
==
==

null
um
dois
tres

Devemos observar que varivel $a no foi atribudo valor, pois no


array no existe elemento com ndice 0 (zero). Outro detalhe importante que o
valor tres foi atribudo varivel $d, e no a $b, pois seu ndice 3, o mesmo
que $d na lista. Por fim, vemos que o valor letraA no foi atribudo a elemento
algum da lista pois seu ndice no inteiro.
Os ndices da lista servem apenas como referncia ao interpretador
PHP para realizar as atribuies, no podendo ser acessados de maneira alguma
pelo programador. De maneira diferente do array, uma lista no pode ser atribuda
a uma varivel, servindo apenas para fazer mltiplas atribuies atravs de um
array.
No apndice 02 est disponvel uma lista das funes mais comuns
para o tratamento de arrays.

Objetos
Um objeto pode ser inicializado utilizando o comando new para
instanciar uma classe para uma varivel.

Exemplo:
class teste {

function nada() {
echo nada;
}
}
$vivas = new teste;
$vivas -> nada();
A utilizao de objetos ser mais detalhada mais frente.

Booleanos

PHP no possui um tipo booleano, mas capaz de avaliar expresses


e retornar true ou false, atravs do tipo integer: usado o valor 0 (zero) para
representar o estado false, e qualquer valor diferente de zero (geralmente 1) para
representar o estado true.

Transformao de tipos

A transformao de tipos em PHP pode ser feita das seguintes


maneiras:
Coeres

Quando ocorrem determinadas operaes (+, por exemplo) entre


dois valores de tipos diferentes, o PHP converte o valor de um deles
automaticamente (coero). interessante notar que se o operando for uma
varivel, seu valor no ser alterado.
O tipo para o qual os valores dos operandos sero convertidos
determinado da seguinte forma: Se um dos operandos for float, o outro ser
convertido para float, seno, se um deles for integer, o outro ser convertido
para integer.

Exemplo:
$vivas =
$vivas =
$vivas =
$vivas =

1;
// $vivas a string 1
$vivas + 1; // $vivas o integer 2
$vivas + 3.7;// $vivas o double 5.7
1 + 1.5
// $vivas o double 2.5

Como podemos notar, o PHP converte string para integer ou

double mantendo o valor. O sistema utilizado pelo PHP para converter de strings

para nmeros o seguinte:

analisado o incio da string. Se contiver um nmero, ele ser


avaliado. Seno, o valor ser 0 (zero);

O nmero pode conter um sinal no incio (+ ou -);

Se a string contiver um ponto em sua parte numrica a ser


analisada, ele ser considerado, e o valor obtido ser double;

Se a string contiver um e ou E em sua parte numrica a ser


analisada, o valor seguinte ser considerado como expoente da
base 10, e o valor obtido ser double;

Exemplos:
$vivas = 1
$vivas = 1
$vivas = 1
$vivas = 1
$vivas = 1
$vivas = 1

+
+
+
+
+
+

10.5;
//
-1.3e3;
//
teste10.5; //
10testes; //
" 10testes";//
"+ 10testes";

$vivas == 11.5
$vivas == -1299
$vivas == 1
$vivas == 11
$vivas == 11
// $vivas == 1

Transformao explcita de tipos

A sintaxe do typecast de PHP semelhante ao C: basta escrever o


tipo entre parenteses antes do valor

Exemplo:
$vivas =
$vivas =
$vivas =
$vivas =

15;
(double) $vivas
3.9
(int) $vivas

//
//
//
//
//

$vivas integer (15)


$vivas double (15.0)
$vivas double (3.9)
$vivas integer (3)
o valor decimal truncado

Os tipos de cast permitidos so:


(int), (integer)

muda para integer;

(real), (double), (float)

muda para float;

(string)

muda para string;

(array)

muda para array;

(object)

muda para objeto.

Com a funo settype

A funo settype converte uma varivel para o tipo especificado,


que pode ser integer, double, string, array ou object.

Exemplo:
$vivas = 15;
settype($vivas,double)

// $vivas integer
// $vivas double

5. Constantes

Constantes pr-definidas

O PHP possui algumas constantes pr-definidas, indicando a verso


do PHP, o Sistema Operacional do servidor, o arquivo em execuo, e diversas
outras informaes. Para ter acesso a todas as constantes pr-definidas, pode-se
utilizar a funo phpinfo(), que exibe uma tabela contendo todas as constantes
pr-definidas, assim como configuraes da mquina, sistema operacional,
servidor http e verso do PHP instalada.

Definindo constantes

Para definir constantes utiliza-se a funo define. Uma vez definido,


o valor de uma constante no poder mais ser alterado. Uma constante s pode
conter valores escalares, ou seja, no pode conter nem um array nem um objeto. A
assinatura da funo define a seguinte:

int define(string nome_da_constante, mixed valor);


A funo retorna true se for bem-sucedida. Veja um exemplo de sua
utilizao a seguir:

define ("pi", 3.1415926536);


$circunf = 2*pi*$raio;

6. Operadores

Aritmticos

S podem ser utilizados quando os operandos so nmeros (integer


ou float). Se forem de outro tipo, tero seus valores convertidos antes da
realizao da operao.
+
*
/
%

adio
subtrao
multiplicao
diviso
mdulo

de strings

S h um operador exclusivo para strings:


.

concatenao

de atribuio

Existe um operador bsico de atribuio e diversos derivados.


Sempre retornam o valor atribudo. No caso dos operadores derivados de
atribuio, a operao feita entre os dois operandos, sendo atribudo o resultado
para o primeiro. A atribuio sempre por valor, e no por referncia.

=
+=
-=
*=
/=
%=
.=

atribuio
atribuio
atribuio
atribuio

simples
com adio
com subtrao
com

multiplicao
atribuio com diviso
atribuio com mdulo
atribuio com
concatenao

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

Comparam dois nmeros bit a bit.


&
|
^
~
<<
>>

e lgico
ou lgico
ou exclusivo
no (inverso)
shift left
shift right

Lgicos
Utilizados para inteiros representando valores booleanos
and
or
xor
!
&&
||

e lgico
ou lgico
ou exclusivo
no (inverso)
e lgico
ou lgico

Existem dois operadores para e e para ou porque eles tm


diferentes posies na ordem de precedncia.

Comparao

As comparaes so feitas entre os valores contidos nas variveis, e


no as referncias. Sempre retornam um valor booleano.
==

igual a

!=
<
>
<=

diferente de
menor que
maior que
menor ou igual

>=

a
maior ou igual a

Expresso condicional

Existe um operador de seleo que ternrio. Funciona assim:

(expressao1)?(expressao2):( expressao3)
o interpretador PHP avalia a primeira expresso. Se ela for
verdadeira, a expresso retorna o valor de expresso2. Seno, retorna o valor de
expresso3.

de incremento e decremento

++
--

incremento
decremento

Podem ser utilizados de duas formas: antes ou depois da varivel.


Quando utilizado antes, retorna o valor da varivel antes de increment-la ou
decrement-la.

Quando

utilizado

depois,

retorna

valor

da

varivel

incrementado ou decrementado.

Exemplos:
$a = $b = 10; // $a e $b recebem o valor 10
$c = $a++; // $c recebe 10 e $a passa a ter 11
$d = ++$b; // $d recebe 11, valor de $b j incrementado
Ordem de precedncia dos operadores

A tabela a seguir mostra a ordem de precedncia dos operadores no


momento de avaliar as expresses;
Precedncia

Associatividade

Operadores

1.

esquerda

2.

esquerda

or

Precedncia

Associatividade

Operadores

3.

esquerda

xor

4.

esquerda

and

5.

direita

6.

esquerda

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

7.

esquerda

?:

8.

esquerda

||

9.

esquerda

&&

10.

esquerda

11.

esquerda

12.

esquerda

&

13.

no associa

== !=

14.

no associa

< <= > >=

15.

esquerda

<< >>

16.

esquerda

+-.

17.

esquerda

*/%

18.

direita

! ~ ++ -- (int) (double) (string) (array) (object)


@

19.

direita

20.

no associa

print

new

7. Estruturas de Controle
As estruturas que veremos a seguir so comuns para as linguagens
de programao imperativas, bastando, portanto, descrever a sintaxe de cada uma
delas, resumindo o funcionamento.

Blocos
Um bloco consiste de vrios comandos agrupados com o objetivo de
relacion-los com determinado comando ou funo. Em comandos como if, for,

while, switch e em declaraes de funes blocos podem ser utilizados para


permitir que um comando faa parte do contexto desejado. Blocos em PHP so
delimitados pelos caracteres { e }. A utilizao dos delimitadores de bloco em
uma parte qualquer do cdigo no relacionada com os comandos citados ou
funes

no

produzir

efeito

algum,

ser

tratada

normalmente

pelo

interpretador.

Exemplo:
if ($x == $y)
comando1;
comando2;
Para que comando2 esteja relacionado ao if preciso utilizar um
bloco:

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

Comandos de seleo

Tambm

chamados

de

condicionais,

os

comandos

de

seleo

permitem executar comandos ou blocos de comandos com base em testes feitos


durante a execuo.

if

O mais trivial dos comandos condicionais o if. Ele testa a condio


e executa o comando indicado se o resultado for true (valor diferente de zero). Ele
possui duas sintaxes:

if (expresso)
comando;
if (expresso):
comando;
. . .
comando;
endif;
Para incluir mais de um comando no if da primeira sintaxe, preciso
utilizar um bloco, demarcado por chaves.
O else um complemento opcional para o if. Se utilizado, o
comando ser executado se a expresso retornar o valor false (zero). Suas duas
sintaxes so:

if (expresso)
comando;
else
comando;
if (expresso):
comando;
. . .
comando;
else
comando;
. . .
comando;
endif;

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

if ($a > $b)


$maior = $a;

else
$maior = $b;
O exemplo acima coloca em $maior o maior valor entre $a e $b
Em determinadas situaes necessrio fazer mais de um teste, e
executar condicionalmente diversos comandos ou blocos de comandos. Para
facilitar o entendimento de uma estrutura do tipo:

if (expressao1)
comando1;
else
if (expressao2)
comando2;
else
if (expressao3)
comando3;
else
comando4;
foi criado o comando, tambm opcional elseif. Ele tem a mesma
funo de um else e um if usados sequencialmente, como no exemplo acima.
Num mesmo if podem ser utilizados diversos elseifs, ficando essa utilizao a
critrio do programador, que deve zelar pela legibilidade de seu script.
O comando elseif tambm pode ser utilizado com dois tipos de
sintaxe. Em resumo, a sintaxe geral do comando if fica das seguintes maneiras:

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

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

switch

O comando switch atua de maneira semelhante a uma srie de


comandos if na mesma expresso. Frequentemente o programador pode querer
comparar uma varivel com diversos valores, e executar um cdigo diferente a
depender de qual valor igual ao da varivel. Quando isso for necessrio, deve-se
usar o comando switch. O exemplo seguinte mostra dois trechos de cdigo que
fazem a mesma coisa, sendo que o primeiro utiliza uma srie de ifs e o segundo
utiliza switch:

if ($i == 0)
print i
elseif ($i ==
print i
elseif ($i ==
print i

igual a zero;
1)
igual a um;
2)
igual a dois;

switch ($i) {
case 0:
print i igual a zero;
break;
case 1:
print i igual a um;
break;
case 2:
print i igual a dois;
break;
}
importante compreender o funcionamento do switch para no
cometer enganos. O comando switch testa linha a linha os cases encontrados, e a
partir do momento que encontra um valor igual ao da varivel testada, passa a

executar todos os comandos seguintes, mesmo os que fazem parte de outro teste,
at o fim do bloco. por isso usa-se o comando break, quebrando o fluxo e fazendo
com que o cdigo seja executado da maneira desejada. Veremos mais sobre o

break mais adiante. Veja o exemplo:


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

No exemplo acima, se $i for igual a zero, os trs comandos print


sero executados. Se $i for igual a 1, os dois ltimos print sero executados. O
comando s funcionar da maneira desejada se $i for igual a 2.
Em outras linguagens que implementam o comando switch, ou
similar, os valores a serem testados s podem ser do tipo inteiro. Em PHP
permitido usar valores do tipo string como elementos de teste do comando switch.
O exemplo abaixo funciona perfeitamente:

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

comandos de repetio
while
O while o comando de repetio (lao) mais simples. Ele testa uma
condio e executa um comando, ou um bloco de comandos, at que a condio
testada seja falsa. Assim como o if, o while tambm possui duas sintaxes
alternativas:

while (<expressao>)
<comando>;

while (<expressao>):
<comando>;
. . .
<comando>;
endwhile;
A expresso s testada a cada vez que o bloco de instrues
termina, alm do teste inicial. Se o valor da expresso passar a ser false no meio
do bloco de instrues, a execuo segue at o final do bloco. Se no teste inicial a
condio for avaliada como false, o bloco de comandos no ser executado.
O exemplo a seguir mostra o uso do while para imprimir os nmeros
de 1 a 10:

$i = 1;
while ($i <=10)
print $i++;

do... while

O lao do..while funciona de maneira bastante semelhante ao

while, com a simples diferena que a expresso testada ao final do bloco de


comandos. O lao do..while possui apenas uma sintaxe, que a seguinte:

do {
<comando>
. . .
<comando>
} while (<expressao>);
O exemplo utilizado para ilustrar o uso do while pode ser feito da
seguinte maneira utilizando o do.. while:

$i = 0;
do {
print ++$i;
} while ($i < 10);
for

O tipo de lao mais complexo o for. Para os que programam em C,


C++ ou Java, a assimilao do funcionamento do for natural. Mas para aqueles

que esto acostumados a linguagens como Pascal, h uma grande mudana para o
uso do for. As duas sintaxes permitidas so:

for (<inicializacao>;<condicao>;<incremento>)
<comando>;
for (<inicializacao>;<condicao>;<incremento>) :
<comando>;
. . .
<comando>;
endfor;
As trs expresses que ficam entre parnteses tm as seguintes
finalidades:
Inicializao: comando ou sequencia de comandos a serem realizados
antes do inicio do lao. Serve para inicializar variveis.
Condio: Expresso booleana que define se os comandos que esto
dentro do lao sero executados ou no. Enquanto a expresso for verdadeira
(valor diferente de zero) os comandos sero executados.
Incremento: Comando executado ao final de cada execuo do lao.
Um comando for funciona de maneira semelhante a um while
escrito da seguinte forma:

<inicializacao>
while (<condicao>) {
comandos
...
<incremento>
}

Quebra de fluxo

Break
O comando break pode ser utilizado em laos de do, for e while,
alm do uso j visto no comando switch. Ao encontrar um break dentro de um
desses laos, o interpretador PHP para imediatamente a execuo do lao,
seguindo normalmente o fluxo do script.

while ($x > 0) {


...
if ($x == 20) {
echo erro! x = 20;
break;
...
}
No trecho de cdigo acima, o lao while tem uma condio para seu
trmino normal ($x <= 0), mas foi utilizado o break para o caso de um trmino no
previsto no incio do lao. Assim o interpretador seguir para o comando seguinte
ao lao.

Continue

O comando continue tambm deve ser utilizado no interior de


laos, e funciona de maneira semelhante ao break, com a diferena que o fluxo ao
invs de sair do lao volta para o incio dele. Vejamos o exemplo:

for ($i = 0; $i < 100; $i++) {


if ($i % 2) continue;
echo $i ;
}
O exemplo acima uma maneira ineficiente de imprimir os nmeros
pares entre 0 e 99. O que o lao faz testar se o resto da diviso entre o nmero e
2 0. Se for diferente de zero (valor lgico true) o interpretador encontrar um

continue, que faz com que os comandos seguintes do interior do lao sejam
ignorados, seguindo para a prxima iterao.

8. Funes

Definindo funes

A sintaxe bsica para definir uma funo :

function nome_da_funo([arg1, arg2, arg3]) {


Comandos;
... ;
[return <valor de retorno>];
}
Qualquer cdigo PHP vlido pode estar contido no interior de uma
funo. Como a checagem de tipos em PHP dinmica, o tipo de retorno no deve
ser declarado, sendo necessrio que o programador esteja atento para que a
funo retorne o tipo desejado. recomendvel que esteja tudo bem documentado
para facilitar a leitura e compreenso do cdigo. Para efeito de documentao,
utiliza-se o seguinte formato de declarao de funo:

tipo function nome_da_funcao(tipo arg1, tipo arg2, ...);


Este formato s deve ser utilizado na documentao do script, pois o
PHP no aceita a declarao de tipos. Isso significa que em muitos casos o
programador deve estar atento ao tipos dos valores passados como parmetros,
pois se no for passado o tipo esperado no emitido nenhum alerta pelo
interpretador PHP, j que este no testa os tipos.

Valor de retorno

Toda funo pode opcionalmente retornar um valor, ou simplesmente


executar os comandos e no retornar valor algum.
No possvel que uma funo retorne mais de um valor, mas
permitido fazer com que uma funo retorne um valor composto, como listas ou
arrays.

Argumentos

possvel passar argumentos para uma funo. Eles devem ser


declarados logo aps o nome da funo, entre parnteses, e tornam-se variveis

pertencentes ao escopo local da funo. A declarao do tipo de cada argumento


tambm utilizada apenas para efeito de documentao.

Exemplo:
function imprime($texto){
echo $texto;
}
imprime(teste de funes);

Passagem de parmetros por referncia

Normalmente, a passagem de parmetros em PHP feita por valor,


ou seja, se o contedo da varivel for alterado, essa alterao no afeta a varivel
original.

Exemplo:
function mais5($numero) {
$numero += 5;
}
$a = 3;
mais5($a); //$a continua valendo 3
No exemplo acima, como a passagem de parmetros por valor, a
funo mais5 intil, j que aps a execuo sair da funo o valor anterior da
varivel recuperado. Se a passagem de valor fosse feita por referncia, a varivel
$a teria 8 como valor. O que ocorre normalmente que ao ser chamada uma
funo, o interpretador salva todo o escopo atual, ou seja, os contedos das
variveis. Se uma dessas variveis for passada como parmetro, seu contedo fica
preservado, pois a funo ir trabalhar na verdade com uma cpia da varivel.
Porm, se a passagem de parmetros for feita por referncia, toda alterao que a
funo realizar no valor passado como parmetro afetar a varivel que o contm.
H duas maneiras de fazer com que uma funo tenha parmetros
passados por referncia: indicando isso na declarao da funo, o que faz com
que a pasagem de parmetros sempre seja assim; e tambm na prpria chamada
da funo. Nos dois casos utiliza-se o modificador &. Vejamos um exemplo que
ilustra os dois casos:

function mais5(&$num1, $num2) {

$num1 += 5;
$num2 += 5;
}
$a = $b = 1;
mais5($a, $b); /* Neste caso, s $num1 ter seu valor
alterado, pois a passagem por referncia est definida na
declarao da funo. */
mais5($a, &$b);
valores alterados. */

/*

Aqui

as

duas

variveis

tero

seus

Argumentos com valores pr-definidos (default)

Em PHP possvel ter valores default para argumentos de funes,


ou seja, valores que sero assumidos em caso de nada ser passado no lugar do
argumento. Quando algum parmetro declarado desta maneira, a passagem do
mesmo na chamada da funo torna-se opcional.

function teste($vivas = testando) {


echo $vivas;
}
teste(); // imprime testando
teste(outro teste); // imprime outro teste
bom lembrar que quando a funo tem mais de um parmetro, o
que tem valor default deve ser declarado por ltimo:

function teste($figura = circulo, $cor) {


echo a figura um , $figura, de cor $cor;
}
teste(azul);
/* A funo no vai funcionar da maneira esperada,
ocorrendo um erro no interpretador. A declarao correta : */
function teste2($cor, $figura = circulo) {
echo a figura um , $figura, de cor $cor;
}
teste2(azul);
/* Aqui a funcao funciona da maneira esperada, ou seja,
imprime o texto: a figura um crculo de cor azul */

Contexto
O contexto o conjunto de variveis e seus respectivos valores num
determinado ponto do programa. Na chamada de uma funo, ao iniciar a
execuo do bloco que contm a implementao da mesma criado um novo
contexto, contendo as variveis declaradas dentro do bloco, ou seja, todas as
variveis utilizadas dentro daquele bloco sero eliminadas ao trmino da execuo
da funo.
Escopo
O escopo de uma varivel em PHP define a poro do programa onde
ela pode ser utilizada. Na maioria dos casos todas as variveis tm escopo global.
Entretanto, em funes definidas pelo usurio um escopo local criado. Uma
varivel de escopo global no pode ser utilizada no interior de uma funo sem que
haja uma declarao.

Exemplo:
$vivas = Testando;
function Teste() {
echo $vivas;
}
Teste();
O trecho acima no produzir sada alguma, pois a varivel $vivas
de escopo global, e no pode ser referida num escopo local, mesmo que no haja
outra com nome igual que cubra a sua visibilidade. Para que o script funcione da
forma desejada, a varivel global a ser utilizada deve ser declarada.

Exemplo:
$vivas = Testando;
function Teste() {
global $vivas;
echo $vivas;
}
Teste();
Uma declarao global pode conter vrias variveis, separadas por
vrgulas. Uma outra maneira de acessar variveis de escopo global dentro de uma
funo utilizando um array pr-definido pelo PHP cujo nome $GLOBALS. O
ndice para a varivel referida o proprio nome da varivel, sem o caracter $. O
exemplo acima e o abaixo produzem o mesmo resultado:

Exemplo:
$vivas = "Testando";
function Teste() {
echo $GLOBALS["vivas"]; // imprime $vivas
echo $vivas; // no imprime nada
}
Teste();

9. Variveis

O modificador static

Uma varivel esttica visvel num escopo local, mas ela


inicializada apenas uma vez e seu valor no perdido quando a execuo do script
deixa esse escopo. Veja o seguinte exemplo:

function Teste() {
$a = 0;
echo $a;
$a++;
}
O ltimo comando da funo intil, pois assim que for encerrada a
execuo da funo a varivel $a perde seu valor. J no exemplo seguinte, a cada
chamada da funo a varivel $a ter seu valor impresso e ser incrementada:

function Teste() {
static $a = 0;
echo $a;
$a++;
}
O modificador static muito utilizado em funes recursivas, j que o
valor de algumas variveis precisa ser mantido. Ele funciona da seguinte forma: O
valor das variveis declaradas como estticas mantido ao terminar a execuo da
funo. Na prxima execuo da funo, ao encontrar novamente a declarao
com static, o valor da varivel recuperado.
Em outras palavras, uma varivel declarada como static tem o
mesmo tempo de vida que uma varivel global, porm sua visibilidade restrita
ao escopo local em que foi declarada e s recuperada aps a declarao.
Exemplo:

function Teste() {
echo "$a";
static $a = 0;
$a++;
}
O exemplo acima no produzir sada alguma. Na primeira execuo
da funo, a impresso ocorre antes da atribuio de um valor funo, e portanto
o contedo de $a nulo (string vazia). Nas execues seguintes da funo Teste() a

impresso ocorre antes da recuperao do valor de $a, e portanto nesse momento


seu valor ainda nulo. Para que a funo retorne algum valor o modificador

static deve ser utilizado.

Variveis Variveis

O PHP tem um recurso conhecido como variveis variveis, que


consiste em variveis cujos nomes tambm so variveis. Sua utilizao feita
atravs do duplo cifro ($$).

$a = teste;
$$a = Mauricio Vivas;
O exemplo acima e equivalente ao seguinte:
$a = teste;
$teste = Mauricio Vivas;

Variveis enviadas pelo navegador

Para interagir com a navegao feita pelo usurio, necessrio que o


PHP possa enviar e receber informaes para o software de navegao. A maneira
de enviar informaes, como j foi visto anteriormente, geralmente atravs de
um comando de impresso, como o echo. Para receber informaes vindas do
navegador atravs de um link ou um formulrio html o PHP utiliza as informaes
enviadas atravs da URL. Por exemplo: se seu script php est localizado em

http://localhost/teste.php3

voc

http://localhost/teste.php3?vivas=teste,

chama

com

url

automaticamente

PHP

criar uma varivel com o nome $vivas contendo a string teste. Note que o
contedo da varivel est no formato urlencode. Os formulrios html j enviam
informaes automaticamente nesse formato, e o PHP decodifica sem necessitar de
tratamento pelo programador.

URLencode

O formato urlencode obtido substituindo os espaos pelo caracter


+ e todos os outros caracteres no alfa-numricos (com exceo de _) pelo
caracter % seguido do cdigo ASCII em hexadecimal.

Por exemplo: o texto Testando 1 2 3 !! em urlencode fica


Testando+1+2+3+%21%21
O PHP possui duas funes para tratar com texto em urlencode.
Seguem suas sintaxes:

string urlencode(string texto);


string urldecode(string texto);

Essas funes servem respectivamente para codificar ou


decodificar um texto passado como argumento. Para entender
melhor o que um argumento e como funciona uma funo, leia o
tpico funes.

Variveis de ambiente

O PHP possui diversas variveis de ambiente, como a $PHP_SELF, por


exemplo, que contm o nome e o path do prprio arquivo. Algumas outras contm
informaes sobre o navegador do usurio, o servidor http, a verso do PHP e
diversas informaes. Para ter uma listagem de todas as variveis e constantes de
ambiente e seus respectivos contedos, deve-se utilizar a funo phpinfo().

Verificando o tipo de uma varivel


Por causa da tipagem dinmica utilizada pelo PHP, nem sempre
possvel saber qual o tipo de uma varivel em determinado instantese no contar
com a ajuda de algumas funes que ajudam a verificar isso. A verificao pode ser
feita de duas maneiras:

Funo que retorna o tipo da varivel

Esta funo a gettype. Sua assinatura a seguinte:

string gettype(mixed var);


A palavra mixed indica que a varivel var pode ser de diversos
tipos.
A funo gettype pode retornar as seguintes strings: integer,

double, string, array, object e unknown type.

Funes que testam o tipo da varivel

So as funes is_int,

is_integer,

is_real,

is_long,

is_float, is_string, is_array e is_object. Todas tm o mesmo formato,


seguindo modelo da assinatura a seguir:

int is_integer(mixed var);


Todas essas funes retornam true se a varivel for daquele tipo, e

false em caso contrrio.

Destruindo uma varivel

possvel

desalocar

uma

varivel

se

ela

no

for

usada

posteriormente atravs da funo unset, que tem a seguinte assinatura:

int unset(mixed var);


A funo destri a varivel, ou seja, libera a memria ocupada por
ela, fazendo com que ela deixe de existir. Se mais na frente for feita uma chamada
varivel, ser criada uma nova varivel de mesmo nome e de contedo vazio, a
no ser que a chamada seja pela funo isset. Se a operao for bem sucedida,
retorna true.

Verificando se uma varivel possui um valor

Existem dois tipos de teste que podem ser feitos para verificar se
uma varivel est setada: com a funo isset e com a funo empty.
A funo isset

Possui o seguinte prottipo:

int isset(mixed var);


E retorna true se a varivel estiver setada (ainda que com uma
string vazia ou o valor zero), e false em caso contrrio.

A funo empty

Possui a seguinte assinatura:

int empty(mixed var);


E retorna true se a varivel no contiver um valor (no estiver
setada) ou possuir valor 0 (zero) ou uma string vazia. Caso contrrio, retorna

false.

10. Classes e Objetos

Classe
Uma classe um conjunto de variveis e funes relacionadas a essas
variveis.

Uma

vantagem

da

utilizao

poder

usufruir

do

recurso

de

encapsulamento de informao. Com o encapsulamento o usurio de uma classe


no precisa saber como ela implementada, bastando para a utilizao conhecer a
interface, ou seja, as funes disponveis. Uma classe um tipo, e portanto no
pode ser atribuda a uma varivel. Para definir uma classe, deve-se utilizar a
seguinte sintaxe:

class Nome_da_classe {
var $variavel1;
var $variavel2;
function funcao1 ($parametro) {
/* === corpo da funo === */
}
}
Objeto
Como foi dito anteriormente, classes so tipos, e no podem ser
atribudas a variveis. Variveis do tipo de uma classe so chamadas de objetos, e
devem ser criadas utilizando o operador new, seguindo o exemplo abaixo:

$variavel = new $nome_da_classe;


Para

utilizar

as

funes definidas na classe, deve ser utilizado o

operador ->, como no exemplo:

$variavel->funcao1(
A varivel $this
Na definio de uma classe, pode-se utilizar a varivel $this, que o
prprio objeto. Assim, quando uma classe instanciada em um objeto, e uma
funo desse objeto na definio da classe utiliza a varivel $this, essa varivel
significa o objeto que estamos utilizando.
Como exemplo da utilizao de classes e objetos, podemos utilizar a
classe conta, que define uma conta bancria bastante simples, com funes para
ver saldo e fazer um crdito.

class conta {
var $saldo;
function saldo() {
return $this->saldo;
}
function credito($valor) {
$this->saldo += $valor;
}
}
$minhaconta = new conta;
$minhaconta->saldo();

// a variavel interna no foi


// inicializada, e no contm
// valor algum

$minhaconta->credito(50);
$minhaconta->saldo(); // retorna 50

SubClasses
Uma classe pode ser uma extenso de outra. Isso significa que ela
herdar todas as variveis e funes da outra classe, e ainda ter as que forem
adicionadas pelo programador. Em PHP no permitido utilizar herana mltipla,
ou seja, uma classe pode ser extenso de apenas uma outra.Para criar uma classe
extendida, ou derivada de outra, deve ser utilizada a palavra reservada extends,
como pode ser visto no exemplo seguinte:

class novaconta extends conta {


var $numero;
function numero() {
return $this->numero;
}
}
A classe acima derivada da classe conta, tendo as mesmas funes
e variveis, com a adio da varivel $numero e a funo numero().
Construtores
Um

construtor

uma

funo

definida

na

classe

que

automaticamente chamada no momento em que a classe instanciada (atravs do


operador new). O construtor deve ter o mesmo nome que a classe a que pertence.
Veja o exemplo:

class conta {
var $saldo;
function conta () {
$this.saldo = 0;

}
function saldo() {
return $this->saldo;
}
function credito($valor) {
$this->saldo += $valor;
}
}
Podemos perceber que a classe conta agora possui um construtor,
que inicializa a varivel $saldo com o valor 0.
Um construtor pode conter argumentos, que so opcionais, o que
torna esta ferramenta mais poderosa. No exemplo acima, o construtor da classe
conta pode receber como argumento um valor, que seria o valor inicial da conta.
Vale observar que para classes derivadas, o construtor da classe pai
no automaticamente herdado quando o construtor da classe derivada
chamado.

12. Concluses

A realizao deste Projeto Supervisionado possibilitou o estudo da


linguagem PHP, que se mostrou uma ferramenta poderosa e simples de utilizar na
construo de sites para a World Wide Web dinmicos, possibilitando uma maior
interao com o usurio e a armazenagem das informaes em Bancos de Dados.
Aps a concluso da aplicao, tornou-se claro que a combinao de
scripts server-side, como o PHP, com scripts client-side, como JavaScript, por
exemplo, possibilita um maior aproveitamento dos recursos disponveis para criar
pginas dinmicas, e no processo de criao deve-se ponderar bastante para
concluir qual dos dois tipos de scripts deve ser utilizado para determinado fim.
Entre as linguagens de script server-side, PHP surgiu como uma
tima opo, por diversos motivos: o custo de aquisio, que no existe; a
portabilidade, permitindo que uma aplicao seja desenvolvida em uma plataforma
para ser executada em outra; a simplicidade, j que os scripts ficam no prprio
cdigo html, e possuem uma sintaxe bastante simples; a possibilidade de trabalhar
com diversos bancos de dados e servidores http, alm do grande nmero de
funes pr-definidas, entre outras coisas.
Por esses e outros motivos, possvel afirmar que o estudo sobre PHP
foi bastante enriquecedor, por ter produzido uma documentao em portugus
para a linguagem e ter motivado o aluno a continuar se dedicando ao tema.

13. Bibliografia e Referncias


A

pesquisa

foi

baseada

no

manual

de

PHP,

disponvel

em

www.php.net, e em diversos tutoriais disponveis no site www.phpbuilder.com.


Esses dois endereos contm uma vasta documentao sobre a linguagem, alm de
endereos para listas de discusso, onde pode-se solicitar ajuda de programadores
mais experientes.
Uma boa referncia em portugus a lista PHP para quem fala
Portugus, que pode ser assinada no endereo www.egroups.com/group/phppt/.
Em ingls, alm dos endereos citados acima, uma boa fonte o site
PHPWizard, que pode ser encontrado em www.phpwizard.net.

APNDICE 01 - Funes para tratamento de strings

Funes relacionadas a HTML


htmlspecialchars

string htmlspecialchars(string str);


Retorna a string fornecida, substituindo os seguintes caracteres:

& para '&amp;'

" para '&quot;'

< para '&lt;'

> para &gt;'

htmlentities

string htmlentities(string str);


Funciona de maneira semelhante ao comando anterior, mas de
maneira mais completa, pois converte todos os caracteres da string que possuem
uma representao especial em html, como por exemplo:

para '&ordm;'

para '&ordf;'

para '&aacute;'

para &ccedil;'

nl2br

string nl2br(string str);


Retorna a string fornecida substituindo todas as quebras de linha
(\n) por quebras de linhas em html (<br>).

Exemplo:
echo nl2br(Mauricio\nVivas\n);
Imprime:
Maurcio<br>Vivas<br>

get_meta_tags

array get_meta_tags(string arquivo);


Abre um arquivo html e percorre o cabealho em busca de meta
tags, retornando num array todos os valores encontrados.

Exemplo:
No arquivo teste.html temos:
...
<head>
<meta name="author" content="jose">
<meta name="tags" content="php3 documentation">
...
</head><!-- busca encerra aqui -->
...
a execuo da funo:
get_meta_tags(teste.html);
retorna o array:
array(author=>jose,tags=>"php3 documentation");

strip_tags

string strip_tags(string str);


Retorna a string fornecida, retirando todas as tags html e/ou PHP
encontradas.

Exemplo:
strip_tags('<a href="teste1.php3">testando</a><br>');
Retorna a string testando

urlencode

string urlencode(string str);


Retorna a string fornecida, convertida para o formato urlencode. Esta
funo til para passar variveis para uma prxima pgina.

urldecode

string urldecode(string str);

Funciona de maneira inversa a urlencode, desta vez decodificando a


string fornecida do formato urlencode para texto normal.

Funes relacionadas a arrays

Implode e join

string implode(string separador, array partes);


string join(string separador, array partes);
As duas funes so idnticas. Retornam uma string contendo todos
os elementos do array fornecido separados pela string tambm fornecida.

Exemplo:
$partes = array("a", "casa nmero", 13, " azul");
$inteiro = join(" ",$partes);
$inteiro passa a conter a string:
a casa nmero 13 azul
split

array split(string padrao, string str, int [limite]);


Retorna um array contendo partes da string fornecida separadas pelo
padro fornecido, podendo limitar o nmero de elementos do array.

Exemplo:
$data = 11/14/1975;
$data_array = split(/,$data);
O cdigo acima faz com que a varivel $data_array receba o
valor:
array(11,14,1975);

explode

array explode(string padrao, string str);


Funciona de maneira bastante semelhante funo split, com a
diferena que no possvel estabelecer um limite para o nmero de elementos do
array.

Comparaes entre strings


similar_text

int similar_text(string str1, string str2, double [porcentagem]);


Compara as duas strings fornecidas e retorna o nmero de caracteres
coincidentes. Opcionalmente pode ser fornecida uma varivel, passada por
referncia (ver tpico sobre funes), que receber o valor percentual de
igualdade entre as strings. Esta funo case sensitive, ou seja, maisculas e
minsculas so tratadas como diferentes.

Exemplo:
$num = similar_text("teste", "testando",&$porc);
As variveis passam a ter os seguintes valores:
$num == 4; $porc == 61.538461538462

strcasecmp

int strcasecmp(string str1, string str2);


Compara as duas strings e retorna 0 (zero) se forem iguais, um valor
maior que zero se str1 > str2, e um valor menor que zero se str1 < str2.
Esta funo case insensitive, ou seja, maisculas e minsculas so tratadas como
iguais.

strcmp

int strcasecmp(string str1, string str2);


Funciona de maneira semelhante funo strcasecmp, com a
diferena que esta case sensitive, ou seja, maisculas e minsculas so tratadas
como diferentes.

strstr

string strstr(string str1, string str2);


string strchr(string str1, string str2);
As duas funes so idnticas. Procura a primeira ocorrncia de str2
em str1. Se no encontrar, retorna uma string vazia, e se encontrar retorna todos
os caracteres de str1 a partir desse ponto.

Exemplo:
strstr("Mauricio Vivas", "Viv"); // retorna Vivas

stristr

string strstr(string str1, string str2);


Funciona de maneira semelhante funo strstr, com a diferena
que esta case insensitive, ou seja, maisculas e minsculas so tratadas como
iguais.

strpos

int strpos(string str1, string str2, int [offset] );


Retorna a posio da primeira ocorrncia de str2 em str1, ou zero
se no houver. O parmetro opcional offset determina a partir de qual caracter
de str1 ser efetuada a busca. Mesmo utilizando o offset, o valor de retorno
referente ao incio de str1.

strrpos

int strrpos(string haystack, char needle);


Retorna a posio da ltima ocorrncia de str2 em str1, ou zero se
no houver.

Funes para edio de strings

chop

string chop(string str);


Retira espaos e linhas em branco do final da string fornecida.

Exemplo:
chop(
Teste

\n

\n

); // retorna

Teste

ltrim

string ltrim(string str);

Retira espaos e linhas em branco do final da string fornecida.

Exemplo:
ltrim(

Teste

\n

\n ); // retorna Teste

\n

\n

trim

string trim(string str);


Retira espaos e linhas em branco do incio e do final da string
fornecida.

Exemplo:
trim(
Teste

\n

\n ); // retorna Teste

strrev

string strrev(string str);


Retorna a string fornecida invertida.

Exemplo:
strrev(Teste); // retorna etseT

strtolower

string strtolower(string str);


Retorna a string fornecida com todas as letras minsculas.

Exemplo:
strtolower(Teste); // retorna teste

strtoupper

string strtoupper(string str);


Retorna a string fornecida com todas as letras maisculas.

Exemplo:
strtolower(Teste); // retorna TESTE

ucfirst

string ucfirst(string str);


Retorna a string fornecida com o primeiro caracter convertido para
letra maiscula.

Exemplo:
ucfirst(teste de funcao); // retorna Teste de funcao

ucwords

string ucwords(string str);


Retorna a string fornecida com todas as palavras iniciadas por letras
maisculas.

Exemplo:
ucwords(teste de funcao); // retorna Teste De Funcao

str_replace

string str_replace(string str1, string str2, string str3);


Altera todas as ocorrncias de str1 em str3 pela string str2.

Funes diversas

chr

string chr(int ascii);


Retorna o caracter correspondente ao cdigo ASCII fornecido.

ord

int ord(string string);


Retorna o cdigo ASCII correspontente ao caracter fornecido.

echo

echo(string arg1, string [argn]... );


Imprime os argumentos fornecidos.

print

print(string arg);
Imprime o argumento fornecido.
strlen

int strlen(string str);


Retorna o tamanho da string fornecida.

APNDICE 02 - Funes para tratamento de arrays

Funes Genricas

Array

array array(...);
a funo que cria um array a partir dos parmetros forncidos.
possvel fornecer o ndice de cada elemento. Esse ndice pode ser um valor de
qualquer tipo, e no apenas de inteiro. Se o ndice no for fornecido o PHP atribui
um valor inteiro sequencial, a partir do 0 ou do ltimo ndice inteiro explicitado.
Vejamos alguns exemplos:

Exemplo 1
$teste = array("um", "dois","tr"=>"tres",5=>"quatro","cinco");
Temos o seguinte mapeamento:
0 => um (0 o primeiro ndice, se no houver um explicito)
1 => dois (o inteiro seguinte)
tr => tres
5 => quatro (valor explicitado)
6 => cinco (o inteiro seguinte ao ltimo atribudo, e no o
prximo valor, que seria 2)
Exemplo 2
$teste = array("um", 6=>"dois","tr"=>"tres",5=>"quatro","cinco");
Temos o seguinte mapeamento:
0 => um
6 => dois
tr => tres
5 => quatro (seria 7, se no fosse explicitado)
7 => cinco (seria 6, se no estivesse ocupado)
Em geral, no recomendvel utilizar arrays com vrios tipos de
ndices, j que isso pode confundir o programador. No caso de realmente haver a
necessidade de utilizar esse recurso, deve-se ter bastante ateno ao manipular os
ndices do array.

range

array range(int minimo, int maximo);


A funo range cria um array cujos elementos so os inteiros

pertencentes ao intervalo fornecido, inclusive. Se o valor do primeiro parmetro


for maior do que o do segundo, a funo retorna false (valor vazio).

shuffle

void shuffle(array &arr);


Esta funo embaralha o array, ou seja, troca as posies dos
elementos aleatoriamente e no retorna valor algum.

sizeof

int sizeof(array arr);


Retorna um valor inteiro contendo o nmero de elementos de um
array. Se for utilizada com uma varivel cujo valor no do tipo array, retorna 1.
Se a varivel no estiver setada ou for um array vazio, retorna 0.

Funes de navegao
Toda varivel do tipo array possui um ponteiro interno indicando o
prximo elemento a ser acessado no caso de no ser especificado um ndice. As
funes seguintes servem para modificar esse ponteiro, permitindo assim
percorrer um array para verificar seu contedo (chaves e elementos).

reset

mixed reset(array arr);


Seta o ponteiro interno para o primeiro elemento do array, e retorna
o contedo desse elemento.
end

mixed end(array arr);


Seta o ponteiro interno para o ltimo elemento do array, e retorna o
contedo desse elemento.

next

mixed next(array arr);


Seta o ponteiro interno para o prximo elemento do array, e retorna o

contedo desse elemento.


Obs.: esta no uma boa funo para determinar se um elemento o
ltimo do array, pois pode retornar false tanto no final do array como no caso de
haver um elemento vazio.

prev

mixed prev(array arr);


Seta o ponteiro interno para o elemento anterior do array, e retorna o
contedo desse elemento. Funciona de maneira inversa a next.

pos

mixed pos(array arr);


Retorna o contedo do elemento atual do array, indicado pelo
ponteiro interno.

key

mixed key(array arr);


Funciona de maneira bastante semelhante a pos, mas ao invs de
retornar o elemento atual indicado pelo ponteiro interno do array, retorna seu
ndice.
each

array each(array arr);


Retorna um array contendo o ndice e o elemento atual indicao pelo
ponteiro interno do array. o valor de retorno um array de quatro elementos, cujos
ndices so 0, 1, key e value. Os elementos de ndices 0 e key armazenam o
ndice do valor atual, e os elementos de ndices 1 e value contm o valor do
elemento atual indicado pelo ponteiro.
Esta funo pode ser utilizada para percorrer todos os elementos de
um array e determinar se j foi encontrado o ltimo elemento, pois no caso de
haver um elemento vazio, a funo no retornar o valor false. A funo each s
retorna false depois q o ltimo elemento do array foi encontrado.

Exemplo:
/*funo que percorre todos os elementos de um array e

imprime seus ndices e valores */


function imprime_array($arr) {
reset($arr);
while (list($chave,$valor) = each($arr))
echo Chave: $chave. Valor: $valor;
}

Funes de ordenao
So funes que servem para arrumar os elementos de um array de
acordo com determinados critrios. Estes critrios so: manuteno ou no da
associao entre ndices e elementos; ordenao por elementos ou por ndices;
funo de comparao entre dois elementos.

sort

void sort(array &arr);


A funo mais simples de ordenao de arrays. Ordena os elementos
de um array em ordem crescente, sem manter os relacionamentos com os ndices.

rsort

void rsort(array &arr);


Funciona de maneir ainversa funo sort. Ordena os elementos de
um array em ordem decrescente, sem manter os relacionamentos com os ndices.

asort

void asort(array &arr);


Tem o funcionamento bastante semelhante funo sort. Ordena os
elementos de um array em ordem crescente, porm mantm os relacionamentos
com os ndices.

arsort

void arsort(array &arr);


Funciona de maneira inversa funo asort. Ordena os elementos
de um array em ordem decrescente e mantm os relacionamentos dos elementos
com os ndices.

ksort

void ksort(array &arr);


Funo de ordenao baseada nos ndices. Ordena os elementos de
um array de acordo com seus ndices, em ordem crescente, mantendo os
relacionamentos.

usort

void usort(array &arr, function compara);


Esta uma funo que utiliza outra funo como parmetro. Ordena
os elementos de um array sem manter os relacionamentos com os ndices, e utiliza
para efeito de comparao uma funo definida pelo usurio, que deve comparar
dois elementos do array e retornar 0, 1 ou 1, de acordo com qualquer critrio
estabelecido pelo usurio.
uasort

void uasort(array &arr, function compara);


Esta funo tambm utiliza outra funo como parmetro. Ordena os
elementos de um array e mantm os relacionamentos com os ndices, utilizando
para efeito de comparao uma funo definida pelo usurio, que deve comparar
dois elementos do array e retornar 0, 1 ou 1, de acordo com qualquer critrio
estabelecido pelo usurio.

uksort

void uksort(array &arr, function compara);


Esta funo ordena o array

atravs dos ndices, mantendo os

relacionamentos com os elementos., e utiliza para efeito de comparao uma


funo definida pelo usurio, que deve comparar dois ndices do array e retornar
0, 1 ou 1, de acordo com qualquer critrio estabelecido pelo usurio.

Você também pode gostar