Sie sind auf Seite 1von 62

Tutorial da linguagem PHP

ndice

1. Introduo

O que PHP?

PHP uma linguagem que permite criar sites WEB dinmicos, possi ilitando uma interao com o usu!rio atra"s de #ormul!rios, parmetros da $%& e lin's. ( di#erena de PHP com relao a linguagens semel)antes a *a"ascript que o c+digo PHP e,ecutado no ser"idor, sendo en"iado para o cliente apenas )tml puro. -esta maneira poss."el interagir com ancos de dados e aplica/es e,istentes no ser"idor, com a "antagem de no e,por o c+digo #onte para o cliente. Isso pode ser 0til quando o programa est! lidando com sen)as ou qualquer tipo de in#ormao con#idencial. 1 que di#erencia PHP de um script 23I escrito em 2 ou Perl que o c+digo PHP #ica em utido no pr+prio H45&, enquanto no outro caso necess!rio que o script 23I gere todo o c+digo H45&, ou leia de um outro arqui"o.

O que pode ser feito com PHP?

Basicamente, qualquer coisa que pode ser #eita por algum programa 23I pode ser #eita tam m com PHP, como coletar dados de um #ormul!rio, gerar p!ginas dinamicamente ou en"iar e rece er cookies. PHP tam m tem como uma das caracter.sticas mais importantes o suporte a um grande n0mero de ancos de dados, como dBase, Inter ase, m67&, m867&, 1racle, 68 ase, Postgre67& e "!rios outros. 2onstruir uma p!gina aseada em um anco de dados torna9se uma tare#a e,tremamente simples com PHP. (lm disso, PHP tem suporte a outros ser"ios atra"s de protocolos como I5(P, 6:5P, ::4P, P1P; e, logicamente, H44P. (inda poss."el a rir sockets e interagir com outros protocolos.

Como surgiu a linguagem PHP?

( linguagem PHP #oi conce ida durante o outono de 1<<= por Rasmus Lerdorf. (s primeiras "ers/es no #oram disponi ili>adas, tendo sido utili>adas em sua home-page apenas para que ele pudesse ter in#orma/es so re as "isitas que esta"am sendo #eitas. ( primeira "erso utili>ada por outras pessoas #oi disponi ili>ada em 1<<?, e #icou con)ecida como @ Personal Home Page 4oolsA B#erramentas para p!gina pessoalC. Era composta por um sistema astante simples que interpreta"a

algumas macros e alguns utilit!rios que roda"am @por tr!sA das home-pagesD um li"ro de "isitas, um contador e algumas outras coisas. Em meados de 1<<? o interpretador #oi reescrito, e gan)ou o nome de PHP/FI, o @EIA "eio de um outro pacote escrito por %asmus que interpreta"a dados de #ormul!rios H45& B Form InterpreterC. Ele com inou os scripts do pacote Personal Home Page Tools com o EI e adicionou suporte a m67&, nascendo assim o PHPFEI, que cresceu astante, e as pessoas passaram a contri uir com o proGeto. Estima9se que em 1<<H PHPFEI esta"a sendo usado por cerca de 1?.III sites pelo mundo, e em meados de 1<<J esse n0mero su iu para mais de ?I.III. :essa poca )ou"e uma mudana no desen"ol"imento do PHP. Ele dei,ou de ser um proGeto de %asmus com contri ui/es de outras pessoas para ter uma equipe de desen"ol"imento mais organi>ada. 1 interpretador #oi reescrito por Zeev Suraski e Andi Gutmans, e esse no"o interpretador #oi a ase para a "erso ;. (tualmente o uso do PHP; "em crescendo numa "elocidade incr."el, e G! est! sendo desen"ol"ida a "erso = do PHP.

2. Sintaxe Bsica

Delimitando o cdigo PHP

1 c+digo PHP #ica em utido no pr+prio H45&. 1 interpretador identi#ica quando um c+digo PHP pelas seguintes tagsD

<?php comandos ?> <script language=php> comandos </script> <? comandos ?> <% comandos %>
1 tipo de tags mais utili>ado o terceiro, que consiste em uma @a re"iaoA do primeiro. Para utili>!9lo, necess!rio )a ilitar a opo short-tags na con#igurao do PHP. 1 0ltimo tipo ser"e para #acilitar o uso por programadores acostumados K sinta,e de (6P. Para utili>!9lo tam m necess!rio )a ilit!9lo no PHP, atra"s do arqui"o de con#igurao php.ini.

Separador de instrues

Entre cada instruo em PHP preciso utili>ar o ponto9e9".rgula, assim como em 2, Perl e outras linguagens mais con)ecidas. :a 0ltima instruo do loco de script no necess!rio o uso do ponto9e9".rgula, mas por quest/es estticas recomenda9se o uso sempre.

Nomes de vari veis

4oda "ari!"el em PHP tem seu nome composto pelo caracter L e uma string, que de"e iniciar por uma letra ou o caracter @MA. PHP case sensitive, ou seGa, as "ari!"eis L"i"as e LNIN(6 so di#erentes. Por isso preciso ter muito cuidado ao de#inir os nomes das "ari!"eis. O om e"itar os nomes

em mai0sculas, pois como "eremos mais adiante, o PHP G! possui alguma "ari!"eis pr9de#inidas cuGos nomes so #ormados por letras mai0sculas.

Coment rios

H! dois tipos de coment!rios em c+digo PHPD

Comentrios de uma linha:

5arca como coment!rio at o #inal da lin)a ou at o #inal do loco de c+digo PHP P o que "ier antes. Pode ser delimitado pelo caracter @QA ou por duas arras B FF C.

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

Comentrios de mais de uma linha: 4em como delimitadores os caracteres / para o in.cio do loco e / para o #inal do coment!rio. 6e o delimitador de #inal de c+digo PHP B ?> C esti"er dentro de um coment!rio, no ser! recon)ecido pelo interpretador.

Exemplos: <? echo teste; / !sto um coment"rio com mais de uma linha# mas n$o %unciona corretamente ?> / <? echo teste; / !sto um coment"rio com mais de uma linha &ue %unciona corretamente / ?>

3. Criando os primeiros scripts


Primeiro !"emplo

:este e,emplo, criaremos um script com uma sa.da simples, que ser"ir! para testar se a instalao #oi #eita corretamenteD

<html> <head><title>'prendendo ()(</title></head> <*od+> <?php echo ,(rimeiro -cript,; ?> </*od+> </html>

6al"e o arqui"o como @primeiro.p)p;A no diretorio de documentos do (pac)e Bou o We 6er"er escol)idoC. ( ra uma Ganela do na"egador e digite o endereo

http://localhost/primeiro.php/. Neri#icando o c+digo #onte da p!gina e,i ida,


temos o seguinteD

<html> <head><title>'prendendo ()(</title></head> <*od+> (rimeiro -cript </*od+> </html>

Isso mostra como o PHP #unciona. 1 script e,ecutado no ser"idor, #icando dispon."el para o usu!rio apenas o resultado. (gora "amos escre"er um script que produ>a e,atamente o mesmo resultado utili>ando uma "ari!"elD

<html> <head><title>'prendendo ()(</title></head> <*od+> <?php 0texto = ,(rimeiro -cript,; echo 0texto; ?> </*od+> </html>

#tili$ando formul rios H%&'

(o clicar num oto @6u mitA em um #ormul!rio H45& as in#orma/es dos campos sero en"iadas ao ser"idor especi#icado para que possa ser produ>ida uma resposta. 1 PHP trata esses "alores como "ari!"eis, cuGo nome o nome do campo de#inido no #ormul!rio. 1 e,emplo a seguir mostra isso, e mostra tam m como o c+digo PHP pode ser inserido em H45&D ual uer parte do c+digo

<html> <head><title>'prendendo ()(</title></head> <*od+> <?php i% 10texto 2= ,,3 echo ,4oc5 digitou 6,0texto6,<*r><*r>,; ?> <%orm method=post action=,<? echo 0('7)8!9:;; ?>,> <input t+pe=,text, name=,texto, <alue=,, si=e=>?> <*r> <input t+pe=,su*mit, name=,su*, <alue=,En<iar2,> </%orm> </*od+> </html>

(o sal"ar o arqui"o acima e carreg!9lo no roSser, o usu!rio "er! apenas um #ormul!rio que contm um espao para digitar o te,to, como "isto na #igura I1. (o digitar um te,to qualquer e su meter o #ormul!rio, a resposta, que o mesmo arqui"o PHP Bindicado pela constante LP(4HMI:E1, que retorna o nome do arqui"oC ser! como na #igura I2D

<

figura 01

figura 02 Isso ocorre porque o c+digo PHP testa o conte0do da "ari!"el Lte,to. Inicialmente ele

uma string "a>ia, e por isso nada impresso na primeira parte. 7uando algum te,to digitado no #ormul!rio e su metido, o PHP passa a trat!9lo como uma "ari!"el. 2omo no #ormul!rio o campo possui o nome @te,toA, a "ari!"el com seu conte0do ser! Lte,to. (ssim, no pr+,imo teste o "alor da "ari!"el ser! di#erente de uma string "a>ia, e o PHP imprime um te,to antes do #ormul!rio.

(nteragindo com o )ro*ser

PHP tam m permite interagir com in#orma/es do

roSser automaticamente. Por

e,emplo, o script a seguir mostra in#orma/es so re o roSser do usu!rio. (s #iguras I; e I= mostram o resultado "isto no :etscape 2ommunicator e o 5icroso#t Internet E,plorer, respecti"amente.

<html> <head><title>'prendendo ()(</title></head> <*od+> <? echo 0)77(8@-EA8'BE97; ?> </*od+> </html>

1I

figura 03

figura 04 1 ser"e que o resultado mostra caracter.sticas de cada roSser, como a "erso, e no

caso do 2ommunicator at o idioma B@enAC. 2om isso, se "ocT criar uma p!gina com recursos dispon."eis somente no Internet E,plorer, por e,emplo, pode esconder o c+digo dos outros roSsers, com um c+digo semel)ante ao seguinteD

<html> <head><title>'prendendo ()(</title></head> <*od+> <? i% 1strpos10)77(8@-EA8'BE97#,C-!E D,3 2= ?3 E echo ,4oc5 usa !nternet Explorer,; F else E echo ,4oc5 n$o usa !nternet Explorer,; F ?> </*od+> </html>

:este e,emplo, ser! apenas e,i ido um te,to in#ormando se est! sendo utili>ado o 5icroso#t Internet E,plorer ou no, mas para outras #un/es poderia ser utili>ado algo semel)ante. O om notar o surgimento de mais uma #uno no c+digo anteriorD

strpos1string>#stringG3. Essa #uno retorna a posio da primeira apario de string2 em


string1, contando a partir de >ero, e no retorna "alor algum se no ocorrer. (ssim, para testar se a string

0)77(8@-EA8'BE97 contm a string C-!E, asta testar se strpos de"ol"e algum "alor.

11

+cessando ,ancos de Dados :este documento todos os e,emplos re#erentes a acesso de ancos de dados utili>aro o gerenciador de anco de dados 5867&, que pode ser copiado gratuitamente no site http://www.m s!l.org. Para interagir com uma ase de dados 67& e,istem trTs comandos !sicos que de"em ser utili>adosD um que #a> a cone,o com o ser"idor de anco de dados, um que seleciona a ase de dados a ser utili>ada e um terceiro que e,ecuta uma "!uer # 67&.

Conexo com o servidor ( cone,o com o ser"idor de anco de dados m867& em PHP #eita atra"s do comando m+s&l8connect, que tem a seguinte sinta,eD

int m+s&l8connect1string / host H:portaI / # string / login / # string / senha / 3;


1s parmetros so astante simplesD o endereo do ser"idorB)ostC, o nome do usu!rio BloginC e a sen)a para a cone,o. ( #uno retorna um "alor inteiro, que o identi#icador da cone,o esta elecida e de"er! ser arma>enado numa "ari!"el para ser utili>ado depois. :o nosso e,emplo, temos como ser"idor de anco de dados a mesma m!quina que roda o ser"idor )ttp, como login o usu!rio @rootA e sen)a @p)ppSdAD

0conexao = m+s&l8connect1localhost# root# phppJd3;

(ssim, se a cone,o #or em sucedida Be,istir um ser"idor no endereo especi#icado que possua o usu!rio com a sen)a #ornecidaC, o identi#icador da cone,o #ica arma>enado na "ari!"el

0conex$o.

Seleo do banco de dados $ma "e> conectado, preciso selecionar o anco de dados e,istente no ser"idor com o qual deseGamos tra al)ar. Isso #eito atra"s da #uno int m+s&l8select8d*, que possui a seguinte sinta,eD

int m+s&l8select8d*1string / nome8*ase /# int / conexao / 3;


1 "alor de retorno I se o comando #al)ar, e 1 em caso de sucesso. 1 nome da ase de dados a selecionar o primeiro parmetro #ornecido, seguido pelo identi#icador da cone,o. 6e este #or omitido, o interpretador PHP tentar! utili>ar a 0ltima cone,o esta elecida. %ecomenda9se sempre

12

e,plicitar esse "alor, para #acilitar a legi ilidade do c+digo. :o nosso e,emplo, a ase de dados a ser selecionada possui o nome @gedAD

m+s&l8select8d*1ged# 0conexao3;
(p+s a e,ecuo desse comando qualquer consulta e,ecutada para aquela cone,o utili>ar! a ase de dados selecionada.

Execuo de queries SQL (p+s esta elecida a cone,o e selecionada a ase de dados a ser utili>ada, quase toda a interao com o ser"idor m867& pode ser #eita atra"s de consultas escritas em 67& B6tructured 7uer8 &anguageC, com o comando m+s&l8&uer+, que utili>a a seguinte sinta,eD

int m+s&l8&uer+1string consulta# int HconexaoI 3;


1 "alor de retorno I se #al)ar ou 1 em caso de sucesso. 6ucesso aqui signi#ica que a consulta est! sintaticamente correta e #oi e,ecutada no ser"idor. :en)uma in#ormao so re o resultado retornada deste comando, ou at mesmo se o resultado o esperado. :o caso da consulta ser um comando 6E&E24, o "alor de retorno um "alor interno que identi#ica o resultado, que poder! ser tratado com a #uno m+s&l8result13 e outras. ( string quer8 no de"e conter ponto9e9".rgula no #inal do comando, e o identi#icador da cone,o opcional. Namos criar uma ta ela como e,emploD

0cria = KAE'7E 7'LME exemplo 1codigo !97 '@7;8!9KAECE97 (A!C'AN OEN# nome K)'A1P?3# email K)'A1D?33; m+s&l8&uer+10cria# 0conexao3;
(gora "eGamos como #icou o c+digo completo para e,ecutar uma quer8 67& numa ase de dados m867&, com um e,emplo que cria uma ta ela c)amada e,emplo e adiciona alguns dadosD

0conexao = m+s&l8connect1localhost# root# phppJd3; m+s&l8select8d*1ged# 0conexao3; 0cria = KAE'7E 7'LME exemplo 1codigo !97 '@7;8!9KAECE97 (A!C'AN OEN# nome K)'A1P?3# email K)'A1D?33; 0insere> = !9-EA7 !97; exemplo 1Cauricio 4i<as#<i<asQusa.net3; 0insereG = !9-EA7 !97; exemplo 1Rose da -il<a#SoseQteste.com3; 1nome#email3 1nome#email3 4'M@E4'M@E4'M@E4'M@E-

0insere/ = !9-EA7 !97; exemplo 1nome#email3 1:ernando )enri&ue Kardoso#%hcQplanalto.go<.*r3; 0insereP = !9-EA7 !97; exemplo 1nome#email3 1Lill Klinton#presidentQJhitehouse.go<3;

1;

m+s&l8&uer+10cria# 0conexao3; m+s&l8&uer+10insere># 0conexao3; m+s&l8&uer+10insereG# 0conexao3; m+s&l8&uer+10insere/# 0conexao3; m+s&l8&uer+10insereP# 0conexao3;
Tratamento de resultados de query SELECT

(o e,ecutar uma quer8 67& 6E&E24 atra"s do comando m+s&l8&uer+, o identi#icador do resultado de"e ser arma>enado numa "ari!"el que pode ser tratada de di"ersas #ormas. -uas maneiras interessantes de #a>T9lo usam o comando m+s&l8result e o comando

m+s&l8%etch8roJ, respecti"amente.
1 comando m+s&l8result tem a seguinte sinta,eD

int HcampoI3;

m+s&l8result1int

resultado#

int

linha#

mixed

1nde resultado o identi#icador do resultado, o tido com o retorno da #uno

m+s&l8&uer+, lin)a especi#ica a tupla a ser e,i ida, G! que uma quer8 6E&E24 pode retornar
di"ersas tuplas, e campo o identi#icador do campo a ser e,i ido, sendo o tipo descrito como mixed pela possi ilidade de ser de di"ersos tipos Bneste caso, inteiro ou stringC. NeGamos um e,emplo utili>ando a ta ela criada anteriormenteD

0consulta = -EMEK7 nome# email :A;C exemplo T)EAE email M!OE U<i<asV; 0resultado = m+s&l8&uer+10consulta# 0conexao3; print%1,9ome: ,# m+s&l8result10resultado#?#,nome,3# <*r>6n3; print%1,eWmail: ,# m+s&l8result10resultado#?#,email,3#<*r>3;
2om o e,emplo acima, o resultado ser!D

9ome: Cauricio 4i<as<*r> eWmail: <i<asQusa.net<*r>


O importante notar que a utili>ao desta #uno um pouco tra al)osa, G! que no caso de um resultado com "!rias lin)as preciso controlar o n0mero de lin)as para trat!9las Bpode9se utili>ar a #uno m+s&l8num8roJs1int resultado3, que retorna o n0mero de lin)as de um resultadoC, e no caso de uma alterao no nome do campo preciso alterar tam m a maneira de trat!9lo. Por isso

1=

mais aconsel)!"el que se use uma outra #uno, como por e,emplo m+s&l8%etch8roJ, que possui a seguinte sinta,eD

arra+ m+s&l8%etch8roJ1int result3;


( "ari!"el resultado o identi#icador da mem+ria de resultados, o tido como retorno da #uno m+s&l8&uer+. 1 resultado produ>ido por esta #uno de retirar a primeira lin)a da mem+ria de resultados, se )ou"er, e coloc!9la num arra8. (ssim torna9se mais #!cil tratar um resultado com "!rias lin)as, e sem utili>ar os nomes dos campos na rotina de tratamento do resultadoD

0consulta = -EMEK7 nome# email :A;C exemplo; 0resultado = m+s&l8&uer+10consulta# 0conexao3; echo ,<ta*le *order=>>6n,; echo ,<tr><td>9ome</td><td>eWmail</tr>6n,; Jhile 10linha = m+s&l8%etch8roJ10resultado33 E print%1,<tr><td>0linhaH?I</td>3; print%1,<td>0linhaH>I</td></tr>3; F echo ,</ta*le>6n,;
1 c+digo acima ir! imprimir todos os registros da ta ela e,emplo numa ta ela )tml. 6e o programador deseGar @pularA algumaBsC lin)aBsC do resultado, poder! utili>ar a #uno

m+s&l8data8seeX, que tem por o Geti"o de#inir qual ser! a pr+,ima lin)a da mem+ria de resultados
a ser impressa. 6ua sinta,e D

int m+s&l8data8seeX1int resultado# int linha3;


6endo resultado o identi#icador do resultado e linha o numero da lin)a. %etorna I em caso de #al)a, e um "alor di#erente de >ero em caso de sucesso. E,istem di"ersas outras #un/es para o tratamento de resultados, que arma>enam as lin)as em arra8s e o Getos, assim como outras #un/es para administrar o anco de dados, mas como este documento trata9se de uma introduo, inicialmente no tratar! t+picos mais a"anados.

1?

4. Tipos

%ipos Suportados

PHP suporta os seguintes tipos de dadosD

Inteiro Ponto #lutuante 6tring (rra8 1 Geto PHP utili>a c)ecagem de tipos dinmica, ou seGa, uma "ari!"el pode conter "alores de di#erentes tipos em di#erentes momentos da e,ecuo do script. Por este moti"o no necess!rio declarar o tipo de uma "ari!"el para us!9la. 1 interpretador PHP decidir! qual o tipo daquela "ari!"el, "eri#icando o conte0do em tempo de e,ecuo. (inda assim, permitido con"erter os "alores de um tipo para outro deseGado, utili>ando o t pecasting ou a #uno sett+pe B"er adianteC.

Inteiros inte!er ou lon!" $ma "ari!"el pode conter um "alor inteiro com atri ui/es que sigam as seguintes sinta,esD

0<i<as = >G/P; # 0<i<as = WG/P; # 0<i<as = ?G/P; # # 0<i<as = ?x/P; # #

inteiro positi<o na *ase decimal inteiro negati<o na *ase decimal inteiro na *ase octalWsim*oli=ado pelo ? e&ui<ale a >DY decimal inteiro na *ase hexadecimal1sim*oli=ado pelo ?x3 Z e&ui<ale a DG decimal.

( di#erena entre inteiros simples e long est! no n0mero de 8tes utili>ados para arma>enar a "ari!"el. 2omo a escol)a #eita pelo interpretador PHP de maneira transparente para o usu!rio, podemos a#irmar que os tipos so iguais.

1H

#$meros em %onto &lutuante double ou 'loat" $ma "ari!"el pode ter um "alor em ponto #lutuante com atri ui/es que sigam as seguintes sinta,esD

0<i<as = >.G/P; 0<i<as = G/eP; # e&ui<ale a G/?.???

Strin!s

6trings podem ser atri u.das de duas maneirasD

aC utili>ando aspas simples B U C P -esta maneira, o "alor da "ari!"el ser! e,atamente o te,to contido
entre as aspas Bcom e,ceo de VV e VU P "er ta ela a ai,oC

C utili>ando aspas duplas B W C P -esta maneira, qualquer "ari!"el ou caracter de escape ser! e,pandido
antes de ser atri u.do.

E,emploD

<? 0teste = ,Cauricio,; 0<i<as = [WWW0testeWW6n[; echo ,0<i<as,; ?>


( sa.da desse script ser! W999Lteste99VnW.

<? 0teste = ,Cauricio,; 0<i<as = ,WWW0testeWWW6n,; echo ,0<i<as,; ?>


( sa.da desse script ser! W9995auricio99W Bcom uma que ra de lin)a no #inalC.

1J

( ta ela seguinte lista os caracteres de escapeD

Sinta!e Significado

Vn Vr Vt VV VL VX VA

:o"a lin)a %etorno de carro Bsemel)ante a VnC 4a ulao )ori>ontal ( pr+pria arra B V C 1 s.m olo L (spa simples (spa dupla
:o apTndice I1 est! dispon."el uma lista das #un/es utili>adas no tratamento de strings.

(rrays

(rra8s em PHP podem ser o ser"ados como mapeamentos ou como "etores inde,ados. 5ais precisamente, um "alor do tipo arra8 um dicion!rio onde os .ndices so as c)a"es de acesso. Nale ressaltar que os .ndices podem ser "alores de qualquer tipo e no somente inteiros. Inclusi"e, se os .ndices #orem todos inteiros, estes no precisam #ormar um inter"alo cont.nuo 2omo a c)ecagem de tipos em PHP dinmica, "alores de tipos di#erentes podem ser usados como .ndices de arra8, assim como os "alores mapeados tam m podem ser de di"ersos tipos.

Exemplo: <? 0corH>I = <ermelho; 0corHGI = <erde; 0corH/I = a=ul; 0corHtesteI = >; ?> E&ui<alentemente# podeWse escre<er: <? 0cor = arra+1> => <ermelho# G => <erde# / => a=ul# teste => >3; ?>
Listas (s listas so utili>adas em PHP para reali>ar atri ui/es m0ltiplas. (tra"s de listas poss."el atri uir "alores que esto num arra8 para "ari!"eis. NeGamos o e,emploD

Exemplo:

1R

list10a# 0*# 0c3 = arra+1a# *# c3;


1 comando acima atri ui "alores Ks trTs "ari!"eis simultaneamente. O om notar que s+ so atri u.dos Ks "ari!"eis da lista os elementos do arra8 que possuem .ndices inteiros e no negati"os. :o e,emplo acima as trTs atri ui/es #oram em sucedidas porque ao iniciali>ar um arra8 sem especi#icar os .ndices eles passam a ser inteiros, a partir do >ero. $m #ator importante que cada "ari!"el da lista possui um .ndice inteiro e ordinal, iniciando com >ero, que ser"e para determinar qual "alor ser! atri u.do. :o e,emplo anterior temos La com .ndice I, L com .ndice 1 e Lc com .ndice 2. NeGamos um outro e,emploD

0arr = arra+1>=>um#/=>tres#a=>letra'#G=>dois3; list10a#0*#0c#0d3 = 0arr;


(p+s a e,ecuo do c+digo acima temos os seguintes "aloresD

0a 0* 0c 0d

== == == ==

null um dois tres

-e"emos o ser"ar que K "ari!"el La no #oi atri u.do "alor, pois no arra8 no e,iste elemento com .ndice I B>eroC. 1utro detal)e importante que o "alor @tresA #oi atri u.do K "ari!"el Ld, e no a L , pois seu .ndice ;, o mesmo que Ld na lista. Por #im, "emos que o "alor @letra(A no #oi atri u.do a elemento algum da lista pois seu .ndice no inteiro. 1s .ndices da lista ser"em apenas como re#erTncia ao interpretador PHP para reali>ar as atri ui/es, no podendo ser acessados de maneira alguma pelo programador. -e maneira di#erente do arra8, uma lista no pode ser atri u.da a uma "ari!"el, ser"indo apenas para #a>er m0ltiplas atri ui/es atra"s de um arra8. :o apTndice I2 est! dispon."el uma lista das #un/es mais comuns para o tratamento de arra8s.

)b*etos $m o Geto pode ser iniciali>ado utili>ando o comando new para instanciar uma classe para uma "ari!"el.

Exemplo: class teste E %unction nada13 E echo nada; F F 0<i<as = neJ teste; 0<i<as W> nada13;
( utili>ao de o Getos ser! mais detal)ada mais K #rente.

1<

+ooleanos

PHP no possui um tipo ooleano, mas capa> de a"aliar e,press/es e retornar true ou false, atra"s do tipo integerD usado o "alor I B>eroC para representar o estado false, e qualquer "alor di#erente de >ero Bgeralmente 1C para representar o estado true.

%ransforma-o de tipos

( trans#ormao de tipos em PHP pode ser #eita das seguintes maneirasD Coer,es

7uando ocorrem determinadas opera/es B@YA, por e,emploC entre dois "alores de tipos di#erentes, o PHP con"erte o "alor de um deles automaticamente BcoeroC. O interessante notar que se o operando #or uma "ari!"el, seu "alor no ser! alterado. 1 tipo para o qual os "alores dos operandos sero con"ertidos determinado da seguinte #ormaD 6e um dos operandos #or %loat, o outro ser! con"ertido para %loat, seno, se um deles #or

integer, o outro ser! con"ertido para integer. Exemplo: 0<i<as = 0<i<as = 0<i<as = 0<i<as =

>; // 0<i<as a string > 0<i<as \ >; // 0<i<as o integer G 0<i<as \ /.];// 0<i<as o dou*le D.] > \ >.D // 0<i<as o dou*le G.D

2omo podemos notar, o PHP con"erte string para integer ou dou*le mantendo o "alor. 1 sistema utili>ado pelo PHP para con"erter de strings para n0meros o seguinteD

9 9 9 9

O analisado o in.cio da string. 6e conti"er um n0mero, ele ser! a"aliado. 6eno, o "alor ser! I B>eroCZ 1 n0mero pode conter um sinal no in.cio B@YA ou @9@CZ 6e a string conti"er um ponto em sua parte numrica a ser analisada, ele ser! considerado, e o "alor o tido ser! dou*leZ 6e a string conti"er um @eA ou @EA em sua parte numrica a ser analisada, o "alor seguinte ser! considerado como e,poente da ase 1I, e o "alor o tido ser!

dou*leZ

2I

Exemplos: 0<i<as = > 0<i<as = > 0<i<as = > 0<i<as = > 0<i<as = > 0<i<as = >

\ \ \ \ \ \

>?.D; // W>./e/; // teste>?.D; // >?testes; // , >?testes,; ,\ >?testes,;

0<i<as == >>.D 0<i<as == W>G^^ 0<i<as == > 0<i<as == >> // 0<i<as == >> // 0<i<as == >

Trans'ormao ex-l.cita de ti-os

( sinta,e do t pecast de PHP semel)ante ao 2D asta escre"er o tipo entre parenteses antes do "alor

Exemplo: 0<i<as = 0<i<as = 0<i<as = 0<i<as =

>D; 1dou*le3 0<i<as /.^ 1int3 0<i<as

// // // // //

0<i<as integer 1>D3 0<i<as dou*le 1>D.?3 0<i<as dou*le 1/.^3 0<i<as integer 1/3 o <alor decimal truncado

1s tipos de cast permitidos soD BintC, BintegerC BrealC, Bdou leC, B#loatC BstringC Barra8C Bo GectC muda para integerZ muda para #loatZ muda para stringZ muda para arra8Z muda para o Geto.

Com a 'uno setty-e

( #uno sett+pe con"erte uma "ari!"el para o tipo especi#icado, que pode ser @integerA, @dou leA, @stringA, @arra8A ou @o GectA.

Exemplo: 0<i<as = >D; sett+pe10<i<as#dou*le3

// 0<i<as integer // 0<i<as dou*le

21

5. Constantes

Constantes pr.definidas

1 PHP possui algumas constantes pr9de#inidas, indicando a "erso do PHP, o 6istema 1peracional do ser"idor, o arqui"o em e,ecuo, e di"ersas outras in#orma/es. Para ter acesso a todas as constantes pr9de#inidas, pode9se utili>ar a #uno phpin%o13, que e,i e uma ta ela contendo todas as constantes pr9de#inidas, assim como con#igura/es da m!quina, sistema operacional, ser"idor )ttp e "erso do PHP instalada.

Definindo constantes

Para de#inir constantes utili>a9se a #uno de%ine. $ma "e> de#inido, o "alor de uma constante no poder! mais ser alterado. $ma constante s+ pode conter "alores escalares, ou seGa, no pode conter nem um arra8 nem um o Geto. ( assinatura da #uno de%ine a seguinteD

int define1string nome8da8constante# mixed <alor3;


( #uno retorna true se #or em9sucedida. NeGa um e,emplo de sua utili>ao a seguirD

de%ine 1,pi,# /.>P>D^GYD/Y3; 0circun% = G pi 0raio;

22

6. Operadores

+ritmticos

6+ podem ser utili>ados quando os operandos so n0meros Binteger ou #loatC. 6e #orem de outro tipo, tero seus "alores con"ertidos antes da reali>ao da operao.

\ W / %

adio su trao multiplicao di"iso m+dulo

de strings

6+ )! um operador e,clusi"o para stringsD

concatenao

de atri)ui-o

E,iste um operador !sico de atri uio e di"ersos deri"ados. 6empre retornam o "alor atri u.do. :o caso dos operadores deri"ados de atri uio, a operao #eita entre os dois operandos, sendo atri u.do o resultado para o primeiro. ( atri uio sempre por "alor, e no por re#erTncia.

2;

= \= W= = /= %= .=

atri atri atri atri atri atri atri

uio simples uio com adio uio com su trao uio com multiplicao uio com di"iso uio com m+dulo uio com concatenao

Exemplo: 0a = ]; 0a \= G; // 0a passa a conter o <alor ^


)it a )it

2omparam dois n0meros it a it.

[ \ ] ^ __ `` 'gicos

@eA l+gico @ouA l+gico ou e,clusi"o no Bin"ersoC s)i#t le#t s)i#t rig)t

$tili>ados para inteiros representando "alores ooleanos

and or ,or a [[ \\

@eA l+gico @ouA l+gico ou e,clusi"o no Bin"ersoC @eA l+gico @ouA l+gico E,istem dois operadores para @eA e para @ou porque eles tTm di#erentes posi/es na

ordem de precedTncia.

Compara-o

(s compara/es so #eitas entre os "alores contidos nas "ari!"eis, e no as re#erTncias. 6empre retornam um "alor ooleano.

bb ab _

igual a di#erente de menor que

2=

` _b `b

maior que menor ou igual a maior ou igual a

!"press-o condicional

E,iste um operador de seleo que tern!rio. Eunciona assimD

1expressao>3?1expressaoG3:1 expressao/3
o interpretador PHP a"alia a primeira e,presso. 6e ela #or "erdadeira, a e,presso retorna o "alor de e,presso2. 6eno, retorna o "alor de e,presso;.

de incremento e decremento

YY 99

incremento decremento Podem ser utili>ados de duas #ormasD antes ou depois da "ari!"el. 7uando utili>ado

antes, retorna o "alor da "ari!"el antes de increment!9la ou decrement!9la. 7uando utili>ado depois, retorna o "alor da "ari!"el G! incrementado ou decrementado.

Exemplos: 0a = 0* = >?; // 0a e 0* rece*em o <alor >? 0c = 0a\\; // 0c rece*e >? e 0a passa a ter >> 0d = \\0*; // 0d rece*e >># <alor de 0* S" incrementado
Ordem de preced/ncia dos operadores

( ta ela a seguir mostra a ordem de precedTncia dos operadores no momento de a"aliar as e,press/esZ Precedncia 1. 2. ;. =. Associatividade esquerda esquerda esquerda esquerda , or ,or and Operadores

2?

?. H. J. R. <. 1I. 11. 12. 1;. 1=. 1?. 1H. 1J. 1R. 1<. 2I.

direita esquerda esquerda esquerda esquerda esquerda esquerda esquerda no associa no associa esquerda esquerda esquerda direita direita no associa

print b Yb 9b cb Fb .b db [b ab ^b __b ``b eD \\ [[ \ ] [ bb ab _ _b ` `b __ `` Y9. cFd a ^ YY 99 BintC Bdou leC BstringC Barra8C Bo GectC f g neS

2H

. !str"t"ras de Contro#e
(s estruturas que "eremos a seguir so comuns para as linguagens de programao imperati"as, astando, portanto, descre"er a sinta,e de cada uma delas, resumindo o #uncionamento.

,locos $m loco consiste de "!rios comandos agrupados com o o Geti"o de relacion!9los com determinado comando ou #uno. Em comandos como i%, %or, Jhile, sJitch e em declara/es de #un/es locos podem ser utili>ados para permitir que um comando #aa parte do conte,to deseGado. Blocos em PHP so delimitados pelos caracteres @hA e @iA. ( utili>ao dos delimitadores de loco em uma parte qualquer do c+digo no relacionada com os comandos citados ou #un/es no produ>ir! e#eito algum, e ser! tratada normalmente pelo interpretador.

Exemplo: i% 10x == 0+3 comando>; comandoG;


Para que comando2 esteGa relacionado ao i# preciso utili>ar um locoD

i% 10x == 0+3E comando>; comandoG; F

Comandos de sele-o

4am m c)amados de condicionais, os comandos de seleo permitem e,ecutar comandos ou locos de comandos com ase em testes #eitos durante a e,ecuo.

2J

i'

1 mais tri"ial dos comandos condicionais o i%. Ele testa a condio e e,ecuta o comando indicado se o resultado #or true B"alor di#erente de >eroC. Ele possui duas sinta,esD

i% 1express$o3 comando; i% 1express$o3: comando; . . . comando; endi%;


Para incluir mais de um comando no i% da primeira sinta,e, preciso utili>ar um loco, demarcado por c)a"es.

1 else um complemento opcional para o i%. 6e utili>ado, o comando ser! e,ecutado se a e,presso retornar o "alor %alse B>eroC. 6uas duas sinta,es soD

i% 1express$o3 comando; else comando; i% 1express$o3: comando; . . . comando; else comando; . . . comando; endi%;

( seguir, temos um e,emplo do comando i% utili>ado com elseD

i% 10a > 0*3 0maior = 0a; else

2R

0maior = 0*;
1 e,emplo acima coloca em Lmaior o maior "alor entre La e L

Em determinadas situa/es necess!rio #a>er mais de um teste, e e,ecutar condicionalmente di"ersos comandos ou locos de comandos. Para #acilitar o entendimento de uma estrutura do tipoD

i% 1expressao>3 comando>; else i% 1expressaoG3 comandoG; else i% 1expressao/3 comando/; else comandoP;
#oi criado o comando, tam m opcional elsei%. Ele tem a mesma #uno de um

else e um i% usados sequencialmente, como no e,emplo acima. :um mesmo i% podem ser utili>ados
di"ersos elsei%Xs, #icando essa utili>ao a critrio do programador, que de"e >elar pela legi ilidade de seu script.

1 comando elsei% tam m pode ser utili>ado com dois tipos de sinta,e. Em resumo, a sinta,e geral do comando i% #ica das seguintes maneirasD

i% 1expressao>3 comando; H elsei% 1expressaoG3 comando; I H else comando; I

2<

i% 1expressao>3 : comando; . . . comando; H elsei% 1expressaoG3 comando; . . . comando; I H else comando; . . . comando; I endi%;

s/itch

1 comando sJitch atua de maneira semel)ante a uma srie de comandos i% na mesma e,presso. Erequentemente o programador pode querer comparar uma "ari!"el com di"ersos "alores, e e,ecutar um c+digo di#erente a depender de qual "alor igual ao da "ari!"el. 7uando isso #or necess!rio, de"e9se usar o comando sJitch. 1 e,emplo seguinte mostra dois trec)os de c+digo que #a>em a mesma coisa, sendo que o primeiro utili>a uma srie de i%Xs e o segundo utili>a sJitchD

i% 10i == ?3 print i elsei% 10i == print i elsei% 10i == print i

igual a =ero; >3 igual a um; G3 igual a dois;

sJitch 10i3 E case ?: print i igual a =ero; *reaX; case >: print i igual a um; *reaX; case G: print i igual a dois; *reaX; F
O importante compreender o #uncionamento do sJitch para no cometer enganos. 1 comando sJitch testa lin)a a lin)a os cases encontrados, e a partir do momento que encontra um "alor igual ao da "ari!"el testada, passa a e,ecutar todos os comandos seguintes, mesmo os que #a>em parte de outro teste, at o #im do loco. por isso usa9se o comando *reaX, que rando o #lu,o e #a>endo com que

;I

o c+digo seGa e,ecutado da maneira deseGada. Neremos mais so re o *reaX mais adiante. NeGa o e,emploD

sJitch 10i3 E case ?: print i igual a =ero; case >: print i igual a um; case G: print i igual a dois;
i

:o e,emplo acima, se Li #or igual a >ero, os trTs comandos @printA sero e,ecutados. 6e Li #or igual a 1, os dois 0ltimos @printA sero e,ecutados. 1 comando s+ #uncionar! da maneira deseGada se Li #or igual a 2. Em outras linguagens que implementam o comando sSitc), ou similar, os "alores a serem testados s+ podem ser do tipo inteiro. Em PHP permitido usar "alores do tipo string como elementos de teste do comando sSitc). 1 e,emplo a ai,o #unciona per#eitamenteD

sJitch 10s3 E case casa: print ' casa amarela; case ar<ore: print a "r<ore *onita; case lampada: print Soao apagou a lampada;
i

comandos de repeti-o /hile 1 Jhile o comando de repetio BlaoC mais simples. Ele testa uma condio e e,ecuta um comando, ou um loco de comandos, at que a condio testada seGa #alsa. (ssim como o i%, o Jhile tam m possui duas sinta,es alternati"asD

while 1<expressao>3 <comando>; while 1<expressao>3: <comando>; . . . <comando>;

;1

endwhile;
( e,presso s+ testada a cada "e> que o loco de instru/es termina, alm do teste inicial. 6e o "alor da e,presso passar a ser %alse no meio do loco de instru/es, a e,ecuo segue at o #inal do loco. 6e no teste inicial a condio #or a"aliada como %alse, o loco de comandos no ser! e,ecutado. 1 e,emplo a seguir mostra o uso do Jhile para imprimir os n0meros de 1 a 1ID

0i = >; Jhile 10i <=>?3 print 0i\\;

do000 /hile

1 lao do..Jhile #unciona de maneira astante semel)ante ao Jhile, com a simples di#erena que a e,presso testada ao #inal do loco de comandos. 1 lao do..Jhile possui apenas uma sinta,e, que a seguinteD

do E <comando> . . . <comando> F while 1<expressao>3;


1 e,emplo utili>ado para ilustrar o uso do Jhile pode ser #eito da seguinte maneira utili>ando o do.. JhileD

0i = ?; do E print \\0i; F Jhile 10i < >?3;


'or

1 tipo de lao mais comple,o o %or. Para os que programam em 2, 2YY ou *a"a, a assimilao do #uncionamento do #or natural. 5as para aqueles que esto acostumados a linguagens como Pascal, )! uma grande mudana para o uso do #or. (s duas sinta,es permitidas soD

for 1<iniciali=acao>;<condicao>;<incremento>3 <comando>;

;2

for 1<iniciali=acao>;<condicao>;<incremento>3 : <comando>; . . . <comando>; endfor;


(s trTs e,press/es que #icam entre parTnteses tTm as seguintes #inalidadesD

Iniciali>aoD comando ou sequencia de comandos a serem reali>ados antes do inicio do lao. 6er"e para iniciali>ar "ari!"eis. 2ondioD E,presso ooleana que de#ine se os comandos que esto dentro do lao sero e,ecutados ou no. Enquanto a e,presso #or "erdadeira B"alor di#erente de >eroC os comandos sero e,ecutados. IncrementoD 2omando e,ecutado ao #inal de cada e,ecuo do lao. $m comando %or #unciona de maneira semel)ante a um Jhile escrito da seguinte #ormaD

;;

<iniciali=acao> while 1<condicao>3 E comandos ... <incremento> F

0ue)ra de flu"o

+rea1 1 comando *reaX pode ser utili>ado em laos de do, %or e Jhile, alm do uso G! "isto no comando sJitch. (o encontrar um *reaX dentro de um desses laos, o interpretador PHP para imediatamente a e,ecuo do lao, seguindo normalmente o #lu,o do script.

while 10x > ?3 E ... i% 10x == G?3 E echo erro2 x = G?; *reaX; ... F
:o trec)o de c+digo acima, o lao Jhile tem uma condio para seu trmino normal BL, _b IC, mas #oi utili>ado o rea' para o caso de um trmino no pre"isto no in.cio do lao. (ssim o interpretador seguir! para o comando seguinte ao lao.

Continue

1 comando continue tam m de"e ser utili>ado no interior de laos, e #unciona de maneira semel)ante ao *reaX, com a di#erena que o #lu,o ao in"s de sair do lao "olta para o in.cio dele. NeGamos o e,emploD

%or 10i = ?; 0i < >??; 0i\\3 E i% 10i % G3 continue; echo 0i ; F


1 e,emplo acima uma maneira ine#iciente de imprimir os n0meros pares entre I e <<. 1 que o lao #a> testar se o resto da di"iso entre o n0mero e 2 I. 6e #or di#erente de >ero B"alor l+gico

trueC o interpretador encontrar! um continue, que #a> com que os comandos seguintes do interior
do lao seGam ignorados, seguindo para a pr+,ima iterao.

;=

$. %"n&'es

Definindo funes

( sinta,e !sica para de#inir uma #uno D

%unction nome_da_funo1Harg># argG# arg/I3 E Komandos; ... ; Hreturn <<alor de retorno>I; F


7ualquer c+digo PHP "!lido pode estar contido no interior de uma #uno. 2omo a c)ecagem de tipos em PHP dinmica, o tipo de retorno no de"e ser declarado, sendo necess!rio que o programador esteGa atento para que a #uno retorne o tipo deseGado. O recomend!"el que esteGa tudo em documentado para #acilitar a leitura e compreenso do c+digo. Para e#eito de documentao, utili>a9se o seguinte #ormato de declarao de #unoD

tipo %unction nome8da8%uncao1tipo arg># tipo argG# ...3;


Este #ormato s+ de"e ser utili>ado na documentao do script, pois o PHP no aceita a declarao de tipos. Isso signi#ica que em muitos casos o programador de"e estar atento ao tipos dos "alores passados como parmetros, pois se no #or passado o tipo esperado no emitido nen)um alerta pelo interpretador PHP, G! que este no testa os tipos.

1alor de retorno

4oda #uno pode opcionalmente retornar um "alor, ou simplesmente e,ecutar os comandos e no retornar "alor algum. :o poss."el que uma #uno retorne mais de um "alor, mas permitido #a>er com que uma #uno retorne um "alor composto, como listas ou arra8s.

+rgumentos

O poss."el passar argumentos para uma #uno. Eles de"em ser declarados logo ap+s o nome da #uno, entre parTnteses, e tornam9se "ari!"eis pertencentes ao escopo local da #uno. ( declarao do tipo de cada argumento tam m utili>ada apenas para e#eito de documentao.

;?

Exemplo: %unction imprime10texto3E echo 0texto; F imprime1teste de %un_`es3;

%assa!em de -ar2metros -or re'er3ncia

:ormalmente, a passagem de parmetros em PHP #eita por "alor, ou seGa, se o conte0do da "ari!"el #or alterado, essa alterao no a#eta a "ari!"el original.

Exemplo: %unction mais510numero3 E 0numero \= D; F 0a = /; maisD10a3; //0a continua <alendo /


:o e,emplo acima, como a passagem de parmetros por "alor, a #uno mais? in0til, G! que ap+s a e,ecuo sair da #uno o "alor anterior da "ari!"el recuperado. 6e a passagem de "alor #osse #eita por re#erTncia, a "ari!"el La teria R como "alor. 1 que ocorre normalmente que ao ser c)amada uma #uno, o interpretador sal"a todo o escopo atual, ou seGa, os conte0dos das "ari!"eis. 6e uma dessas "ari!"eis #or passada como parmetro, seu conte0do #ica preser"ado, pois a #uno ir! tra al)ar na "erdade com uma c+pia da "ari!"el. Porm, se a passagem de parmetros #or #eita por re#erTncia, toda alterao que a #uno reali>ar no "alor passado como parmetro a#etar! a "ari!"el que o contm. H! duas maneiras de #a>er com que uma #uno ten)a parmetros passados por re#erTnciaD indicando isso na declarao da #uno, o que #a> com que a pasagem de parmetros sempre seGa assimZ e tam m na pr+pria c)amada da #uno. :os dois casos utili>a9se o modi#icador @[A. NeGamos um e,emplo que ilustra os dois casosD

%unction mais51a0num># 0numG3 E 0num> \= D; 0numG \= D; F 0a = 0* = >;

;H

maisD10a# 0*3; / 9este caso# sb 0num> ter" seu <alor alterado# pois a passagem por re%er5ncia est" de%inida na declara_$o da %un_$o. / maisD10a# a0*3; <alores alterados. / / '&ui as duas <ari"<eis ter$o seus

(r!umentos com valores -r45de'inidos de'ault"

Em PHP poss."el ter "alores $efault para argumentos de #un/es, ou seGa, "alores que sero assumidos em caso de nada ser passado no lugar do argumento. 7uando algum parmetro declarado desta maneira, a passagem do mesmo na c)amada da #uno torna9se opcional.

%unction teste10<i<as = testando3 E echo 0<i<as; F teste13; // imprime testando teste1outro teste3; // imprime outro teste
O om lem rar que quando a #uno tem mais de um parmetro, o que tem "alor $efault de"e ser declarado por 0ltimoD

%unction teste10%igura = circulo# 0cor3 E echo a %igura um # 0%igura# de cor 0cor; F teste1a=ul3; / ' %un_$o n$o <ai %uncionar da maneira esperada# ocorrendo um erro no interpretador. ' declara_$o correta : / %unction testeG10cor# 0%igura = circulo3 E echo a %igura um # 0%igura# de cor 0cor; F testeG1a=ul3; / '&ui a %uncao %unciona da maneira esperada# ou seSa# imprime o texto: a %igura um ccrculo de cor a=ul /

Conte"to 1 conte,to o conGunto de "ari!"eis e seus respecti"os "alores num determinado ponto do programa. :a c)amada de uma #uno, ao iniciar a e,ecuo do loco que contm a implementao da

;J

mesma criado um no"o conte,to, contendo as "ari!"eis declaradas dentro do loco, ou seGa, todas as "ari!"eis utili>adas dentro daquele loco sero eliminadas ao trmino da e,ecuo da #uno. !scopo 1 escopo de uma "ari!"el em PHP de#ine a poro do programa onde ela pode ser utili>ada. :a maioria dos casos todas as "ari!"eis tTm escopo glo al. Entretanto, em #un/es de#inidas pelo usu!rio um escopo local criado. $ma "ari!"el de escopo glo al no pode ser utili>ada no interior de uma #uno sem que )aGa uma declarao.

Exemplo: 0<i<as = 7estando; %unction 7este13 E echo 0<i<as; F 7este13;


1 trec)o acima no produ>ir! sa.da alguma, pois a "ari!"el L"i"as de escopo glo al, e no pode ser re#erida num escopo local, mesmo que no )aGa outra com nome igual que cu ra a sua "isi ilidade. Para que o script #uncione da #orma deseGada, a "ari!"el glo al a ser utili>ada de"e ser declarada.

;R

Exemplo: 0<i<as = 7estando; %unction 7este13 E glo*al 0<i<as; echo 0<i<as; F 7este13;
$ma declarao @glo alA pode conter "!rias "ari!"eis, separadas por ".rgulas. $ma outra maneira de acessar "ari!"eis de escopo glo al dentro de uma #uno utili>ando um arra8 pr9 de#inido pelo PHP cuGo nome L3&1B(&6. 1 .ndice para a "ari!"el re#erida o proprio nome da "ari!"el, sem o caracter L. 1 e,emplo acima e o a ai,o produ>em o mesmo resultadoD

Exemplo: 0<i<as = ,7estando,; %unction 7este13 E echo 0BM;L'M-H,<i<as,I; // imprime 0<i<as echo 0<i<as; // n$o imprime nada i 7este13;

;<

(. )ariveis

O modificador static

$ma "ari!"el est!tica "is."el num escopo local, mas ela iniciali>ada apenas uma "e> e seu "alor no perdido quando a e,ecuo do script dei,a esse escopo. NeGa o seguinte e,emploD

%unction 7este13 E 0a = ?; echo 0a; 0a\\; F


1 0ltimo comando da #uno in0til, pois assim que #or encerrada a e,ecuo da #uno a "ari!"el La perde seu "alor. *! no e,emplo seguinte, a cada c)amada da #uno a "ari!"el La ter! seu "alor impresso e ser! incrementadaD

%unction 7este13 E static 0a = ?; echo 0a; 0a\\; F


1 modi#icador static muito utili>ado em #un/es recursi"as, G! que o "alor de algumas "ari!"eis precisa ser mantido. Ele #unciona da seguinte #ormaD 1 "alor das "ari!"eis declaradas como est!ticas mantido ao terminar a e,ecuo da #uno. :a pr+,ima e,ecuo da #uno, ao encontrar no"amente a declarao com static, o "alor da "ari!"el recuperado. Em outras pala"ras, uma "ari!"el declarada como static tem o mesmo @tempo de "idaA que uma "ari!"el glo al, porm sua "isi ilidade restrita ao escopo local em que #oi declarada e s+ recuperada ap+s a declarao. E,emploD

%unction 7este13 E echo ,0a,; static 0a = ?; 0a\\; i


1 e,emplo acima no produ>ir! sa.da alguma. :a primeira e,ecuo da #uno, a impresso ocorre antes da atri uio de um "alor K #uno, e portanto o conte0do de La nulo Bstring "a>iaC. :as e,ecu/es seguintes da #uno 4esteBC a impresso ocorre antes da recuperao do "alor de

=I

0a, e portanto nesse momento seu "alor ainda nulo. Para que a #uno retorne algum "alor o
modi#icador static de"e ser utili>ado.

1ari veis 1ari veis

1 PHP tem um recurso con)ecido como "ari!"eis "ari!"eis, que consiste em "ari!"eis cuGos nomes tam m so "ari!"eis. 6ua utili>ao #eita atra"s do duplo ci#ro BLLC.

0a = teste; 00a = Cauricio 4i<as; ; exemplo acima e e&ui<alente ao seguinte: 0a = teste; 0teste = Cauricio 4i<as;

1ari veis enviadas pelo navegador

Para interagir com a na"egao #eita pelo usu!rio, necess!rio que o PHP possa en"iar e rece er in#orma/es para o so#tSare de na"egao. ( maneira de en"iar in#orma/es, como G! #oi "isto anteriormente, geralmente atra"s de um comando de impresso, como o echo. Para rece er in#orma/es "indas do na"egador atra"s de um link ou um #ormul!rio )tml o PHP utili>a as in#orma/es en"iadas atra"s da $%&. Por e,emploD e se seu "ocT script o p)p c)ama est! locali>ado com a em url

http://localhost/teste.php/

http://localhost/teste.php/?<i<as=teste, automaticamente o PHP criar! uma


"ari!"el com o nome L"i"as contendo a string @testeA. :ote que o conte0do da "ari!"el est! no #ormato

urlencode. 1s #ormul!rios )tml G! en"iam in#orma/es automaticamente nesse #ormato, e o PHP


decodi#ica sem necessitar de tratamento pelo programador.

67Lencode

1 #ormato urlencode o tido su stituindo os espaos pelo caracter @YA e todos os outros caracteres no al#a9numricos Bcom e,ceo de @MAC pelo caracter @dA seguido do c+digo (62II em )e,adecimal.

Por e,emploD o te,to @4estando 1 2 ; aaA em urlencode #ica @4estandoY1Y2Y;Y d21d21A

=1

1 PHP possui duas #un/es para tratar com te,to em urlencode. 6eguem suas sinta,esD

string urlencode1string texto3; string urldecode1string texto3;

Essas #un/es ser"em respecti"amente para codi#icar ou decodi#icar um te,to passado como argumento. Para entender mel)or o que um argumento e como #unciona uma #uno, leia o t+pico @#un/esA.

1ari veis de am)iente

1 PHP possui di"ersas "ari!"eis de am iente, como a 0()(8-EM:, por e,emplo, que contm o nome e o pat) do pr+prio arqui"o. (lgumas outras contm in#orma/es so re o na"egador do usu!rio, o ser"idor )ttp, a "erso do PHP e di"ersas in#orma/es. Para ter uma listagem de todas as "ari!"eis e constantes de am iente e seus respecti"os conte0dos, de"e9se utili>ar a #uno

phpin%o13.

1erificando o tipo de uma vari vel Por causa da tipagem dinmica utili>ada pelo PHP, nem sempre poss."el sa er qual o tipo de uma "ari!"el em determinado instantese no contar com a aGuda de algumas #un/es que aGudam a "eri#icar isso. ( "eri#icao pode ser #eita de duas maneirasD

&uno que retorna o ti-o da varivel

Esta #uno a gett+pe. 6ua assinatura a seguinteD

string gettype1mixed <ar3;


( pala"ra @mi,edA indica que a "ari!"el "ar pode ser de di"ersos tipos. ( #uno

gett+pe pode retornar as seguintes stringsD integer#

dou*le# string# arra+# o*Sect e unXnoJn t+pe.

=2

&un,es que testam o ti-o da varivel

6o

as

#un/es

is8int#

is8integer#

is8real#

is8long#

is8%loat# is8string# is8arra+ e is8o*Sect. 4odas tTm o mesmo #ormato,


seguindo modelo da assinatura a seguirD

int is_integer1mixed <ar3;


4odas essas #un/es retornam true se a "ari!"el #or daquele tipo, e %alse em caso contr!rio.

Destruindo uma vari vel

O poss."el desalocar uma "ari!"el se ela no #or usada posteriormente atra"s da #uno

unset, que tem a seguinte assinaturaD int unset1mixed <ar3;


( #uno destr+i a "ari!"el, ou seGa, li era a mem+ria ocupada por ela, #a>endo com que ela dei,e de e,istir. 6e mais na #rente #or #eita uma c)amada ! "ari!"el, ser! criada uma no"a "ari!"el de mesmo nome e de conte0do "a>io, a no ser que a c)amada seGa pela #uno isset. 6e a operao #or em sucedida, retorna true.

1erificando se uma vari vel possui um valor

E,istem dois tipos de teste que podem ser #eitos para "eri#icar se uma "ari!"el est! setadaD com a #uno isset e com a #uno empt+. ( 'uno isset

Possui o seguinte prot+tipoD

int isset1mixed <ar3;

=;

E retorna true se a "ari!"el esti"er setada Bainda que com uma string "a>ia ou o "alor >eroC, e %alse em caso contr!rio.

( 'uno em-ty

Possui a seguinte assinaturaD

int empty1mixed <ar3;


E retorna true se a "ari!"el no conti"er um "alor Bno esti"er setadaC ou possuir "alor I B>eroC ou uma string "a>ia. 2aso contr!rio, retorna %alse.

==

*+. C#asses e O,-etos

Classe $ma classe um conGunto de "ari!"eis e #un/es relacionadas a essas "ari!"eis. $ma "antagem da utili>ao poder usu#ruir do recurso de encapsulamento de in#ormao. 2om o encapsulamento o usu!rio de uma classe no precisa sa er como ela implementada, astando para a utili>ao con)ecer a inter#ace, ou seGa, as #un/es dispon."eis. $ma classe um tipo, e portanto no pode ser atri u.da a uma "ari!"el. Para de#inir uma classe, de"e9se utili>ar a seguinte sinta,eD

class 9ome8da8classe E <ar 0<aria<el>; <ar 0<aria<elG; %unction %uncao> 10parametro3 E / === corpo da %un_$o === / F F
O)2eto 2omo #oi dito anteriormente, classes so tipos, e no podem ser atri u.das a "ari!"eis. Nari!"eis do tipo de uma classe so c)amadas de o Getos, e de"em ser criadas utili>ando o operador neJ, seguindo o e,emplo a ai,oD

0<aria<el = neJ 0nome8da8classe;


Para utili>ar as #un/es de#inidas na classe, de"e ser utili>ado o operador W>, como no e,emploD

0<aria<elW>%uncao>1
+ vari vel 3t4is :a de#inio de uma classe, pode9se utili>ar a "ari!"el 0this, que o pr+prio o Geto. (ssim, quando uma classe instanciada em um o Geto, e uma #uno desse o Geto na de#inio da classe utili>a a "ari!"el 0this, essa "ari!"el signi#ica o o Geto que estamos utili>ando.

2omo e,emplo da utili>ao de classes e o Getos, podemos utili>ar a classe conta, que de#ine uma conta anc!ria astante simples, com #un/es para "er saldo e #a>er um crdito.

class conta E <ar 0saldo; %unction saldo13 E return 0thisW>saldo; i

=?

%unction credito10<alor3 E 0thisW>saldo \= 0<alor; F

0minhaconta = neJ conta; 0minhacontaW>saldo13;

0minhacontaW>credito1D?3; 0minhacontaW>saldo13; // retorna D?

// a <aria<el interna n$o %oi // iniciali=ada# e n$o contm // <alor algum

Su)Classes $ma classe pode ser uma e,tenso de outra. Isso signi#ica que ela )erdar! todas as "ari!"eis e #un/es da outra classe, e ainda ter! as que #orem adicionadas pelo programador. Em PHP no permitido utili>ar )erana m0ltipla, ou seGa, uma classe pode ser e,tenso de apenas uma outra.Para criar uma classe e,tendida, ou deri"ada de outra, de"e ser utili>ada a pala"ra reser"ada extends, como pode ser "isto no e,emplo seguinteD

class no<aconta extends conta E <ar 0numero; %unction numero13 E return 0thisW>numero; i i
( classe acima deri"ada da classe conta, tendo as mesmas #un/es e "ari!"eis, com a adio da "ari!"el 0numero e a #uno numero13. Construtores $m construtor uma #uno de#inida na classe que automaticamente c)amada no momento em que a classe instanciada Batra"s do operador neJC. 1 construtor de"e ter o mesmo nome que a classe a que pertence. NeGa o e,emploD

class conta E <ar 0saldo; %unction conta 13 E 0this.saldo = ?; F %unction saldo13 E return 0thisW>saldo; i %unction credito10<alor3 E 0thisW>saldo \= 0<alor; F

=H

Podemos perce er que a classe conta agora possui um construtor, que iniciali>a a "ari!"el 0saldo com o "alor I. $m construtor pode conter argumentos, que so opcionais, o que torna esta #erramenta mais poderosa. :o e,emplo acima, o construtor da classe conta pode rece er como argumento um "alor, que seria o "alor inicial da conta. Nale o ser"ar que para classes deri"adas, o construtor da classe pai no automaticamente )erdado quando o construtor da classe deri"ada c)amado.

=J

*2. Conc#"s'es

( reali>ao deste ProGeto 6uper"isionado possi ilitou o estudo da linguagem PHP, que se mostrou uma #erramenta poderosa e simples de utili>ar na construo de sites para a World Wide We dinmicos, possi ilitando uma maior interao com o usu!rio e a arma>enagem das in#orma/es em Bancos de -ados. (p+s a concluso da aplicao, tornou9se claro que a com inao de scripts ser%er-si$e, como o PHP, com scripts client-si$e, como *a"a6cript, por e,emplo, possi ilita um maior apro"eitamento dos recursos dispon."eis para criar p!ginas dinmicas, e no processo de criao de"e9se ponderar astante para concluir qual dos dois tipos de scripts de"e ser utili>ado para determinado #im. Entre as linguagens de script ser%er-si$e, PHP surgiu como uma +tima opo, por di"ersos moti"osD o custo de aquisio, que no e,isteZ a porta ilidade, permitindo que uma aplicao seGa desen"ol"ida em uma plata#orma para ser e,ecutada em outraZ a simplicidade, G! que os scripts #icam no pr+prio c+digo )tml, e possuem uma sinta,e astante simplesZ a possi ilidade de tra al)ar com di"ersos ancos de dados e ser"idores )ttp, alm do grande n0mero de #un/es pr9de#inidas, entre outras coisas. Por esses e outros moti"os, poss."el a#irmar que o estudo so re PHP #oi astante enriquecedor, por ter produ>ido uma documentao em portuguTs para a linguagem e ter moti"ado o aluno a continuar se dedicando ao tema.

=R

*3. Bi,#io.ra/ia e 0e/erncias


( pesquisa #oi aseada no manual de PHP, dispon."el em www.php.net, e em di"ersos tutoriais dispon."eis no site www.phpbuilder.com. Esses dois endereos contm uma "asta documentao so re a linguagem, alm de endereos para listas de discusso, onde pode9se solicitar aGuda de programadores mais e,perientes. $ma oa re#erTncia em portuguTs a lista "PHP para !uem fala Portugu&s#, que pode ser assinada no endereo www.egroups.com/group/php-pt/. Em inglTs, alm dos endereos citados acima, uma oa #onte o site PHP'i(ar$, que pode ser encontrado em www.phpwizard.net.

=<

AP1234C! +* 5 %"n&'es para tratamento de strin.s

5unes relacionadas a H%&' htmls-ecialchars

string htmlspecialchars1string str3;


%etorna a string #ornecida, su stituindo os seguintes caracteresD

cC [ para U[ampZU dC W para U[quotZU eC _ para U[ltZU #C ` para j[gtZU

htmlentities

string htmlentities1string str3;


Eunciona de maneira semel)ante ao comando anterior, mas de maneira mais completa, pois con"erte todos os caracteres da string que possuem uma representao especial em )tml, como por e,emploD

gC k para U[ordmZU )C l para U[ord#ZU iC ! para U[aacuteZU GC para j[ccedilZU

nl8br

string nlG*r1string str3;


%etorna a string #ornecida su stituindo todas as que ras de lin)a B@VnAC por que ras de lin)as em )tml B@_ r`AC.

Exemplo: echo nlG*r1Cauricio6n4i<as6n3; !mprime: Caurccio<*r>4i<as<*r>

?I

!et9meta9ta!s

arra+ get8meta8tags1string ar&ui<o3;


( re um arqui"o )tml e percorre o ca eal)o em usca de @metaA tags, retornando num arra8 todos os "alores encontrados.

Exemplo: 9o ar&ui<o teste.html temos: ... <head> <meta name=,author, content=,Sose,> <meta name=,tags, content=,php/ documentation,> ... </head><2WW *usca encerra a&ui WW> ... a execu_$o da %un_$o: get8meta8tags1teste.html3; retorna o arra+: arra+1author=>Sose#tags=>,php/ documentation,3;

stri-9ta!s

string strip8tags1string str3;


%etorna a string #ornecida, retirando todas as tags )tml eFou PHP encontradas.

Exemplo: strip8tags1[<a hre%=,teste>.php/,>testando</a><*r>[3; Aetorna a string testando

urlencode

string urlencode1string str3;


%etorna a string #ornecida, con"ertida para o #ormato urlencode. Esta #uno 0til para passar "ari!"eis para uma pr+,ima p!gina.

urldecode

string urldecode1string str3;

?1

Eunciona de maneira in"ersa a urlencode, desta "e> decodi#icando a string #ornecida do #ormato urlencode para te,to normal.

5unes relacionadas a arra6s

Im-lode e *oin

string implode1string separador# arra+ partes3; string Soin1string separador# arra+ partes3;
(s duas #un/es so idTnticas. %etornam uma string contendo todos os elementos do arra8 #ornecido separados pela string tam m #ornecida.

Exemplo: 0partes = arra+1,a,# ,casa ndmero,# >/# , a=ul,3; 0inteiro = Soin1, ,#0partes3; 0inteiro passa a conter a string: a casa ndmero >/ a=ul
s-lit

arra+ split1string padrao# string str# int HlimiteI3;


%etorna um arra8 contendo partes da string #ornecida separadas pelo padro #ornecido, podendo limitar o n0mero de elementos do arra8.

Exemplo: 0data = >>/>P/>^]D; 0data8arra+ = split1/#0data3; ; cbdigo acima %a= com &ue a <ari"<el 0data8arra+ rece*a o <alor: arra+1>>#>P#>^]D3;

ex-lode

arra+ explode1string padrao# string str3;


Eunciona de maneira astante semel)ante K #uno split, com a di#erena que no poss."el esta elecer um limite para o n0mero de elementos do arra8.

?2

Comparaes entre strings similar9text

int similar8text1string HporcentagemI3;

str>#

string

strG#

dou*le

2ompara as duas strings #ornecidas e retorna o n0mero de caracteres coincidentes. 1pcionalmente pode ser #ornecida uma "ari!"el, passada por re#erTncia )%er t*pico so+re fun,-es., que rece er! o "alor percentual de igualdade entre as strings. Esta #uno case sensiti%e, ou seGa, mai0sculas e min0sculas so tratadas como di#erentes.

Exemplo: 0num = similar8text1,teste,# ,testando,#a0porc3; 's <ari"<eis passam a ter os seguintes <alores: 0num == P; 0porc == Y>.D/ePY>D/ePYG

strcasecm-

int strcasecmp1string str># string strG3;


2ompara as duas strings e retorna I B>eroC se #orem iguais, um "alor maior que >ero se

str> > strG, e um "alor menor que >ero se str> < strG. Esta #uno case insensiti%e, ou
seGa, mai0sculas e min0sculas so tratadas como iguais.

strcm-

int strcasecmp1string str># string strG3;


Eunciona de maneira semel)ante K #uno strcasecmp, com a di#erena que esta case sensiti%e, ou seGa, mai0sculas e min0sculas so tratadas como di#erentes.

strstr

string strstr1string str># string strG3; string strchr1string str># string strG3;
(s duas #un/es so idTnticas. Procura a primeira ocorrTncia de strG em str>. 6e no encontrar, retorna uma string "a>ia, e se encontrar retorna todos os caracteres de str> a partir desse ponto.

Exemplo:

?;

strstr1,Cauricio 4i<as,# ,4i<,3; // retorna 4i<as

stristr

string strstr1string str># string strG3;


Eunciona de maneira semel)ante K #uno strstr, com a di#erena que esta case insensiti%e, ou seGa, mai0sculas e min0sculas so tratadas como iguais.

str-os

int strpos1string str># string strG# int Ho%%setI 3;


%etorna a posio da primeira ocorrTncia de strG em str>, ou >ero se no )ou"er. 1 parmetro opcional o%%set determina a partir de qual caracter de str1 ser! e#etuada a usca. 5esmo utili>ando o o##set, o "alor de retorno re#erente ao in.cio de str1.

strr-os

int strrpos1string ha+stacX# char needle3;


%etorna a posio da 0ltima ocorrTncia de strG em str>, ou >ero se no )ou"er.

5unes para edi-o de strings

cho-

string chop1string str3;


%etira espaos e lin)as em ranco do #inal da string #ornecida.

Exemplo: chop1 7este

6n

6n

3; // retorna

7este

ltrim

string ltrim1string str3;


%etira espaos e lin)as em ranco do #inal da string #ornecida.

Exemplo: ltrim1

7este

6n

6n 3; // retorna 7este

6n

6n

?=

trim

string trim1string str3;


%etira espaos e lin)as em ranco do in.cio e do #inal da string #ornecida.

Exemplo: trim1 7este

6n

6n 3; // retorna 7este

strrev

string strre<1string str3;


%etorna a string #ornecida in"ertida.

Exemplo: strre<17este3; // retorna etse7

strtolo/er

string strtoloJer1string str3;


%etorna a string #ornecida com todas as letras min0sculas.

Exemplo: strtoloJer17este3; // retorna teste

strtou--er

string strtoupper1string str3;


%etorna a string #ornecida com todas as letras mai0sculas.

Exemplo: strtoloJer17este3; // retorna 7E-7E

uc'irst

string uc%irst1string str3;

??

%etorna a string #ornecida com o primeiro caracter con"ertido para letra mai0scula.

Exemplo: uc%irst1teste de %uncao3; // retorna 7este de %uncao

uc/ords

string ucJords1string str3;


%etorna a string #ornecida com todas as pala"ras iniciadas por letras mai0sculas.

Exemplo: ucJords1teste de %uncao3; // retorna 7este fe :uncao

str9re-lace

str/3;

string

str8replace1string

str>#

string

strG#

string

(ltera todas as ocorrTncias de str> em str/ pela string strG.

5unes diversas

chr

string chr1int ascii3;


%etorna o caracter correspondente ao c+digo (62II #ornecido.

ord

int ord1string string3;


%etorna o c+digo (62II correspontente ao caracter #ornecido.

?H

echo

echo1string arg># string HargnI... 3;


Imprime os argumentos #ornecidos.

-rint

print1string arg3;
Imprime o argumento #ornecido. strlen

int strlen1string str3;


%etorna o taman)o da string #ornecida.

?J

AP1234C! +2 5 %"n&'es para tratamento de arra6s

5unes 7enricas

(rray

arra+ arra+1...3;
O a #uno que cria um arra8 a partir dos parmetros #orncidos. O poss."el #ornecer o .ndice de cada elemento. Esse .ndice pode ser um "alor de qualquer tipo, e no apenas de inteiro. 6e o .ndice no #or #ornecido o PHP atri ui um "alor inteiro sequencial, a partir do I ou do 0ltimo .ndice inteiro e,plicitado. NeGamos alguns e,emplosD

Exemplo > 0teste = arra+1,um,# ,dois,#,tr,=>,tres,#D=>,&uatro,#,cinco,3; 7emos o seguinte mapeamento: ? => um 1? o primeiro cndice# se n$o hou<er um explicito3 > => dois 1o inteiro seguinte3 tr => tres D => &uatro 1<alor explicitado3 Y => cinco 1o inteiro seguinte ao dltimo atri*ucdo# e n$o o prbximo <alor# &ue seria G3 Exemplo G 0teste = Y=>,dois,#,tr,=>,tres,#D=>,&uatro,#,cinco,3; 7emos o seguinte mapeamento: ? => um Y => dois tr => tres D => &uatro 1seria ]# se n$o %osse explicitado3 ] => cinco 1seria Y# se n$o esti<esse ocupado3
Em geral, no recomend!"el utili>ar arra8s com "!rios tipos de .ndices, G! que isso pode con#undir o programador. :o caso de realmente )a"er a necessidade de utili>ar esse recurso, de"e9se ter astante ateno ao manipular os .ndices do arra8.

arra+1,um,#

ran!e

arra+ range1int minimo# int maximo3;

?R

( #uno range cria um arra8 cuGos elementos so os inteiros pertencentes ao inter"alo #ornecido, inclusi"e. 6e o "alor do primeiro parmetro #or maior do que o do segundo, a #uno retorna

%alse B"alor "a>ioC.

shu''le

<oid shu%%le1arra+ aarr3;


Esta #uno @em aral)aA o arra8, ou seGa, troca as posi/es dos elementos aleatoriamente e no retorna "alor algum.

si:eo'

int si=eo%1arra+ arr3;


%etorna um "alor inteiro contendo o n0mero de elementos de um arra8. 6e #or utili>ada com uma "ari!"el cuGo "alor no do tipo arra8, retorna 1. 6e a "ari!"el no esti"er setada ou #or um arra8 "a>io, retorna I.

5unes de 8navega-o9 4oda "ari!"el do tipo arra8 possui um ponteiro interno indicando o pr+,imo elemento a ser acessado no caso de no ser especi#icado um .ndice. (s #un/es seguintes ser"em para modi#icar esse ponteiro, permitindo assim percorrer um arra8 para "eri#icar seu conte0do Bc)a"es e elementosC.

reset

mixed reset1arra+ arr3;


6eta o ponteiro interno para o primeiro elemento do arra8, e retorna o conte0do desse elemento. end

mixed end1arra+ arr3;


6eta o ponteiro interno para o 0ltimo elemento do arra8, e retorna o conte0do desse elemento.

next

mixed next1arra+ arr3;

?<

6eta o ponteiro interno para o pr+,imo elemento do arra8, e retorna o conte0do desse elemento. 1 s.D esta no uma oa #uno para determinar se um elemento o 0ltimo do arra8, pois pode retornar %alse tanto no #inal do arra8 como no caso de )a"er um elemento "a>io.

-rev

mixed pre<1arra+ arr3;


6eta o ponteiro interno para o elemento anterior do arra8, e retorna o conte0do desse elemento. Eunciona de maneira in"ersa a next.

-os

mixed pos1arra+ arr3;


%etorna o conte0do do elemento atual do arra8, indicado pelo ponteiro interno.

1ey

mixed Xe+1arra+ arr3;


Eunciona de maneira astante semel)ante a pos, mas ao in"s de retornar o elemento atual indicado pelo ponteiro interno do arra8, retorna seu .ndice. each

arra+ each1arra+ arr3;


%etorna um arra8 contendo o .ndice e o elemento atual indicao pelo ponteiro interno do arra8. o "alor de retorno um arra8 de quatro elementos, cuGos .ndices so I, 1, @'e8A e @"alueA. 1s elementos de .ndices I e @'e8A arma>enam o .ndice do "alor atual, e os elementos de .ndices 1 e @"alueA contm o "alor do elemento atual indicado pelo ponteiro. Esta #uno pode ser utili>ada para percorrer todos os elementos de um arra8 e determinar se G! #oi encontrado o 0ltimo elemento, pois no caso de )a"er um elemento "a>io, a #uno no retornar! o "alor %alse. ( #uno each s+ retorna %alse depois q o 0ltimo elemento do arra8 #oi encontrado.

Exemplo: / %un_$o &ue percorre todos os elementos de um arra+ e imprime seus cndices e <alores / %unction imprime8arra+10arr3 E reset10arr3; Jhile 1list10cha<e#0<alor3 = each10arr33

HI

echo Kha<e: 0cha<e. 4alor: 0<alor;

5unes de ordena-o 6o #un/es que ser"em para arrumar os elementos de um arra8 de acordo com determinados critrios. Estes critrios soD manuteno ou no da associao entre .ndices e elementosZ ordenao por elementos ou por .ndicesZ #uno de comparao entre dois elementos.

sort

<oid sort1arra+ aarr3;


( #uno mais simples de ordenao de arra8s. 1rdena os elementos de um arra8 em ordem crescente, sem manter os relacionamentos com os .ndices.

rsort

<oid rsort1arra+ aarr3;


Eunciona de maneir ain"ersa K #uno sort. 1rdena os elementos de um arra8 em ordem decrescente, sem manter os relacionamentos com os .ndices.

asort

<oid asort1arra+ aarr3;


4em o #uncionamento astante semel)ante K #uno sort. 1rdena os elementos de um arra8 em ordem crescente, porm mantm os relacionamentos com os .ndices.

arsort

<oid arsort1arra+ aarr3;


Eunciona de maneira in"ersa K #uno asort. 1rdena os elementos de um arra8 em ordem decrescente e mantm os relacionamentos dos elementos com os .ndices.

1sort

<oid Xsort1arra+ aarr3;


Euno de ordenao aseada nos .ndices. 1rdena os elementos de um arra8 de acordo com seus .ndices, em ordem crescente, mantendo os relacionamentos.

H1

usort

<oid usort1arra+ aarr# %unction compara3;


Esta uma #uno que utili>a outra #uno como parmetro. 1rdena os elementos de um arra8 sem manter os relacionamentos com os .ndices, e utili>a para e#eito de comparao uma #uno de#inida pelo usu!rio, que de"e comparar dois elementos do arra8 e retornar I, 1 ou P1, de acordo com qualquer critrio esta elecido pelo usu!rio. uasort

<oid uasort1arra+ aarr# %unction compara3;


Esta #uno tam m utili>a outra #uno como parmetro. 1rdena os elementos de um arra8 e mantm os relacionamentos com os .ndices, utili>ando para e#eito de comparao uma #uno de#inida pelo usu!rio, que de"e comparar dois elementos do arra8 e retornar I, 1 ou P1, de acordo com qualquer critrio esta elecido pelo usu!rio.

u1sort

<oid uXsort1arra+ aarr# %unction compara3;


Esta #uno ordena o arra8 atra"s dos .ndices, mantendo os relacionamentos com os elementos., e utili>a para e#eito de comparao uma #uno de#inida pelo usu!rio, que de"e comparar dois .ndices do arra8 e retornar I, 1 ou P1, de acordo com qualquer critrio esta elecido pelo usu!rio.

H2

Das könnte Ihnen auch gefallen