Академический Документы
Профессиональный Документы
Культура Документы
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.
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.
( 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
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.
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
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 / ?>
: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
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>
(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.
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
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
(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
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
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
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
1=
mais aconsel)!"el que se use uma outra #uno, como por e,emplo m+s&l8%etch8roJ, que possui a seguinte sinta,eD
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
1?
4. Tipos
%ipos Suportados
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
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
Strin!s
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
1J
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
0a 0* 0c 0d
== == == ==
-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 = >
\ \ \ \ \ \
0<i<as == >>.D 0<i<as == W>G^^ 0<i<as == > 0<i<as == >> // 0<i<as == >> // 0<i<as == >
( sinta,e do t pecast de PHP semel)ante ao 2D asta escre"er o tipo entre parenteses antes do "alor
// // // // //
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.
( #uno sett+pe con"erte uma "ari!"el para o tipo especi#icado, que pode ser @integerA, @dou leA, @stringA, @arra8A ou @o GectA.
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
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 / %
de strings
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= = /= %= .=
uio simples uio com adio uio com su trao uio com multiplicao uio com di"iso uio com m+dulo uio com concatenao
[ \ ] ^ __ `` 'gicos
@eA l+gico @ouA l+gico ou e,clusi"o no Bin"ersoC s)i#t le#t s)i#t rig)t
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 _
2=
` _b `b
!"press-o condicional
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.
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
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%;
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
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
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
;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
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
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
;2
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
;;
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
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
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.
;?
: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.
;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
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.
;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
=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.
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;
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/
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.
=1
1 PHP possui duas #un/es para tratar com te,to em urlencode. 6eguem suas sinta,esD
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.
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
=2
6o
as
#un/es
is8int#
is8integer#
is8real#
is8long#
O poss."el desalocar uma "ari!"el se ela no #or usada posteriormente atra"s da #uno
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
=;
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
==
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<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.
=?
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
=<
htmlentities
nl8br
?I
!et9meta9ta!s
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
urlencode
urldecode
?1
Eunciona de maneira in"ersa a urlencode, desta "e> decodi#icando a string #ornecida do #ormato urlencode para te,to normal.
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
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
?2
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-
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-
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:
?;
stristr
str-os
strr-os
cho-
6n
6n
3; // retorna
7este
ltrim
Exemplo: ltrim1
7este
6n
6n 3; // retorna 7este
6n
6n
?=
trim
6n
6n 3; // retorna 7este
strrev
strtolo/er
strtou--er
uc'irst
??
%etorna a string #ornecida com o primeiro caracter con"ertido para letra mai0scula.
uc/ords
str9re-lace
str/3;
string
str8replace1string
str>#
string
strG#
string
5unes diversas
chr
ord
?H
echo
-rint
print1string arg3;
Imprime o argumento #ornecido. strlen
?J
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
?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
shu''le
si:eo'
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
next
?<
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
-os
1ey
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
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
rsort
asort
arsort
1sort
H1
usort
u1sort
H2