Anda di halaman 1dari 18

APOSTILA PHP

Parte 2
7. Funes
Definindo funes
A sintaxe bsica para definir uma funo :
function nome_da_funo([arg1, arg2, arg3] !
"omandos#
$$$ #
[return %&a'or de retorno(]#
)
*ua'+uer c,digo -.- &'ido pode estar contido no interior de uma funo$ "omo
a c/ecagem de tipos em -.- din0mica, o tipo de retorno no de&e ser dec'arado,
sendo necessrio +ue o programador este1a atento para +ue a funo retorne o tipo
dese1ado$ 2 recomend&e' +ue este1a tudo bem documentado para faci'itar a 'eitura e
compreenso do c,digo$ -ara efeito de documentao, uti'i3a4se o seguinte formato de
dec'arao de funo:
tipo function nome5da5funcao(tipo arg1, tipo arg2, $$$#
6ste formato s, de&e ser uti'i3ado na documentao do script, pois o -.- no
aceita a dec'arao de tipos$ 7sso significa +ue em muitos casos o programador de&e
estar atento aos tipos dos &a'ores passados como par0metros, pois se no for passado
o tipo esperado no emitido nen/um a'erta pe'o interpretador -.-, 1 +ue este no
testa os tipos$
Valor de retorno
8oda funo pode opciona'mente retornar um &a'or, ou simp'esmente executar
os comandos e no retornar &a'or a'gum$
9o poss:&e' +ue uma funo retorne mais de um &a'or, mas permitido fa3er
com +ue uma funo retorne um &a'or composto, como 'istas ou arra;s$
Argumentos
2 poss:&e' passar argumentos para uma funo$ 6'es de&em ser dec'arados 'ogo
ap,s o nome da funo, entre par<nteses, e tornam4se &ari&eis pertencentes ao
escopo 'oca' da funo$ A dec'arao do tipo de cada argumento tambm uti'i3ada
apenas para efeito de documentao$
6xemp'o:
function imprime(=texto!
ec/o =texto#
)
imprime(>teste de fun?es@#
Passagem de parmetros por referncia
9orma'mente, a passagem de par0metros em -.- feita por &a'or, ou se1a, se o
conteAdo da &ari&e' for a'terado, essa a'terao no afeta a &ari&e' origina'$
6xemp'o:
function mais5(=numero !
=numero BC D#
)
=a C 3#
maisD(=a# EE=a continua &a'endo 3
9o exemp'o acima, como a passagem de par0metros por &a'or, a funo
maisD inAti', 1 +ue ap,s a execuo sair da funo o &a'or anterior da &ari&e'
recuperado$ Fe a passagem de &a'or fosse feita por refer<ncia, a &ari&e' =a teria G
como &a'or$ H +ue ocorre norma'mente +ue ao ser c/amada uma funo, o
interpretador sa'&a todo o escopo atua', ou se1a, os conteAdos das &ari&eis$ Fe uma
dessas &ari&eis for passada como par0metro, seu conteAdo fica preser&ado, pois a
funo ir traba'/ar na &erdade com uma c,pia da &ari&e'$ -orm, se a passagem de
par0metros for feita por refer<ncia, toda a'terao +ue a funo rea'i3ar no &a'or
passado como par0metro afetar a &ari&e' +ue o contm$
. duas maneiras de fa3er com +ue uma funo ten/a par0metros passados por
refer<ncia: indicando isso na dec'arao da funo, o +ue fa3 com +ue a passagem de
par0metros sempre se1a assim# e tambm na pr,pria c/amada da funo$ 9os dois
casos uti'i3a4se o modificador >I@$ Je1amos um exemp'o +ue i'ustra os dois casos:
function mais5(I=num1, =num2 !
=num1 BC D#
=num2 BC D#
)
=a C =b C 1#
maisD(=a, =b# EK 9este caso, s, =num1 ter seu &a'or a'terado, pois a
passagem por refer<ncia est definida na dec'arao da funo$ KE
maisD(=a, I=b# EK A+ui as duas &ari&eis tero seus &a'ores a'terados$ KE
Argumentos com valores pr-definidos (default)
6m -.- poss:&e' ter &a'ores default para argumentos de fun?es, ou se1a,
&a'ores +ue sero assumidos em caso de nada ser passado no 'ugar do argumento$
*uando a'gum par0metro dec'arado desta maneira, a passagem do mesmo na
c/amada da funo torna4se opciona'$
function teste(=p/p C >testando@ !
ec/o =p/p#
)
teste(# EE imprime >testando@
teste(>outro teste@# EE imprime >outro teste@
2 bom 'embrar +ue +uando a funo tem mais de um par0metro, o +ue tem
&a'or default de&e ser dec'arado por A'timo:
function teste(=figura C circu'o, =cor !
ec/o >a figura um >$ =figura$ > de cor > =cor#
)
teste(a3u'#
EK A funo no &ai funcionar da maneira esperada, ocorrendo um erro no
interpretador$ A dec'arao correta : KE
function teste2(=cor, =figura C circu'o !
ec/o >a figura um >$ =figura$ > de cor >$ =cor#
)
teste2(La3u'M#
EK A+ui a funo funciona da maneira esperada, ou se1a, imprime o texto: >a
figura um c:rcu'o de cor a3u'@ KE
Conteto
H contexto o con1unto de &ari&eis e seus respecti&os &a'ores num
determinado ponto do programa$ 9a c/amada de uma funo, ao iniciar a execuo do
b'oco +ue contm a imp'ementao da mesma criado um no&o contexto, contendo as
&ari&eis dec'aradas dentro do b'oco, ou se1a, todas as &ari&eis uti'i3adas dentro
da+ue'e b'oco sero e'iminadas ao trmino da execuo da funo$
!scopo
H escopo de uma &ari&e' em -.- define a poro do programa onde e'a pode
ser uti'i3ada$ 9a maioria dos casos todas as &ari&eis t<m escopo g'oba'$ 6ntretanto,
em fun?es definidas pe'o usurio um escopo 'oca' criado$ Nma &ari&e' de escopo
g'oba' no pode ser uti'i3ada no interior de uma funo sem +ue /a1a uma dec'arao$
6xemp'o:
=p/p C >8estando@#
function 8este( !
ec/o =p/p#
)
8este(#
H trec/o acima no produ3ir sa:da a'guma, pois a &ari&e' =p/p de escopo
g'oba', e no pode ser referida num escopo 'oca', mesmo +ue no /a1a outra com
nome igua' +ue cubra a sua &isibi'idade$ -ara +ue o script funcione da forma dese1ada,
a &ari&e' g'oba' a ser uti'i3ada de&e ser dec'arada$
6xemp'o:
=p/p C >8estando@#
function 8este( !
g'oba' =p/p#
ec/o =p/p#
)
8este(#
Nma dec'arao >g'oba'@ pode conter &rias &ari&eis, separadas por &:rgu'as$
Nma outra maneira de acessar &ari&eis de escopo g'oba' dentro de uma funo
uti'i3ando um arra; pr4definido pe'o -.- cu1o nome =OPHQAPF$ H :ndice para a
&ari&e' referida o pr,prio nome da &ari&e', sem o caracter =$ H exemp'o acima e o
abaixo produ3em o mesmo resu'tado:
6xemp'o:
=p/p C R8estandoR#
function 8este( !
ec/o =OPHQAPF[Rp/pR]# EE imprime =p/p
ec/o =p/p# EE no imprime nada
)
8este(#
. !ari"#eis
" modificador static
Nma &ari&e' esttica &is:&e' num escopo 'oca', mas e'a inicia'i3ada apenas
uma &e3 e seu &a'or no perdido +uando a execuo do script deixa esse escopo$
Je1a o seguinte exemp'o:
function 8este( !
=a C S#
ec/o =a#
=aBB#
)
H A'timo comando da funo inAti', pois assim +ue for encerrada a execuo
da funo a &ari&e' =a perde seu &a'or$ T no exemp'o seguinte, a cada c/amada da
funo a &ari&e' =a ter seu &a'or impresso e ser incrementada:
function 8este( !
static =a C S#
ec/o =a#
=aBB#
)
H modificador static muito uti'i3ado em fun?es recursi&as, 1 +ue o &a'or de
a'gumas &ari&eis precisa ser mantido$ 6'e funciona da seguinte forma: H &a'or das
&ari&eis dec'aradas como estticas mantido ao terminar a execuo da funo$ 9a
pr,xima execuo da funo, ao encontrar no&amente a dec'arao com static, o &a'or
da &ari&e' recuperado$
6m outras pa'a&ras, uma &ari&e' dec'arada como static tem o mesmo >tempo
de &ida@ +ue uma &ari&e' g'oba', porm sua &isibi'idade restrita ao escopo 'oca' em
+ue foi dec'arada e s, recuperada ap,s a dec'arao$
6xemp'o:
function 8este( !
ec/o R=aR#
static =a C S#
=aBB#
)
H exemp'o acima no produ3ir sa:da a'guma$ 9a primeira execuo da funo,
a impresso ocorre antes da atribuio de um &a'or U funo e, portanto o conteAdo de
=a nu'o (string &a3ia$ 9as execu?es seguintes da funo 8este( a impresso ocorre
antes da recuperao do &a'or de =a e, portanto nesse momento seu &a'or ainda
nu'o$ -ara +ue a funo retorne a'gum &a'or o modificador static de&e ser uti'i3ado$
Vari#veis Vari#veis
H -.- tem um recurso con/ecido como &ari&eis &ari&eis, +ue consiste em
&ari&eis cu1os nomes tambm so &ari&eis$ Fua uti'i3ao feita atra&s do dup'o
cifro (==$
=a C >teste@#
==a C >Vauricio Ji&as@#
H exemp'o acima e e+ui&a'ente ao seguinte:
=a C >teste@#
=teste C >Vauricio Ji&as@#
Vari#veis enviadas pelo navegador
-ara interagir com a na&egao feita pe'o usurio, necessrio +ue o -.- possa
en&iar e receber informa?es para o softWare de na&egao$ A maneira de en&iar
informa?es, como 1 foi &isto anteriormente, gera'mente atra&s de um comando de
impresso, como o echo$ -ara receber informa?es &indas do na&egador atra&s de um
link ou um formu'rio /tm' o -.- uti'i3a as informa?es en&iadas atra&s da NXP$
Jeremos com mais deta'/es na sesso formu'rios$ Nm exemp'o seria: se seu script
p/p est 'oca'i3ado em >/ttp:EE'oca'/ostEteste$p/p3@ e &oc< o c/ama com a ur'
>/ttp:EE'oca'/ostEteste$p/p3Yp/pCteste@, o -.-, automaticamente, arma3enar na
&ari&e' superg'oba' =5O68 no :ndice Lp/pM a string >teste@$ 9ote +ue o conteAdo da
&ari&e' est no formato ur'encode$ Hs formu'rios /tm' 1 en&iam informa?es
automaticamente nesse formato, e o -.- decodifica sem necessitar de tratamento pe'o
programador$
$%&encode
H formato ur'encode obtido substituindo os espaos pe'o caracter >B@ e todos
os outros caracteres no a'fa4numricos (com exceo de >5@ pe'o caracter >Z@
seguido do c,digo AF"77 em /exadecima'$
-or exemp'o: o texto >8estando 1 2 3 [[@ em ur'encode fica >8estandoB1B2B3B
Z21Z21@
Vari#veis de am'iente
H -.- possui di&ersas &ari&eis de ambiente, como a =5F6XJ6X no :ndice
-.-5F6P\, por exemp'o, +ue contm o nome e o pat/ do pr,prio ar+ui&o$ A'gumas
outras contm informa?es sobre o na&egador do usurio, o ser&idor /ttp, a &erso do
-.- e di&ersas informa?es$ -ara ter uma 'istagem de todas as &ari&eis e constantes
de ambiente e seus respecti&os conteAdos, de&e4se uti'i3ar a funo p/pinfo($
Verificando o tipo de uma vari#vel
-or causa da tipagem din0mica uti'i3ada pe'o -.-, nem sempre poss:&e' saber
+ua' o tipo de uma &ari&e' em determinado instantes no contar com a a1uda de
a'gumas fun?es +ue a1udam a &erificar isso$ A &erificao pode ser feita de duas
maneiras:
Funo $ue retorna o tipo da #ari"#e%
6sta funo a gett;pe$ Fua assinatura a seguinte:
&ett'pe(=nome5da5&ari&e'#
A funo gett;pe pode retornar as seguintes strings: >integer@, >doub'e@,
>string@, >arra;@, >ob1ect@ e >un]noWn t;pe@$
Funes $ue testam o tipo da #ari"#e%
Fo as fun?es is5int, is5integer, is5rea', is5'ong, is5f'oat, is5string, is5arra; e
is5ob1ect$ 8odas t<m o mesmo formato, seguindo mode'o da assinatura a seguir:
is_inte&er(=nome5da5&ari&e'#
8odas essas fun?es retornam true se a &ari&e' for da+ue'e tipo, e fa'se em
caso contrrio$
Destruindo uma vari#vel
2 poss:&e' desa'ocar uma &ari&e' se e'a no for usada posteriormente atra&s
da funo unset, +ue tem a seguinte assinatura:
unset(=nome5da5&ari&e'#
A funo destr,i a &ari&e', ou se1a, 'ibera a mem,ria ocupada por e'a, fa3endo
com +ue e'a deixe de existir$ Fe mais na frente for feita uma c/amada &ari&e', ser
criada uma no&a &ari&e' de mesmo nome e de conteAdo &a3io$
Verificando se uma vari#vel possui um valor
6xistem dois tipos de teste +ue podem ser feitos para &erificar se uma &ari&e'
est setada: com a funo isset e com a funo empt;$
A funo isset
-ossui o seguinte prot,tipo:
isset(=nome5da5&ari&e'#
6 retorna true se a &ari&e' esti&er setada (ainda +ue com uma string &a3ia ou o
&a'or 3ero, e fa'se em caso contrrio$
A funo empty
-ossui a seguinte assinatura:
empt'(nome5da5&ari&e'#
6 retorna true se a &ari&e' no conti&er um &a'or (no esti&er setada ou
possuir &a'or S (3ero ou uma string &a3ia$ "aso contrrio, retorna fa'se$
Arra(s )ultidimensionais
Arra;s mu'tidimensionais so arra;s simp'es com um dos (ou todos seus
e'ementos sendo outro arra; e assim consecuti&amente$
6xemp'o:
="ampeao[D] C 123^D_`Ga #
=8ricampeao[>casa@] C ="ampeao#
=8ricampeao[>predio@] C 1a1a1a1a#
=Qrasi'[1] C =8ricampeao#
=Qrasi'[2] C >Qicampeao@#
=Qrasi'[>copa@] C =8ricampeao#
=Qrasi'[^] C >8etracampeao@#
=Qrasi'[>mundo@] C >-entacampeao@#
ec/o ="ampeao[D]# EE resu'tar
123^D_`Ga
Arra; simp'es
ec/o =Qrasi'[1][>casa@][D] # EE resu'tar 1a1a1a1a Arra; tridimensiona'
ec/o =8ricampeao[>casa@][D]# EE resu'tar
123^D_`Ga
Arra; bidimensiona'
ec/o =Qrasi'[>copa@][>predio@]# EE resu'tar 1a1a1a1a Arra; bidimensiona'
(. Formu%"rios
Vari#veis *superglo'ais+
H -.- possui &ari&eis externas do tipo bsuperg'oba'b, ou automaticamente
g'oba'$ 7sto significa +ue e'as estaro dispon:&eis em todos os escopos (n:&eis de um
script$ Joc< no precisa fa3er um &%o)a% *_+ome_da_!ari"#e%, para pode acess4'a
dentro de fun?es ou mtodos, como era necessrio conforme &isto anteriormente$
Vari#vel ,-.!/
A &ari&e' =5O68 um arra; de nomes e &a'ores mandados pe'o mtodo .88-
O68$ 7nforma?es mandadas por esse mtodo estaro &is:&eis, sendo mostradas na
barra de endereos do na&egador$ Assim, possui um 'imite de 1SS caracteres$ Nm
exemp'o:
/ttp:EEWWW$W3sc/oo's$comEWe'come$p/pYnomeC\ernandaIidadeC1a
9esse exemp'o, o caracter I funciona como um di&isor, ou se1a, teremos as
seguintes &ari&eis:
=5O68[LnomeM] C \ernanda e =5O68[LidadeM] C 1a
Jeremos mais adiante +ue a &ari&e' =5O68 pode receber dados en&iados em
um formu'rio, porm os dados ficaro &is:&eis na barra do na&egador$
Vari#vel ,-P"0/
A &ari&e' =5-HF8 tambm um arra; de nomes e &a'ores, porm mandados
pe'o mtodo .88- -HF8$ 7nforma?es mandadas por esse mtodo no estaro &is:&eis
na barra de endereos do na&egador$ Assim, no possui 'imite de caracteres$ cados
en&iados de um formu'rio pe'o mtodo -HF8 ficaro arma3enados na &ari&e' =5-HF8
do -.- conforme mostrado abaixo:
=5-HF8[LusuarioM] C \ernanda e =5-HF8[Lsen/aM] C 233GG
6ssas informa?es no ficaro &is:&eis na NXP, como no mtodo O68$ 6sse
mtodo uti'i3ado +uando dese1amos a in&isibi'idade dos dados a serem en&iados em
um formu'rio$
Vari#vel ,-%!1$!0/
A &ari&e' =5X6*N6F8 contm o conteAdo de ambas &ari&eis, =5-HF8 e =5O68$
6'a pode ser usada para receber os dados de um formu'rio en&iado por ambos
mtodos, -HF8 e O68$
$tili2ando formul#rios 3/)&
Ao c'icar num boto >Fubmit@ em um formu'rio .8VP as informa?es dos
campos sero en&iadas ao ser&idor especificado para +ue possa ser produ3ida uma
resposta$ H -.- trata esses &a'ores como &ari&eis, +ue so arma3enadas nas
&ari&eis externas do -.-$ H exemp'o a seguir mostra um formu'rio simp'es em
.8VP:
%/tm'(
%/ead(%tit'e(\ormu'rio%Etit'e(%E/ead(
%bod;(
%form actionCRWe'come$p/pR met/odCRpostR(
9ome: %input t;peCRtextR nameCRnomeR E(
7dade: %input t;peCRtextR nameCRidadeR E(
%input t;peCRsubmitR nameCRen&iarR &a'ueCR6n&iarR E(
%Eform(
%Ebod;(
%E/tm'(
6sse formu'rio contm dois campos texto e um boto do tipo >Fubmit@$
*uando o usurio submeter o formu'rio, os dados sero en&iados para o ar+ui&o
We'come$p/p pe'o mtodo -HF8$ H exemp'o a seguir mostra como pode ser esse
ar+ui&o:
%/tm'(
%/ead(%tit'e(de'come%Etit'e(%E/ead(
%bod;(
%Yp/p
if (=5-HF8[LidadeM] ( 2S !
ec/o (>8 &e'/o /eim >$=5-HF8[LnomeM]#
)
Y(
%Ebod;(
%E/tm'(
9ote +ue ainda temos a &ari&e' =5-HF8[Len&iarM] +ue +uando o usurio c'icar
no boto Submit, essa &ari&e' recebe o value contido ne'a, no exemp'o acima, a string
>6n&iar@$
0elecionando c4digo 3/)&
2 poss:&e' atra&s de c,digo -.-, se'ecionarmos trec/os de c,digo .8VP a ser
mostrado na pgina$ -or exemp'o, podemos ter o formu'rio abaixo:
%/tm'(
%/ead(%tit'e(6xemp'o%Etit'e(%E/ead(
%bod;(
%Y
if ([=5-HF8[ben&iarb] !
Y(

%form actionCR%YC =5F6XJ6X[b-.-5F6P\b] Y(R met/odCRpostR(
9ome: %input t;peCRtextR nameCRnomeR E(
%input t;peCRsubmitR nameCRen&iarR &a'ueCR6n&iarR E(

%Eform(

%Y
)
e'se !
ec/o (RFeu nome R$=5-HF8[bnomeb]#
)
Y(
%Ebod;(
%E/tm'(
9o exemp'o acima, &e1a +ue a ao do formu'rio est definida pe'a &ari&e'
=5F6XJ6X[b-.-5F6P\b] do -.-, assim a pr,pria pgina +ue tratar os dados do
formu'rio en&iados pe'o usurio$ 9esse exemp'o, poss:&e' &er a se'eo +ue
podemos fa3er no pr,prio c,digo .8VP com o condiciona' >if@ do -.-$ H formu'rio
apenas ser mostrado se o usurio no ti&er c'icado no boto >6n&iar@$ cepois de c'icar
apenas ser mostrado o seguinte texto:
Seu Nome 5ome-do-$su#rio
Coo6ies
"oo]ies so mecanismos para arma3enar e consu'tar informa?es nos broWsers
dos &isitantes da pgina$ H -.- atribui coo]ies uti'i3ando a funo set-oo.ie, +ue
de&e ser uti'i3ada antes da tag %/tm'( numa pgina$
H uso de coo]ies no recomendado +uando se trata de informa?es sigi'osas$
Hs dados dos coo]ies so arma3enados no diret,rio de ar+ui&os temporrios do
&isitante, sendo faci'mente &isua'i3ado por pessoas ma' intencionadas$
A'm da opo >aceitar coo]ies@ +ue pode ser desati&ada a +ua'+uer momento
pe'o &isitante$
-ara uma transmisso de dados segura recomend&e' o uso de sess?es(&er
adiante$
Fetcoo]ie(>nome5do5coo]ie@,@seu5&a'or@,@tempo5de5&ida@,@pat/@,@dom:nio@,@conexo
5segura@
9ome5do5coo]ie C 2 o nome +ue, posteriormente, se tornar a &ari&e' e o +ue o
ser&ir de refer<ncia para indicar o coo]ie$
Feu5&a'or C 2 o &a'or +ue a &ari&e' possuir$ 6sse &a'or pode ser de todos
os tipos$
8empo5de5&ida C 2 o tempo, em segundos, +ue o coo]ie existir no computador
do &isitante$ Nma &e3 excedido esse pra3o o coo]ie se apaga de modo irrecuper&e'$
Fe esse argumento ficar &a3io, o coo]ie se apagar +uando o &isitante fec/ar o
broWser$
-at/ C endereo da pgina +ue gerou o coo]ie e automtico
com:nio C dom:nio ao +ua' pertence o coo]ie e automtico
"onexo5segura C 7ndica se o coo]ie de&er ser transmitido somente em uma
conexo segura .88-F$
0ess7o
Fess?es so mecanismos muito parecidos com os tradicionais coo]ies$ Fuas
diferenas so +ue sess?es so arma3enadas no pr,prio ser&idor e no expiram a
menos +ue o programador +ueira apagar a sesso$
6xistem a'gumas fun?es +ue contro'am sess?es e esto deta'/adas no cap:tu'o
>12$Qib'iotecas de fun?es@$
A+ui esto as fun?es de sesso mais usadas$
9ome da funo Argumentos
Fession5start( 9o precisa de argumento
Fession5register( A &ari&e' sem o cifro
Fession5unregister( A &ari&e' sem o cifro
Fession5is5registered( A &ari&e' sem o cifro
H session_destroy() s, de&e ser usado +uando for da &ontade do programador
acabar com todos as sess?es da+ue'e &isitante, portanto muito cuidado com essa
funo$
%e8uire
A funo re$uire p?e o conteAdo de um outro ar+ui&o no ar+ui&o p/p atua',
antes de ser executado$ *uando o interpretador do -.- 'er este ar+ui&o, e'e encontrar
todo o conteAdo dos >re+uirefs@ adicionado no ar+ui&o corrente$
Xe+uire(>nomedoar+ui&o@#
"riando o /bito de usar essa funo, o programador pode &ir a encontrar um
erro de ar+ui&o 1 dec'arado$ -ara e&itar isso recomend&e' +ue sempre +ue a funo
re$uire for uti'i3ada e'a se1a substitu:da pe'a funo re$uire_on-e$
Xe+uire5once(>nome5do5ar+ui&o>#
9nclude
A funo In-%ude seme'/ante U funo re$uire, com a diferena +ue o c,digo
do ar+ui&o inc'u:do processado em tempo de execuo, permitindo +ue se1am usados
>inc'udes@ dentro de estruturas de contro'e como for e /0i%e$
=ar+s C arra;(La1$incM,Ma2$incM,Ma3$incM #
for (=iCS#=i%count(=ar+s# =iBB!
inc'ude(=ar+s[=i]#
)
if (=x CC =;!
inc'ude(=ar+ui&o1#
)
e'se!
inc'ude(=ar+ui&o2#
)
EK
9ote +ue +uando se uti'i3a a funo inc'ude
centro de estruturas necessrio a uti'i3ao das c/a&es
KE
Ar8uivos %emotos
9as fun?es +ue traba'/am com ar+ui&os, poss:&e' uti'i3ar NXPs para acessar
ar+ui&os em outros ser&idores na deb ou no pr,prio ser&idor$
6xemp'o:
Lendo
=f C fopen(>/ttp:EEWWW$p/p$net@,@r@#
if ([=f!
ec/o >6rro ao abrir a NXP$%br(@#
exit#
)
W/i'e ([feof(=f!
=s C fgets(=f,2D_#
ec/o =s#
)
fc'ose(=f#
1s-re#endo
=f C fopen(>ftp:EEuser:sen/agsite@,@W@#
if ([=f!
ec/o >6rro ao abrir a NXP$%br(@#
exit#
)
e'se!
fputs(=f,@texto a ser escrito@#
fputs(=f,@mais texto a ser escrito@#
fputs(=f,@mais texto a ser escrito@#
fputs(=f,@mais texto a ser escrito@#
fputs(=f,@mais texto a ser escrito@#
fc'ose#
)
/ratamento de erros
6xistem +uatro tipos(at a &erso ^$S de erros no -.- para indicar a gra&idade
do erro encontrado ou ocorrido$ 6'es so:
1$ 6rros de fun?es (function errors
2$ A&isos (Warnings
3$ 6rros de processamento (parser error
^$ Hbser&a?es (notice
As mensagens de erro so uma coisa com +ue os programadores de&em prestar
muita ateno, afina' nen/um programador +uer por no ar um sistema +ue +uando o
primeiro &isitante entra aparea uma mensagem de erro$ -ara e&itar essas
incon&eni<ncias use sempre um >g@ antes da cada c/amada as fun?es$ Fe a opo
tra-._errors no ar+ui&o p:p;ini esti&er /abi'itada, a mensagem de erro poder ser
encontrada na &ari&e' g'oba' *p0p_errorms&$
A c/amada da funo ficaria assim:
gstrto'oWer(#
6ssa funo deixaria todos os caracteres em minAscu'o, mas como no foi
passado nen/um argumento essa funo de&eria exibir uma mensagem de erro$
23. 4%asses e O)5etos
Classe
Nma c'asse um con1unto de &ari&eis e fun?es re'acionadas a essas
&ari&eis$ Nma &antagem da uti'i3ao poder usufruir o recurso de encapsu'amento
de informao$ "om o encapsu'amento o usurio de uma c'asse no precisa saber
como e'a imp'ementada, bastando para a uti'i3ao con/ecer a interface, ou se1a, as
fun?es dispon:&eis$ Nma c'asse um tipo e, portanto no pode ser atribu:da a uma
&ari&e'$ -ara definir uma c'asse, de&e4se uti'i3ar a seguinte sintaxe:
c'ass 9ome5da5c'asse !
&ar =&aria&e'1#
&ar =&aria&e'2#
function funcao1 (=par0metro !
EK CCC corpo da funo CCC KE
)
)
"'<eto
"omo foi dito anteriormente, c'asses so tipos, e no podem ser atribu:das a
&ari&eis$ Jari&eis do tipo de uma c'asse so c/amadas de ob1etos, e de&em ser
criadas uti'i3ando o operador neW, seguindo o exemp'o abaixo:
=&ari&e' C neW =nome5da5c'asse#
-ara uti'i3ar as fun?es definidas na c'asse, de&e ser uti'i3ado o operador >4(@,
como no exemp'o:
=&ari&e'4(funcao1(#
A vari#vel ,t:is
9a definio de uma c'asse, pode4se uti'i3ar a &ari&e' =t/is, +ue o pr,prio
ob1eto$ Assim, +uando uma c'asse instanciada em um ob1eto, e uma funo desse
ob1eto na definio da c'asse uti'i3a a &ari&e' =t/is, essa &ari&e' significa o ob1eto +ue
estamos uti'i3ando$
"omo exemp'o da uti'i3ao de c'asses e ob1etos, podemos uti'i3ar a c'asse
conta, +ue define uma conta bancria bastante simp'es, com fun?es para &er sa'do e
fa3er um crdito$
c'ass conta !
&ar =sa'do#
function sa'do( !
return =t/is4(sa'do#
)
function credito(=&a'or !
=t/is4(sa'do BC =&a'or#
)
)
=min/aconta C neW conta#
=min/aconta4(sa'do(# EE a &ari&e' interna no foi
EE inicia'i3ada, e no contm
EE &a'or a'gum
=min/aconta4(credito(DS#
=min/aconta4(sa'do(# EE retorna DS
0u'Classes
Nma c'asse pode ser uma extenso de outra$ 7sso significa +ue e'a /erdar
todas as &ari&eis e fun?es da outra c'asse, e ainda ter as +ue forem adicionadas
pe'o programador$ 6m -.- no permitido uti'i3ar /erana mA'tip'a, ou se1a, uma
c'asse pode ser extenso de apenas uma outra$-ara criar uma c'asse extendida, ou
deri&ada de outra, de&e ser uti'i3ada a pa'a&ra reser&ada extends, como pode ser &isto
no exemp'o seguinte:
c'ass no&aconta extends conta !
&ar =numero#
function numero( !
return =t/is4(numero#
)
)
A c'asse acima deri&ada da c'asse conta, tendo as mesmas fun?es e
&ari&eis, com a adio da &ari&e' =numero e a funo numero($
Construtores
Nm construtor uma funo definida na c'asse +ue automaticamente
c/amada no momento em +ue a c'asse instanciada (atra&s do operador neW$ H
construtor de&e ter o mesmo nome +ue a c'asse a +ue pertence$ Je1a o exemp'o:
c'ass conta !
&ar =sa'do#
function conta ( !
=t/is$sa'do C S#
)
function sa'do( !
return =t/is4(sa'do#
)
function credito(=&a'or !
=t/is4(sa'do BC =&a'or#
)
)
-odemos perceber +ue a c'asse conta agora possui um construtor, +ue inicia'i3a
a &ari&e' =sa'do com o &a'or S$
Nm construtor pode conter argumentos, +ue so opcionais, o +ue torna esta
ferramenta mais poderosa$ 9o exemp'o acima, o construtor da c'asse conta pode
receber como argumento um &a'or, +ue seria o &a'or inicia' da conta$
Ja'e obser&ar +ue para c'asses deri&adas, o construtor da c'asse pai no
automaticamente /erdado +uando o construtor da c'asse deri&ada c/amado$