com PHP
Pablo DallOglio
Novatec
Primeira edio
Dados
10-14195
CDD-005.133
ndices para catlogo sistemtico:
1. Criando relatrio com PHP : Linguagem de
programao : Computadores : Processamento de
dados
005.133
OGF20101221
(CIP)
captulo 1
Introduo ao PHP
Persistir na raiva como apanhar um pedao de carvo quente com a inteno de o atirar em algum. sempre quem levanta a pedra que se queima.
Buda
O que o PHP?
A linguagem de programao PHP, cuja logomarca apresentada na figura 1.1, foi
criada no outono de 1994 por Rasmus Lerdorf. No incio era formada por um conjunto de scripts voltados criao de pginas dinmicas que Rasmus utilizava para
monitorar o acesso ao seu currculo na internet. medida que essa ferramenta foi
crescendo em funcionalidades, Rasmus teve de escrever uma implementao em C,
que permitia que as pessoas desenvolvessem de forma muito simples suas aplicaes
para web. Rasmus nomeou essa verso de PHP/FI (Personal Home Pages/Forms Interpreter) e decidiu disponibilizar seu cdigo na web em 1995 para compartilh-lo com
outras pessoas, bem como receber ajuda e correo de bugs.
Em novembro de 1997, foi lanada a segunda verso do PHP. Nesse momento, aproximadamente 50 mil domnios, ou 1% da internet, utilizavam PHP. No mesmo ano,
Andi Gutmans e Zeev Suraski, dois estudantes que utilizavam PHP em um projeto
acadmico de comrcio eletrnico, resolveram cooperar com Rasmus para aprimorar
o PHP. Para tal, reescreverem todo o cdigo, com base no PHP/FI 2, nascendo assim o
16
17
PHP 3, disponibilizado oficialmente em junho de 1998. Dentre as principais caractersticas do PHP 3, estavam a extensibilidade, a possibilidade de conexo com vrios
bancos de dados, novos protocolos, uma sintaxe mais consistente, suporte orientao
a objetos e uma nova API, que possibilitava criar novos mdulos e acabou por atrair
vrios desenvolvedores ao PHP. No final de 1998, o PHP estava presente em cerca de
10% dos domnios da internet. Nessa poca, o significado da sigla PHP mudou para
PHP: Hypertext Preprocessor, para retratar a nova realidade de uma linguagem com
propsitos mais amplos.
No inverno de 1998, aps o lanamento do PHP 3, Zeev e Andi comearam a trabalhar em uma reescrita do ncleo do PHP, tendo em vista melhorar sua performance
e modularidade em aplicaes complexas. Para tal, resolveram batizar esse ncleo de
Zend Engine, ou Mecanismo Zend (Zeev + Andi). O PHP 4, com base nesse mecanismo, foi lanado oficialmente em maio de 2000, trazendo muitas melhorias e recursos
novos, como sees, suporte a diversos servidores web, alm da abstrao de sua API,
permitindo at ser utilizado como linguagem para shell script. Nesse momento, o PHP
estava presente em cerca de 20% dos domnios da internet, alm de ser utilizado por
milhares de desenvolvedores ao redor do mundo.
Apesar de todos os esforos, o PHP ainda ressentia de maior suporte orientao a
objetos, tal qual existe em linguagens como C++ e Java. Esses recursos foram trazidos
pelo PHP 5, aps um longo perodo de desenvolvimento que culminou com sua disponibilizao oficial em julho de 2004. Atualmente, na verso 6, o PHP se consolida
como uma das linguagens de programao que mais crescem no mundo.
fonte: PHP Group
Um programa PHP
Nesta seo, sero abordadas as caractersticas bsicas de um programa PHP.
Extenso de arquivos
A seguir, esto listadas as extenses mais utilizadas para programas em PHP.
Extenso
.php
.class.php
.inc.php
Significado
Arquivo PHP contendo um programa PHP.
Arquivo PHP contendo uma classe PHP.
Arquivo PHP a ser includo, podendo conter constantes ou configuraes.
Delimitadores de cdigo
O cdigo de um programa escrito em PHP deve estar contido entre os seguintes
delimitadores:
18
Comentrios
Para comentar uma nica linha:
// echo "a";
# echo "a";
echo
um comando que imprime uma ou mais variveis no console. Exemplo:
echo 'a', 'b', 'c';
Resultado:
abc
print
uma funo que imprime uma string no console. Exemplo:
print('abc');
Resultado:
abc
var_dump
Imprime o contedo de uma varivel de forma explanativa, muito comum para realizar debug. Se o parmetro for um objeto, imprimir todos seus atributos; se for um
19
array de vrias dimenses, imprimir todas elas, com seus respectivos contedos e
tipos de dados. Exemplo:
$vetor = array('Palio', 'Gol', 'Fiesta', 'Corsa');
var_dump($vetor);
Resultado:
array(4) {
[0]=>
string(5)
[1]=>
string(3)
[2]=>
string(6)
[3]=>
string(5)
}
"Palio"
"Gol"
"Fiesta"
"Corsa"
print_r
Imprime o contedo de uma varivel de forma explanativa, assim como a var_dump(),
mas em um formato mais legvel para o programador, com os contedos alinhados
e suprimindo os tipos de dados. Exemplo:
$vetor = array('Palio', 'Gol', 'Fiesta', 'Corsa');
print_r($vetor);
Resultado:
Array
(
[0]
[1]
[2]
[3]
)
=>
=>
=>
=>
Palio
Gol
Fiesta
Corsa
Variveis
Variveis so identificadores utilizados para representar valores mutveis e volteis,
que s existem durante a execuo do programa. Assim como o programa durante
sua execuo, so armazenadas na memria RAM e seu contedo destrudo aps
a execuo do programa.
Para criar uma varivel em PHP, precisamos lhe atribuir um nome de identificao,
sempre precedido pelo caractere cifro ($). Veja os exemplos a seguir:
20
Resultado:
da Silva, Joo
Algumas dicas:
nunca inicie a nomenclatura de variveis com nmeros;
nunca utilize espaos em branco no meio do identificador da varivel;
nunca utilize caracteres especiais (! @ # $ % ^ & * / | [ ] { }) na nomenclatura
das variveis;
evite criar variveis com mais de 15 caracteres em razo da clareza do cdigo;
nomes de variveis devem ser significativos e transmitir a ideia de seu contedo
dentro do contexto no qual a varivel est inserida;
utilize preferencialmente palavras em minsculo (separadas pelo caractere _)
ou somente as primeiras letras em maisculo quando da ocorrncia de mais
palavras:
<?php
$codigo_cliente
$codigoCliente
?>
// exemplo de varivel
// exemplo de varivel
Com exceo de nomes de classes e funes, o PHP case sensitive, ou seja, sensvel
a letras maisculas e minsculas. Tome cuidado ao declarar variveis. Por exemplo, a
varivel $codigo tratada de forma totalmente diferente da varivel $Codigo.
Em alguns casos, precisamos ter em nosso cdigo nomes de variveis que podem
mudar de acordo com determinada situao. Nesse caso, no s o contedo da varivel mutvel, mas tambm seu nome. Para isso, o PHP implementa o conceito de
variveis variantes (variable variables). Sempre que utilizarmos dois sinais de cifro ($)
precedendo o nome de uma varivel, o PHP referenciar uma varivel representada
pelo contedo da primeira. Neste exemplo, estamos utilizando esse recurso quando
declaramos a varivel $nome (contedo de $variavel) contendo maria.
<?php
// define o nome da varivel
$variavel = 'nome';
21
Quando uma varivel atribuda a outra, sempre criada uma nova rea de armazenamento na memria. Veja neste exemplo que, apesar de $b receber o mesmo contedo
de $a, aps qualquer modificao em $b, $a continua com seu mesmo valor.
<?php
$a = 5;
$b = $a;
$b = 10;
echo $a;
echo $b;
?>
// resultado = 5
// resultado = 10
Para criar referncia entre variveis, ou seja, duas variveis apontando para a mesma
regio da memria, a atribuio deve ser precedida do operador &. Assim, qualquer
alterao em qualquer uma das variveis reflete na outra.
<?php
$a = 5;
$b = &$a;
$b = 10;
echo $a;
echo $b;
?>
// resultado = 10
// resultado = 10
Tipo Booleano
Um booleano expressa um valor lgico que pode ser verdadeiro ou falso. Para especificar um valor booleano, utilize as palavras-chave TRUE ou FALSE. No exemplo a seguir,
declaramos a varivel booleana $exibir_nome, cujo contedo TRUE (verdadeiro). Logo a
seguir, testamos o contedo dessa varivel para verificar se realmente verdadeira.
Se for, exibiremos na tela o nome Jos da Silva.
<?php
// declara varivel com valor TRUE
$exibir_nome = TRUE;
// testa se $exibir_nome TRUE
if ($exibir_nome) {
echo 'Jos da Silva';
}
?>
22
Resultado:
Jos da Silva
Neste prximo programa, criamos uma varivel numrica contendo o valor 91. Logo
a seguir, testamos se essa varivel maior que 90. Essa comparao tambm retorna
um valor booleano (TRUE ou FALSE). Logo, o contedo da varivel $vai_chover um booleano que ser testado logo em seguida para a impresso da string Est chovendo.
<?php
// declara varivel numrica
$umidade = 91;
// testa se maior que 90. Retorna um booleano
$vai_chover = ($umidade > 90);
// testa se $vai_chover verdadeiro
if ($vai_chover)
{
echo 'Est chovendo';
}
?>
Resultado:
Est chovendo
Tipo Numrico
Nmeros podem ser especificados em notao decimal (base 10), hexadecimal (base
16) ou octal (base 8), opcionalmente precedidos de sinal (- ou +).
<?php
// nmero decimal
$a = 1234;
// um nmero negativo
$a = -123;
23
Tipo String
Uma string uma cadeia de caracteres alfanumricos. Para declarar uma string,
podemos utilizar aspas simples ou aspas duplas . Veja com mais detalhes como
manipular strings ainda nesse captulo.
<?php
$variavel = 'Isto um teste';
$variavel = "Isto um teste";
?>
Tipo Array
Array uma lista de valores armazenados na memria, os quais podem ser de tipos
diferentes (nmeros, strings, objetos) e acessados a qualquer momento, pois cada
valor relacionado a uma chave. Um array tambm pode crescer dinamicamente
por meio da adio de novos itens. Veja ainda nesse captulo mais detalhes de como
manipular arrays.
<?php
$carros = array('Palio', 'Corsa', 'Gol');
echo $carros[1]; // resultado = 'Corsa'
?>
Tipo Objeto
Um objeto uma entidade com um determinado comportamento definido por seus
mtodos (aes) e propriedades (atributos). Para criar um objeto, devemos utilizar o
operador new. Veja o exemplo de um objeto do tipo Computador. Veja no captulo 2 mais
detalhes de como manipular classes e objetos.
<?php
class Computador {
public $cpu;
function ligar() {
24
Resultado:
Ligando computador a 500Mhz...
Tipo Recurso
Recurso ou resource uma varivel especial que mantm uma referncia de recurso
externo. Recursos so criados e utilizados por funes especiais, como uma conexo
ao banco de dados. Um exemplo a funo mysql_connect(), que, ao conectar-se ao
banco de dados, retorna uma varivel de referncia do tipo recurso:
resource mysql_connect(...)
Tipo Misto
O tipo Misto (Mixed) representa mltiplos (no necessariamente todos) tipos de
dados em um mesmo parmetro. Um parmetro do tipo mixed indica que a funo
aceita diversos tipos de dados como parmetro. Um exemplo a funo gettype(),
que obtm o tipo da varivel passada como parmetro (que pode ser integer, string,
array, object, entre outros).
string gettype (mixed var)
Tipo Callback
Algumas funes como call_user_func() aceitam um parmetro que significa uma
funo a ser executada. Esse tipo de dado chamado de callback. Um parmetro
25
callback pode ser o nome de uma funo representada por uma string ou o mtodo
de um objeto a ser executado, representados por um array.
Tipo NULL
A utilizao do valor especial NULL significa que a varivel no tem valor. NULL o nico
valor possvel do tipo NULL.
Constantes
Uma constante um valor que no sofre modificaes durante a execuo do programa. Uma constante representada por um identificador, assim como as variveis,
com a exceo de que s podem conter valores escalares (boolean, inteiro, float e
string). Um valor escalar no pode ser composto de outros valores, como vetores
ou objetos. As regras de nomenclatura de constantes seguem as mesmas regras das
variveis, com a exceo de que as constantes no so precedidas pelo sinal de cifro
($) e geralmente se utilizam nomes em maisculo.
MAXIMO_CLIENTES // exemplo de constante
Podemos definir uma constante utilizando a funo define(). Quando uma constante
definida, ela no pode ser mais modificada ou anulada:
Exemplo:
<?php
define("MAXIMO_CLIENTES", 100);
echo MAXIMO_CLIENTES;
?>
Resultado:
100
Operadores
Atribuio
Um operador de atribuio utilizado para definir uma varivel atribuindo-lhe um
valor. O operador bsico de atribuio =.
<?php
$var +=
$var -=
$var *=
$var /=
?>
5;
5;
5;
5;
//
//
//
//
soma 5 em $var;
subtrai 5 em $var;
multiplica $var por 5;
divide $var por 5;
26
Descrio
Pr-incremento. Incrementa $a em um e, ento, retorna $a.
Ps-incremento. Retorna $a e, ento, incrementa $a em um.
Pr-decremento. Decrementa $a em um e, ento, retorna $a.
Ps-decremento. Retorna $a e, ento, decrementa $a em um.
Aritmticos
Operadores aritmticos so utilizados para realizar clculos matemticos.
Operadores
+
-
*
/
%
Descrio
Adio.
Subtrao.
Multiplicao.
Diviso.
Mdulo (resto da diviso).
Resultado:
15
Relacionais
Operadores relacionais so utilizados para realizar comparaes entre valores ou
expresses, resultando sempre um valor boolean (TRUE ou FALSE).
27
Comparadores Descrio
(==)
Igual. Resulta verdadeiro (TRUE) se expresses forem iguais.
(===)
Idntico. Resulta verdadeiro (TRUE) se as expresses forem iguais e do
mesmo tipo de dados.
(!= ou <>)
Diferente. Resulta verdadeiro (TRUE) se as variveis forem diferentes.
(<)
Menor.
(>)
Maior que.
(<=)
Menor que ou igual.
(>=)
Maior que ou igual.
Veja a seguir alguns testes lgicos e seu respectivo resultado. Neste primeiro caso,
vemos a utilizao errada do operador de atribuio =, para realizar uma comparao.
O operador de atribuio sempre retorna o valor TRUE.
<?php
if ($a = 5)
{
echo 'essa operao atribui 5 varivel $a e retorna sempre verdadeiro';
}
?>
Resultado:
essa operao atribui 5 varivel $a e retorna sempre verdadeiro
Neste exemplo, declaramos duas variveis, uma integer e outra string. Neste caso,
vemos a utilizao dos operadores de comparao == e !=.
<?php
$a = 1234;
$b = '1234';
if ($a == $b)
{
echo '$a e $b so iguais';
}
else if ($a != $b)
{
echo '$a e $b so diferentes';
}
?>
Resultado:
$a e $b so iguais
28
Resultado:
$c e $d so de tipos diferentes
O PHP considera o valor zero como sendo falso (FALSE) em comparaes lgicas. Para
evitar erros semnticos em retorno de valores calculados por funes que podem
retornar tanto um valor booleano quanto um inteiro, podemos utilizar as seguintes
comparaes:
<?php
$e = 0;
// zero sempre igual FALSE
if ($e == FALSE)
{
echo '$e falso ';
}
// testa se $e do tipo FALSE
if ($e === FALSE)
{
echo '$e do tipo false ';
}
// testa se $e igual a zero e do mesmo tipo que zero
if ($e === 0)
{
echo '$e zero mesmo ';
}
?>
Resultado:
$e falso
$e zero mesmo
29
Lgicos
Operadores lgicos so utilizados para combinar expresses lgicas entre si, agrupando testes condicionais.
Operador
Descrio
($a and $b) E: Verdadeiro (TRUE) se tanto $a quanto $b forem verdadeiros.
($a or $b) OU: Verdadeiro (TRUE) se $a ou $b forem verdadeiros.
($a xor $b) XOR: Verdadeiro (TRUE) se $a ou $b forem verdadeiros, de forma exclusiva.
(! $a)
NOT: Verdadeiro (TRUE) se $a for FALSE.
($a && $b) E: Verdadeiro (TRUE) se tanto $a quanto $b forem verdadeiros.
($a || $b) OU: Verdadeiro (TRUE) se $a ou $b forem verdadeiros.
Obs.: Or e and tm precedncia menor que && ou ||.
Resultado:
No vou sair de casa
J neste outro programa, se uma varivel for TRUE e a outra for FALSE (OU exclusivo),
ser impresso no console Vou pensar duas vezes antes de sair.
<?php
$vai_chover = FALSE;
$esta_frio = TRUE;
if ($vai_chover xor $esta_frio)
{
echo "Vou pensar duas vezes antes de sair";
}
?>
Resultado:
Vou pensar duas vezes antes de sair
30
Estruturas de controle
IF
O IF uma estrutura de controle que introduz um desvio condicional, ou seja, um
desvio na execuo natural do programa. Caso a condio dada pela expresso seja
satisfeita, ento sero executadas as instrues do bloco de comandos. Caso a condio no seja satisfeita, o bloco de comandos simplesmente ignorado. O comando
IF pode ser lido como SE (condio) ENTO { comandos... }.
ELSE:
Exemplo:
<?php
$a = 1;
if ($a == 5) {
echo " igual";
}
else {
echo "no igual";
}
?>
31
Resultado:
no igual
Quando no explicitamos o operador lgico em testes por meio do IF, o comportamento-padro do PHP retornar TRUE sempre que a varivel tiver contedo no
considerado falso.
<?php
$a = 'conteudo';
if ($a)
{
echo '$a tem contedo';
}
if ($b)
{
echo '$b tem contedo';
}
?>
Resultado:
$a tem contedo
Para realizar testes encadeados, basta colocar um IF dentro do outro, ou mesmo utilizar
o operador AND da seguinte forma:
<?php
$salario
= 1020; // R$
$tempo_servico = 12; // meses
$tem_reclamacoes = false; // booleano
if ($salario > 1000)
{
if ($tempo_servico >= 12)
{
if ($tem_reclamacoes != true)
{
echo 'parabns, voc foi promovido<br>';
}
}
}
if (($salario > 1000) and ($tempo_servico >= 12) and ($tem_reclamacoes != true))
{
echo 'parabns, voc foi promovido<br>';
}
?>
32
Resultado:
parabns, voc foi promovido
parabns, voc foi promovido
O PHP nos oferece facilidades quando desejamos realizar tarefas simples como realizar
uma atribuio condicional a uma varivel. A seguir, confira um cdigo tradicional
que verifica o estado de uma varivel antes de atribuir o resultado.
If ($valor_venda > 100)
{
$resultado = 'muito caro';
}
else
{
$resultado = 'pode comprar';
}
O mesmo cdigo poderia ser escrito em uma nica linha, da seguinte forma:
$resultado = ($valor_venda > 100) ? 'muito caro' : 'pode comprar';
WHILE
O WHILE uma estrutura de controle similar ao IF. Da mesma forma, tem uma condio
para executar um bloco de comandos. A diferena primordial que o WHILE estabelece
um lao de repetio, ou seja, o bloco de comandos ser executado repetitivamente
enquanto a condio de entrada dada pela expresso for verdadeira. O comando WHILE
pode ser interpretado como ENQUANTO (condio) FAA { comandos... }.
A figura 1.3 procura explicar o fluxo de funcionamento do comando WHILE. Quando
a expresso avaliada como TRUE, o programa parte para a execuo de um bloco de
comandos. Quando do fim da execuo desse bloco de comandos, o programa retorna ao ponto inicial da avaliao e se a expresso continuar verdadeira, o programa
continuar tambm com a execuo do bloco de comandos, constituindo um lao
de repeties. Esse lao de repeties s interrompido quando a expresso avaliada
retornar um valor falso (FALSE).
33
Resultado:
1234
FOR
O FOR uma estrutura de controle que estabelece um lao de repetio com base em
um contador, sendo muito similar ao comando WHILE. O FOR controlado por um bloco
de trs comandos que estabelecem uma contagem, ou seja, o bloco de comandos ser
executado certo nmero de vezes.
for (expr1; expr2; expr3)
{
comandos
}
34
Descrio
Valor inicial da varivel contadora.
Condio de parada, quando se deve terminar a execuo do bloco de
comandos.
Valor a ser incrementado aps cada execuo.
Exemplo:
<?php
for ($i = 1; $i <= 10; $i++)
{
print $i;
}
?>
Resultado:
12345678910
Procure utilizar nomes sugestivos para variveis. Mas em alguns casos especficos,
como em contadores, permita-se utilizar variveis de apenas uma letra, como no
exemplo a seguir:
<?php
for ( $i = 0; $i < 5; $i++ )
{
for ( $j = 0; $j < 4; $j++ )
{
for ( $k = 0; $k < 3; $k++ )
{
// comandos...
}
}
}
?>
Evite laos de repetio com muitos nveis de iterao. Como Linus Torvalds disse
certa vez, se voc est utilizando trs nveis encadeados ou mais, considere a possibilidade de revisar a lgica de seu programa.
SWITCH
O comando switch uma estrutura que simula uma bateria de testes sobre uma varivel.
similar a uma srie de comandos IFs sobre a mesma expresso. Frequentemente,
necessrio comparar a mesma varivel com valores diferentes e executar uma ao
especfica em cada um desses casos.
35
No fluxograma apresentado na figura 1.4, vemos que para cada teste condicional
(CASE), existe um bloco de comandos a ser executado caso a expresso avaliada retorne
verdadeiro (TRUE). Caso a expresso retorne falso (FALSE), o SWITCH parte para a prxima
expresso a ser avaliada, at que no tenha mais expresses para avaliar. Se todas
as expresses forem falsas, o SWITCH executar o bloco de cdigos representado pelo
identificador default.
Sintaxe do comando:
switch ($condio)
{
case "valor 1":
// comandos
break;
case "valor 2":
// comandos
break;
case "valor n";
// comandos
break;
default:
// comandos
}
36
Resultado:
i igual a 1
O switch executa linha por linha at encontrar a ocorrncia de break. Por isso, o comando
break essencial para evitar que os blocos de comando seguintes sejam executados
por engano. A clusula default ser executada caso nenhuma das expresses anteriores
tenha sido verificada.
<?php
$i = 1;
switch ($i)
{
case 0:
print "i
break;
case 1:
print "i
break;
case 2:
print "i
break;
default:
print "i
}
?>
Resultado:
i igual a 1
igual a 0";
igual a 1";
igual a 2";
no igual a 0, 1 ou 2";
37
FOREACH
O foreach um lao de repetio para iteraes em arrays ou matrizes. um FOR simplificado que decompe um vetor ou matriz em cada um de seus elementos por meio
de sua clusula AS.
foreach ($array as $valor)
{
instrues
}
Exemplo:
<?php
$fruta = array("ma", "laranja", "pera", "banana");
foreach ($fruta as $valor)
{
print "$valor -";
}
?>
Resultado:
ma laranja pera banana
CONTINUE
A instruo continue, quando executada em um bloco de comandos FOR/WHILE, ignora
as instrues restantes at o fechamento em }. Dessa forma, o programa segue para
a prxima verificao da condio de entrada do lao de repetio.
BREAK
O comando break aborta a execuo de blocos de comandos, como IF, WHILE e FOR.
Quando estamos em uma execuo com muitos nveis de iterao e desejamos abortar
n nveis, a sintaxe a seguinte:
While...
For...
break <quantidade de nveis>
Requisio de arquivos
Em linguagens de script como o PHP, frequentemente precisamos incluir dentro de
nossos programas outros arquivos com definies de funes, constantes, configuraes ou mesmo carregar um arquivo contendo a definio de uma classe. Para atingir
esse objetivo no PHP, podemos fazer uso de um dos comandos a seguir.
38
include <arquivo>
A instruo include() inclui e avalia o arquivo informado. Seu cdigo (variveis, objetos e arrays) entra no escopo do programa, tornando-se disponvel a partir da linha
na qual a incluso ocorre. Se o arquivo no existir, produzir uma mensagem de
advertncia (warning).
Exemplo:
biblioteca.php
<?php
/*
* funo quadrado
* retorna o quadrado de um nmero
*/
function quadrado($numero)
{
return $numero * $numero;
}
?>
teste.php
<?php
// carrega arquivo com a funo necessria
include 'biblioteca.php';
// imprime o quadrado do nmero 4
echo quadrado(4);
?>
Resultado:
16
require <arquivo>
Idntico ao include. Difere somente na manipulao de erros. Enquanto o include produz uma warning, o require produz uma mensagem de Fatal Error caso o arquivo
no exista.
include_once <arquivo>
Funciona da mesma maneira que o comando include, a no ser que o arquivo informado j tenha sido includo, no refazendo a operao (o arquivo includo apenas
uma vez). Esse comando til em casos em que o programa pode passar mais de uma
vez pela mesma instruo. Assim, evitar sobreposies, redeclaraes etc.
39
require_once <arquivo>
Funciona da mesma maneira que o comando require, a no ser que o arquivo informado j tenha sido includo, no refazendo a operao (o arquivo includo apenas
uma vez). Esse comando til em casos em que o programa pode passar mais de uma
vez pela mesma instruo. Assim, evitar sobreposies, redeclaraes etc.
Manipulao de funes
Uma funo um pedao de cdigo com um objetivo especfico, encapsulado sob
uma estrutura nica que recebe um conjunto de parmetros e retorna um dado. Uma
funo declarada uma nica vez, mas pode ser utilizada diversas vezes. Trata-se de
uma das estruturas mais bsicas para prover reusabilidade.
Criao
Para declarar uma funo em PHP, utiliza-se o operador function seguido do nome
que desejamos lhe atribuir, sem espaos em branco e iniciando obrigatoriamente
com uma letra. Na mesma linha, digitamos a lista de argumentos (parmetros) que
a funo receber, separados por vrgula. A seguir, encapsulado por chaves {}, vem o
cdigo da funo. No final, utilizamos a clusula return para retornar o resultado da
funo (integer, string, array, objeto etc.).
<?php
// exemplo de funo
function nome_da_funcao($arg1, $arg2, $argN)
{
$valor = $arg1 + $arg2 + $argN;
return $valor;
}
?>
No exemplo a seguir, estamos criando uma funo que calcula o ndice de obesidade de algum. A funo recebe dois parmetros ($peso e $altura) e retorna um valor
definido por uma frmula.
<?php
function calcula_obesidade($peso, $altura) {
return $peso / ($altura * $altura);
}
echo calcula_obesidade(70, 1.85);
?>
Resultado:
20.45288531775
40
Variveis globais
Todas as variveis declaradas dentro do escopo de uma funo so locais. Para acessar
uma varivel externa ao contexto de uma funo, sem pass-la como parmetro,
necessrio declar-la como global. Uma varivel global acessada a partir de qualquer ponto da aplicao. No exemplo a seguir, a funo criada converte quilmetros
em milhas, enquanto acumula a quantidade de quilmetros percorridos em uma
varivel global ($total).
<?php
$total = 0;
function km2mi($kilometros) {
global $total;
$total += $kilometros;
return $kilometros * 0.6;
}
echo 'percorreu ' . km2mi(100) . " milhas <br>\n";
echo 'percorreu ' . km2mi(200) . " milhas <br>\n";
echo 'percorreu no total ' . $total . " kilometros <br>\n";
?>
Resultado:
percorreu 60 milhas
percorreu 120 milhas
percorreu no total 300 kilometros
Variveis estticas
Dentro do escopo de uma funo, podemos armazenar variveis de forma esttica.
Assim, elas mantm o valor que lhes foi atribudo na ltima execuo.
<?php
function percorre($kilometros) {
static $total;
$total += $kilometros;
echo "percorreu mais $kilometros do total de $total<br>\n";
}
percorre(100);
percorre(200);
percorre(50);
?>
41
Resultado:
percorreu mais 100 do total de 100
percorreu mais 200 do total de 300
percorreu mais 50 do total de 350
Passagem de parmetros
Existem dois tipos de passagem de parmetros, por valor (by value) e por referncia
(by reference). Por padro, os valores so passados by value para as funes. Assim, o
parmetro que a funo recebe tratado como varivel local dentro do contexto da
funo, no alterando seu valor externo. Objetos so passados por referncia.
<?php
function Incrementa($variavel, $valor)
{
$variavel += $valor;
}
$a = 10;
Incrementa($a, 20);
echo $a;
?>
Resultado:
10
Resultado:
30
42
Resultado:
50
O PHP tambm permite definir uma funo com o nmero de argumentos variveis,
ou seja, obt-los de forma dinmica, mesmo sem saber quais so ou quantos so.
Para obter quais so, utilizamos a funo func_get_args(), e para obter a quantidade
de argumentos, utilizamos a funo func_num_args().
<?php
function Ola()
{
$argumentos = func_get_args();
$quantidade = func_num_args();
for($n=0; $n<$quantidade; $n++)
{
echo 'Ol ' . $argumentos[$n] . "<br>\n";
}
}
Ola('Joo', 'Maria', 'Jos', 'Pedro');
?>
Resultado:
Ol
Ol
Ol
Ol
Joo
Maria
Jos
Pedro
Recurso
O PHP permite a chamada de funes recursivamente. No caso a seguir, criaremos
uma funo para calcular o fatorial de um nmero.
<?php
function Fatorial($numero)
{
43
if ($numero == 1)
return $numero;
else
return $numero * Fatorial($numero -1);
}
echo Fatorial(5) . "<br>\n";
echo Fatorial(7) . "<br>\n";
?>
Resultado:
120
5040
fopen
Abre um arquivo e retorna um identificador. Se o nome do arquivo estiver na forma
protocolo://..., o PHP procurar um manipulador de protocolo, tambm conhecido
como wrapper, conforme o prefixo.
int fopen (string arquivo, string modo [,int usar_path [, resource contexto]])
Parmetros
arquivo
modo
usar_path
contexto
Descrio
String identificando o nome do arquivo a ser aberto.
Forma de abertura do arquivo (r = read, w = write, a = append).
Se 1 ou TRUE, vasculha no path pelo arquivo a ser aberto.
Opes de contexto; variam de acordo com o protocolo do arquivo.
Exemplo:
<?php
$fp =
$fp =
$fp =
$fp =
?>
fopen
fopen
fopen
fopen
("/home/rasmus/file.txt", "r");
("/home/rasmus/file.gif", "wb");
("http://www.example.com/", "r");
("ftp://user:password@example.com/", "w");
fwrite
Grava uma string (contedo) no arquivo apontado pelo identificador de arquivo. Se
o argumento comprimento for dado, a gravao parar depois que comprimento bytes for
escrito ou o fim da string contedo for alcanada, o que ocorrer primeiro. Retorna o
nmero de bytes gravados, ou FALSE em caso de erro.
44
Parmetros
Descrio
identificador Parmetro retornado pela fopen.
contedo
String a escrever no arquivo.
comprimento
Comprimento da string.
Exemplo:
<?php
// Abre o arquivo
$fp = fopen ("/home/pablo/file.txt", "w");
// Escreve no arquivo
fwrite ($fp, "linha 1\n");
fwrite ($fp, "linha 2\n");
fwrite ($fp, "linha 3\n");
// Fecha o arquivo
fclose ($fp);
?>
fclose
Fecha o arquivo aberto apontado pelo identificador de arquivo. Retorna TRUE em caso
de sucesso ou FALSE em caso de falha.
bool fclose (int identificador)
Parmetro
Descrio
identificador Parmetro retornado pela fopen().
file_put_contents
Grava uma string em um arquivo. Retorna a quantidade de bytes gravados.
int file_put_contents (string nome_arquivo, mixed contedo)
Parmetros
Descrio
nome_arquivo Arquivo a ser aberto.
contedo
Novo contedo.
Exemplo:
<?php
echo file_put_contents('/tmp/teste.txt', "este \n o contedo \n do arquivo");
?>
file_get_contents
L o contedo de um arquivo e retorna o contedo em forma de string.
string file_get_contents (string nome_arquivo, ...)
Parmetros
Descrio
nome_arquivo Arquivo a ser lido.
Exemplo:
<?php
echo file_get_contents('/etc/mtab');
?>
Resultado:
/dev/hda3 / ext3 rw 0 0
/dev/hda1 /windows ntfs rw 0 0
proc /proc proc rw 0 0
usbfs /proc/bus/usb usbfs rw 0 0
file_exists
Verifica a existncia de um arquivo ou de um diretrio.
bool file_exists (string nome_arquivo)
Parmetros
Descrio
nome_arquivo Localizao de um arquivo ou diretrio.
Exemplo:
<?php
$arquivo = '/home/pablo/file2.txt';
if (file_exists($arquivo))
{
echo "Arquivo existente";
}
else
{
echo "Arquivo no existente";
}
?>
Resultado:
Arquivo no existente
45
46
Manipulao de strings
Declarao
Uma string uma cadeia de caracteres alfanumricos. Para declarar uma string, podemos utilizar aspas simples ou aspas duplas .
$variavel = 'Isto um teste';
$variavel = "Isto um teste";
A diferena que todo contedo contido dentro de aspas duplas avaliado pelo
PHP. Assim, se a string contm uma varivel, essa varivel traduzida pelo seu valor.
<?php
$fruta = 'ma';
print "como $fruta"; // resultado 'como ma'
print 'como $fruta'; // resultado 'como $fruta'
?>
Tambm podemos declarar uma string literal com muitas linhas observando a sintaxe
a seguir, em que escolhemos uma palavra, CHAVE, para delimitar o incio e o fim da
string. Essa sintaxe tambm conhecida como heredoc.
<?php
$texto = <<<CHAVE
Aqui nesta rea
voc poder escrever
textos com mltiplas linhas
CHAVE;
echo $texto;
?>
Resultado:
Aqui nesta rea
voc poder escrever
textos com mltiplas linhas.
Concatenao
Para concatenar strings, podemos utilizar o operador . (ponto) ou, tambm, colocar
mltiplas variveis dentro de strings duplas , uma vez que seu contedo interpretado.
<?php
$fruta = 'ma';
// primeira forma
echo $fruta .' a fruta de ado';
47
Resultado:
O salrio 1234
O salrio 1234
Caracteres de Escape
Dentro de aspas duplas , podemos utilizar controles especiais interpretados diferentemente pelo PHP, que so os caracteres de escape (\). Veja a seguir os mais utilizados:
\n
\r
\t
\\
\"
\$
Exemplo:
<?php
echo "seu
echo 'seu
echo 'seu
echo "seu
?>
nome \"Paulo\".";
nome "Paulo".';
salrio $650,00';
salrio \$650,00";
//
//
//
//
Obs.: Utilize aspas duplas para declarar strings somente quando for necessrio avaliar
seu contedo, evitando, assim, tempo de processamento desnecessrio.
Funes
As funes a seguir formam um grupo cuja caracterstica comum a manipulao
de cadeias de caracteres (strings), como converses, transformaes, entre outras
funcionalidades.
48
strtoupper
Transforma uma string (contedo) para maisculo. Retorna a string com todos os caracteres alfabticos convertidos para maisculo.
string strtoupper (string contedo)
Parmetros
contedo
Descrio
String original a ser transformada.
Exemplo:
<?php
echo strtoupper('Convertendo para maiusculo');
?>
Resultado:
CONVERTENDO PARA MAIUSCULO
strtolower
Transforma uma string (contedo) para minsculo. Retorna a string com todos os caracteres alfabticos convertidos para minsculo.
string strtolower (string contedo)
Parmetros
contedo
Descrio
String original a ser transformada.
Exemplo:
<?php
echo strtolower('CONVERTENDO PARA MINUSCULO');
?>
Resultado:
convertendo para minusculo
substr
Retorna parte de uma string (contedo). Retorna uma poro de contedo, comeando em
incio, contendo comprimento caracteres. Se comprimento for negativo, contar n caracteres
antes do final de contedo.
string substr (string contedo, int incio [, int comprimento])
Parmetros
contedo
incio
comprimento
Descrio
String original a ser percorrida.
Caractere inicial a ser lido.
Comprimento da cadeia de caracteres a ser lida.
49
Exemplo:
<?php
$rest = substr("Amrica",
echo $rest . "<br>\n";
$rest = substr("Amrica",
echo $rest . "<br>\n";
$rest = substr("Amrica",
echo $rest . "<br>\n";
$rest = substr("Amrica",
echo $rest . "<br>\n";
?>
1);
1, 3);
0, -1);
-2);
Resultado:
mrica
mr
Amric
ca
strpad
Preenche uma string com outra string, dentro de um tamanho especfico.
string str_pad ( string entrada, int tamanho [, string complemento [, int tipo]])
Parmetros
entrada
tamanho
complemento
tipo
Descrio
String inicial a ser complementada.
Comprimento da string a ser retornada.
String de preenchimento.
Tipo de preenchimento. Pode ser STR_PAD_RIGHT (preenche com caracteres
direita), STR_PAD_LEFT (preenche esquerda) ou STR_PAD_BOTH (preenche em
ambos os lados).
Exemplo:
<?php
$texto = "The Beatles";
print str_pad($texto, 20)
print str_pad($texto, 20,
print str_pad($texto, 20,
print str_pad($texto, 20,
?>
Resultado:
The Beatles
*********The Beatles
****The Beatles*****
The Beatles*********
. "<br>\n";
"*", STR_PAD_LEFT) . "<br>\n";
"*", STR_PAD_BOTH) . "<br>\n";
"*") . "<br>\n";
50
str_repeat
Repete uma string certa quantidade de vezes.
string str_repeat (string entrada, int quantidade)
Parmetros
entrada
quantidade
Descrio
String inicial a ser repetida.
Quantidade de repeties.
Exemplo:
<?php
$txt = ".oO0Oo.";
print str_repeat($txt, 5) . "\n";
?>
Resultado:
.oO0Oo..oO0Oo..oO0Oo..oO0Oo..oO0Oo.
strlen
Retorna o comprimento de uma string.
int strlen (string entrada)
Parmetros
entrada
Descrio
String a ser calculado o comprimento.
Exemplo:
<?php
$txt = "O Rato roeu a roupa do rei de roma";
print 'O comprimento : ' . strlen($txt) . "\n";
?>
Resultado:
O comprimento : 34
str_replace
Substitui uma string por outra em um dado contexto.
mixed str_replace (mixed procura, mixed substitui, mixed contexto)
Parmetros
procura
substitui
contexto
Descrio
String a ser substituda
String substituta.
String inicial a ser submetida substituio.
51
Exemplo:
<?php
$txt = "O Rato roeu a roupa do rei de roma";
print str_replace('Rato', 'Leo', $txt);
?>
Resultado:
O Leo roeu a roupa do rei de roma
Manipulao de arrays
A manipulao de arrays no PHP , sem dvida, um dos recursos mais poderosos
da linguagem. O programador que assimilar bem essa parte, ter muito mais produtividade no seu dia a dia. Isso porque os arrays no PHP servem como verdadeiros
contineres, servindo para armazenar nmeros, strings, objetos, entre outros, de
forma dinmica. Alm disso, o PHP nos oferece uma gama enorme de funes para
manipul-los, vistas a seguir.
Criando um array
Arrays so acessados por meio de uma posio, como um ndice numrico. Para criar
um array, podemos utilizar a funo array([chave =>] valor , ... ).
$cores = array('vermelho', 'azul', 'verde', 'amarelo');
ou
$cores = array(0=>'vermelho', 1=>'azul', 2=>'verde', 3=>'amarelo');
Outra forma de criar um array simplesmente lhe adicionando valores por meio da
seguinte sintaxe:
$nomes[]
$nomes[]
$nomes[]
$nomes[]
=
=
=
=
'maria';
'joo';
'carlos';
'jos';
De qualquer forma, para acessar o array indexado, basta indicar seu ndice entre
colchetes:
echo
echo
echo
echo
$cores[0];
$cores[1];
$cores[2];
$cores[3];
echo $nomes[0];
echo $nomes[1];
//
//
//
//
resultado
resultado
resultado
resultado
=
=
=
=
vermelho
azul
verde
amarelo
// resultado = maria
// resultado = joo
52
// resultado = carlos
// resultado = jos
Arrays associativos
Os arrays no PHP so associativos, pois contm uma chave de acesso para cada
posio. Para criar um array, podemos utilizar a funo array([chave =>] valor , ... ).
$cores = array('vermelho' => 'FF0000', 'azul' => '0000FF', 'verde' => '00FF00');
=
=
=
=
'Maria da Silva';
'So Joo';
'Cidade Alta';
'Porto Alegre';
De qualquer forma, para acessar o array, basta indicar sua chave entre colchetes:
echo $cores['vermelho']; // resultado = FF0000
echo $cores['azul']; // resultado = 0000FF
echo $cores['verde']; // resultado = 00FF00
echo
echo
echo
echo
$pessoa['nome'];
$pessoa['rua'];
$pessoa['bairro'];
$pessoa['cidade'];
//
//
//
//
resultado
resultado
resultado
resultado
=
=
=
=
Maria da Silva
So Joo
Cidade Alta
Porto Alegre
Obs.: A chave pode ser string ou integer. J o valor pode ser de qualquer tipo.
Iteraes
Os arrays podem ser iterados no PHP por meio do operador FOREACH, percorrendo
cada uma das posies do array. Veja:
$frutas['cor']
= 'vermelha';
$frutas['sabor'] = 'doce';
$frutas['formato'] = 'redonda';
$frutas['nome']
= 'ma';
foreach ($frutas as $chave => $fruta) {
echo "$chave => $fruta <br>\n";
}
Resultado:
cor => vermelha
sabor => doce
formato => redonda
nome => ma
53
Acesso
As posies de um array podem ser acessadas a qualquer momento e sobre estas,
operaes podem ser realizadas.
<?php
$minha_multa['carro'] = 'Plio';
$minha_multa['valor'] = 178.00;
// alterao de valores
$minha_multa['carro'] .= ' ED 1.0';
$minha_multa['valor'] += 20;
// exibe o array
var_dump($minha_multa);
$comidas[] = 'Lazanha';
$comidas[] = 'Pizza';
$comidas[] = 'Macarro';
// alterao de valores
$comidas[1] = 'Pizza Calabreza';
// exibe o array
var_dump($comidas);
?>
Resultado:
array(2) {
["carro"]=>
string(12) "Plio ED 1.0"
["valor"]=>
float(198)
}
array(3) {
[0]=>
string(7) "Lazanha"
[1]=>
string(15) "Pizza Calabreza"
[2]=>
string(8) "Macarro"
}
54
Arrays multidimensionais
Arrays multidimensionais ou matrizes so arrays nos quais algumas de suas posies
podem conter outros arrays de forma recursiva. Um array multidimensional pode ser
criado por meio da funo array:
<?php
$carros = array('Palio' => array('cor'=>'azul',
'potncia'=>'1.0',
'opcionais'=>'Ar Cond.'),
'Corsa' => array('cor'=>'cinza',
'potncia'=>'1.3',
'opcionais'=>'MP3'),
'Gol' => array('cor'=>'branco',
'potncia' => '1.0',
'opcionais' => 'Metalica')
);
echo $carros['Palio']['opcionais']; // resultado = Ar Cond.
?>
=
=
=
=
=
=
=
=
=
'azul';
'1.0';
'Ar Cond.';
'cinza';
'1.3';
'MP3';
'branco';
'1.0';
'Metalica';
55
Resultado:
=> modelo Palio
caracterstica cor => azul
caracterstica potncia => 1.0
caracterstica opcionais => Ar Cond.
=> modelo Corsa
caracterstica cor => cinza
caracterstica potncia => 1.3
caracterstica opcionais => MP3
=> modelo Gol
caracterstica cor => branco
caracterstica potncia => 1.0
caracterstica opcionais => Metalica
Funes
A seguir, veremos algumas funes utilizadas para manipular arrays.
array_keys
Retorna as chaves (ndices) de um array. Se o segundo parmetro for indicado, a funo retornar apenas ndices que apontam para um contedo igual ao do parmetro.
array array_keys (array array [, mixed valor_procurado])
Parmetros
array
valor_procurado
Descrio
Array do qual desejamos descobrir os ndices.
Parmetro opcional. Se preenchido, retornar apenas ndices contendo
esse valor.
Exemplo:
<?php
$exemplo = array('cor' => 'vermelho', 'volume' => 5, 'animal' => 'cachorro');
$indices = array_keys($exemplo);
print_r($indices);
?>
Resultado:
Array
(
56
array_values
Retorna um array contendo os valores de outro array.
array array_values (array array)
Parmetros
array
Descrio
Array do qual desejamos descobrir os valores.
Exemplo:
<?php
$exemplo = array('cor' => 'vermelho', 'volume' => 5, 'animal' => 'cachorro');
$valores = array_values($exemplo);
print_r($valores);
?>
Resultado:
Array
(
[0] => vermelho
[1] => 5
[2] => cachorro
)
count
Retorna a quantidade de elementos de um array.
int count (array array)
Parmetro
array
Descrio
Array a ser contado seus elementos.
Exemplo:
<?php
$a = array('refrigerante', 'cerveja', 'vodka', 'suco natural');
echo 'o array $a contm ' . count($a) . ' posies';
?>
Resultado:
o array $a contm 4 posies
in_array
Verifica se um array contm um determinado valor.
boolean in_array (mixed valor, array array)
Parmetro
valor
array
Descrio
Valor a ser procurado.
Array a ser vasculhado.
Exemplo:
<?php
$a = array('refrigerante', 'cerveja', 'vodka', 'suco natural');
if (in_array('suco natural', $a))
{
echo 'suco natural encontrado';
}
?>
Resultado:
suco natural encontrado
sort
Ordena um array pelo seu valor, no mantendo a associao de ndices.
boolean sort (array array)
Parmetro
array
Descrio
Array a ser ordenado.
Exemplo:
<?php
$a = array('refrigerante', 'cerveja', 'vodka', 'suco natural');
sort($a);
print_r($a);
?>
Resultado:
Array
(
[0]
[1]
[2]
[3]
)
=>
=>
=>
=>
cerveja
refrigerante
suco natural
vodka
57
58
explode
Converte uma string em um array, separando os elementos por meio de um separador.
array explode (string separador, string expresso)
Parmetros
separador
expresso
Descrio
Caractere que ser utilizado para desmembrar a string, convertendo-a em
um array.
String que desejamos converter em array.
Exemplo:
<?php
$string = "31/12/2004";
var_dump(explode("/", $string));
?>
Resultado:
array(3) {
[0]=>
string(2) "31"
[1]=>
string(2) "12"
[2]=>
string(4) "2004"
}
implode
Converte um array em uma string, separando os elementos do array por meio de
um separador.
array implode (string separador, array vetor)
Parmetros
separador
vetor
Descrio
Caractere que ser utilizado para delimitar a nova string criada.
Array original que desejamos converter em string.
Exemplo:
<?php
$padrao = array('Maria', 'Paulo', 'Jos');
$resultado = implode(' + ', $padrao);
var_dump($resultado);
?>
Resultado:
string(20) "Maria + Paulo + Jos"