Você está na página 1de 43

Curso de PHP5 Orientado a Objetos - 1/43

PHP5 Orientado a Objetos


(Bsico)
ndice
Primeira Parte Programao Orientada a Objetos com PHP5
1) Introduo . . . . . . . . . . . . . . . 2
2) Programao Procedural x Orientada a Objetos . . . . . 3
3) Histria do PHP . . . . . . . . . . . . . 4
4) ene!"cios da POO . . . . . . . . . . . . . #
$) %lasse . . . . . . . . . . . . . . . . &
') (i!erenas entre a POO no PHP4 e no PHP$ . . . . . . 13
)) Iniciando com a Programao Orientada a Objetos no PHP$ . . 12
#) *odi!icadores de +cesso . . . . . . . . . . . 1$
&) %onstrutor e (estrutor . . . . . . . . . . . 1)
1,) %onstantes de %lasse . . . . . . . . . . . . 1#
11) Herana - .xtendendo uma %lasse . . . . . . . . 1&
12) /obrescre0endo *1todos . . . . . . . . . . . 2,
13) Polimor!ismo. . . . . . . . . . . . . . . 2,
14) Inter!ace . . . . . . . . . . . . . . . 21
1$) %lasses +bstratas . . . . . . . . . . . . . 22
1') Pro2riedades e *1todos /tatic . . . . . . . . . 23
1)) *1todos +cessores . . . . . . . . . . . . 2'
1#) *1todos *3gicos 2ara as Pro2riedades da %lasse . . 2)
1&) *1todo *3gico 2ara /obrecarregar *1todo de %lasse . . . 2#
2,) 4un5es de In!orma5es sobre %lasses . . . . . . . 2&
21) 6ratamento de .xce5es . . . . . . . . . . . 3$
22) %on0en5es 2ara 7omes . . . . . . . . . . . 3#
23) *odelando %lasses . . . . . . . . . . . . 3#
24) %onceitos . . . . . . . . . . . . . . . 3&
2$) Padr5es de Projeto . . . . . . . . . . . . 41
2') 4erramentas . . . . . . . . . . . . . . 42
2)) 8e!er9ncias . . . . . . . . . . . . . . 43
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - $/43
1) Introduo
+ orientao a objetos 1 atualmente o 2aradigma de 2rogramao mais aceito e considerado
moderno: 2ois a2areceu juntamente dom os 2adr5es de 2rojeto 2ara resol0er 2roblemas da
2rogramao 2rocedural.
+tualmente as em2resas ;ue trabal<am com 2rogramao: ao contratar 2rogramadores esto
exigindo: uma !ormatura ou estudando na 3rea: o con<ecimento de 2rogramao orientada a objetos
e algumas exigem o con<ecimento de um dos bons !rame=or>s.
%on<ecer 2rogramao orientada a objetos: 2adr5es de 2rojeto e bons !rame=or>s 0alori?a
2ro!issionais de 2rogramao.
+ 2rogramao orientada a objetos tem uma grande 2reocu2ao em esconder o ;ue no 1
im2ortante 2ara o usu3rio e em realar o ;ue 1 im2ortante.
+tualmente o PHP$ o!erece um su2orte muito rico em termos de OO.
%om o PHP$ o PHP gan<ou uma com2leta in!raestrutura de orientao a objetos.
+ OO 1 uma 2rogramao toda 0oltada 2ara cdigo modular.
@ale lembrar ;ue orientao a objetos no 1 uma linguagem: mas sim uma !orma de 2rogramar: um
2aradigma: ;ue 1 im2lementado 2or 03rias das linguagens modernas atuais.
Programao Orientada a Objetos A 1 um 2aradigma de an3lise: 2rojeto e 2rogramao de sistemas
de so!t=are baseado na com2osio e interao entre di0ersas unidades de so!t=are c<amadas de
objetos.
.m alguns contextos: 2re!ereAse usar modelagem orientada ao objeto: em 0e? de 2rogramao.
+ an3lise e 2rojeto orientados a objetos t9m como meta identi!icar o mel<or conjunto de objetos
2ara descre0er um sistema de so!t=are. O !uncionamento deste sistema se d3 atra01s do
relacionamento e troca de mensagens entre estes objetos.
7a 2rogramao orientada a objetos: im2lementaAse um conjunto de classes ;ue de!inem os objetos
2resentes no sistema de so!t=are. %ada classe determina o com2ortamento Bde!inido nos m1todos) e
estados 2oss"0eis Batributos) de seus objetos: assim como o relacionamento com outros objetos.
BCi>i21dia).
+;ui !oi 2ercorrido o camin<o in0erso 2ara o a2rendi?ado da Orientao a Objetos em PHP.
Primeiro !oi um curso de um dos mel<ores !rame=or>s em PHP B%a>ePHP): onde eu 2odia criar
com grande !acilidade um a2licati0o em PHP orientado a objetos com bons 2adr5es: examinar o
cdigo e 2rocurar entender. (e2ois: mesmo conseguindo criar a2licati0os em PHPOO: 2ercebi ;ue
2recisa0a sentir terra nos 21s: sentir mais segurana de como as coisas esta0am sendo !eitas: ou
seja: 2recisa0a entender de *@% e tamb1m de Programao Orientada a Objetos. em: agora
c<egou a 0e? do *@% e da base geral c<amada Orientao a Objetos com PHP$.
Dembrando ;ue somente !alo de PHP$ 2or;ue a e;ui2e j3 trabal<a no ' e no mais atuali?a o 4: ;ue
de0e ser abandonado 2or todos: sem contar ;ue no tem a maioria dos recursos abordados a;ui.
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 3/43
2) Programao Procedura ! Orientada a Objetos
PHP 1 <oje uma das mais 2o2ulares linguagens de 2rogramao =eb.
*ais de ',E dos ser0idores =eb rodam +2ac<e com PHP.
Fma das ra?5es da 2o2ularidade do PHP 1 sua baixa cur0a de a2rendi?ado.
Gual;uer um 2ode escre0er cdigo PHP sem seguir nen<uma con0eno e misturar as camadas
de a2resentao com a de negcios. Isso acontecendo em um grande 2rojeto 2or 03rios anos
2ode se trans!ormar em inimagin30el monstro.
+ Programao Orientada a Objetos BPOO) 1 uma boa 2r3tica de 2rogramao 2ara a criao e
gerenciamento de 2rojetos mais !acilmente.
+ POO estimula ;ual;uer linguagem 2ara uma mel<or codi!icao: 2ara mel<or 2er!ormance e
2ara escre0er 2rojetos muito grandes sem se 2reocu2ar muito sobre o gerenciamento.
POO elimina os aborrecimentos e di!iculdades do gerenciamento de grandes a2lica5es.
Identi"icando #asses$ Objetos$ Pro%riedades e &'todos
@ale lembrar ;ue uma classe cont1m atributos e os atributos so 2ro2riedades e m1todos.
6omemos como exem2lo um carroH
Pro2riedades - nImero de 2ortas: cor: 2reo: marca: modelo: ano: etc
*1todos - bu?inar: dirigir: 0irar J es;uerda: 2artir: 2arar: etc
Dembrar tamb1m ;ue classes mani2ulam de!ini5es e objetos mani2ulam 0alores.
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 4/43
() Hist)ria do PHP
*o In+cio
.m 1&&$: 8asmus Derdor! comeou a desen0ol0er o PHPK4I.
.le no imaginou ;ue sua criao acabaria 2or le0ar ao desen0ol0imento do PHP ;ue ns
con<ecemos <oje: ;ue est3 sendo usado 2or mil<5es de 2essoas. + 2rimeira 0erso do LPHPK4IL:
c<amado Personal Home2age 6oolsK 4orm Inter2reter: !oi uma coleo de scri2ts Perl em 1&&$B1).
Fm dos b3sica recursos !oi algo 2arecido com Perl: 2ara mani2ulao de en0ios de !ormul3rios:
mas !altou muitas caracter"sticas Iteis comun em uma linguagem: como laos.
B1) <tt2HKKgrou2s.google.comKgrou2Kcom2.in!osMstems.===.aut<oring.cgiKmsgKcc)d434$4d'4d133N
2liO1
Onde ele anunciou o PHP 6ools Bmensagem <istrica transcrita abaixo)H
*ensagem sobre o t2ico +nnounceH Personal Home Page 6ools BPHP 6ools)
O gru2o no ;ual 0oc9 est3 2ostando 1 um gru2o da Fsenet. +s mensagens 2ostadas neste gru2o
!aro com ;ue o seu eAmail !i;ue 0is"0el 2ara ;ual;uer 2essoa na internet.
%om o objeti0o de 0eri!icao: digite os caracteres ;ue 0oc9 09 na !igura abaixo ou os nImeros ;ue
ou0ir ao clicar no "cone de acessibilidade. Oua e digite os nImeros ;ue ou0ir

Rasmus %erdor"
*ais o25es # jun 1&&$: ,4H,,
6<ese tools are a set o! small tig<t cgi binaries =ritten in %.
6<eM 2er!orm a number o! !unctions includingH
. Dogging accesses to Mour 2ages in Mour o=n 2ri0ate log !iles
. 8ealAtime 0ie=ing o! log in!ormation
. Pro0iding a nice inter!ace to t<is log in!ormation
. (is2laMing last access in!ormation rig<t on Mour 2ages
. 4ull dailM and total access counters
. anning access to users based on t<eir domain
. Pass=ord 2rotecting 2ages based on usersP domains
. 6rac>ing accesses QQ based on usersP eAmail addresses QQ
. 6rac>ing re!erring F8DPs A H66PR8.4.8.8 su22ort
. Per!orming ser0erAside includes =it<out needing ser0er su22ort !or it
. +bilitM to not log accesses !rom certain domains Bie. Mour o=n)
. .asilM create and dis2laM !orms
. +bilitM to use !orm in!ormation in !ollo=ing documents
Here is =<at Mou donPt need to use t<ese toolsH
. Sou do not need root access A install in Mour TK2ublicR<tml dir
. Sou do not need ser0erAside includes enabled in Mour ser0er
. Sou do not need access to Perl or 6cl or anM ot<er scri2t inter2reter
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 5/43
. Sou do not need access to t<e <tt2d log !iles
6<e onlM re;uirement !or t<ese tools to =or> is t<at Mou <a0e
t<e abilitM to execute Mour o=n cgi 2rograms. +s> Mour sMstem
administrator i! Mou are not sure =<at t<is means.
6<e tools also allo= Mou to im2lement a guestboo> or anM ot<er
!orm t<at needs to =rite in!ormation and dis2laM it to users
later in about 2 minutes.
6<e tools are in t<e 2ublic domain distributed under t<e U7F
Public Dicense. Ses: t<at means t<eM are !reeV
4or a com2lete demonstration o! t<ese tools: 2oint Mour bro=ser
atH <tt2HKK===.io.orgKTrasmus
AA
8asmus Derdor!
ras...Wio.org
<tt2HKK===.io.orgKTrasmus
PHP,-I 2
O PHPK4I !oi reescrito em 22 em 1&&): mas na;uele tem2o o desen0ol0imento !oi ;uase
exclusi0amente do 8asmus.
+2s o seu lanamento em no0embro do mesmo ano: +ndi Uutmans e Xee0 /uras>i esbarraram no
PHPK4I: en;uanto 2rocura0am uma linguagem 2ara desen0ol0er uma soluo em com1rcio
eletrYnico como um 2rojeto uni0ersit3rio.
.les descobriram ;ue o PHP K 4I no era to 2oderoso ;uanto 2arecia: e ;ue !alta0am muitas
caracter"sticas comuns.
Fm dos as2ectos mais interessantes incluidos !oi a !orma como o lao =<ile !oi im2lementado. O
analisador l1xico 0arre o scri2t e ;uando encontra a 2ala0raAc<a0e =<ile: ele se lembra da sua
2osio no ar;ui0o. 7o !inal do lao: o 2onteiro do ar;ui0o 2rocurado 0olta ao 2osio sal0a: e o
ciclo com2leto !oi relido e reAexecutado.
PHP (
Xee0 e +ndi decidiram reescre0er com2letamente a linguagem de scri2t.
.les ento !i?eram 2arceria com 8asmus 2ara liberar a 0erso PHP 3: e junto 0eio tamb1m um no0o
nomeH PHPH HM2ertext Pre2rocessor: 2ara en!ati?ar ;ue o PHP era um 2roduto di!erente e no
ade;uado a2enas 2ara uso 2essoal. Xee0 e +ndi tamb1m tin<am concebido e executado
uma no0a extenso da +PI. .sta no0a +PI 2ermitiu !acilmente adicionar no0as extens5es 2ara
reali?ar tare!as como acessar bancos de dados: 0eri!icadores ortogr3!icos e outras tecnologias: o ;ue
atraiu muitos desen0ol0edores ;ue no !a?iam 2arte do L%ore Urou2L 2ara 2artici2ar e contribuir
com o 2rojeto PHP. 7o momento do release 3 do PHP: em Zun<o de 1&&#: a base instalada estimada
em PHP consistia em cerca de $,.,,, dom"nios. PHP 3 de!lagrou o in"cio da descoberta real do
PHP: e !oi o 2rimeira 0erso a ter uma base instalada de mais de um mil<o de dom"nios.
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - &/43
PHP .
7o !inal de 1&&#: Xee0 e +ndi ol<aram 2ara tra?: 2ara os seus trabal<os em PHP 3 e sentiram ;ue
2oderia ter escrito a linguagem de scri2t ainda mel<or: assim comearam a escre0er no0amente o
PHP .n;uanto o PHP 3 !a? continuamente o 2arse dos scri2ts en;uanto executando: PHP 4 0eio
com um no0o 2aradigma de L2rimeiro com2ilar e executar mais tardeL. + eta2a de com2ilao no
com2ila scri2ts PHP em cdigo de m3;uina: mas ao in01s com2ilaAlos em bMte code: ;ue 1 ento
executado 2elo Xend .ngine BXend re2resenta Xee0 e +ndi): o no0o corao do PHP 4. (e0ido a
esta no0a !orma de execuo de scri2ts: o desem2en<o do PHP 4 !oi muito mel<or do ;ue
do PHP 3: com a2enas uma 2e;uena ;uantidade de com2atibilidade com 0ers5es anteriores B4).
.ntre outras mel<orias era uma extenso da +PI mel<orada 2ara mel<or desem2en<o de runAtime:
uma camada de abstrao de ser0idor =eb ;ue 2ermite ao PHP 4 rodar nos mais 2o2ulares
ser0idores =eb: e muito mais. PHP 4 !oi lanado o!icialmente em 22 de maio de 2,,2:
e <oje B2,,4) a sua base instalada j3 ultra2assou 1$ mil<5es dom"nios.
.m 2,,) esta0a com 23 mil<5es.
(etal<es emH <tt2HKK===.2<2.netKusage.2<2
2 <tt2HKKgrou2s.google.comKgrou2sNselmO(n1Z*&.'1tE4,g2u.utcc.utoronto.ca.
3 <tt2HKKgrou2s.google.comKgrou2sNselmOPine.C76.3.&'.&#,','13,'$4.A31)')$IA
1,,,,,E4,s<ell.lerdor!.on.ca.
4 <tt2HKK===.2<2.netKmanualKenKmigration4.2<2.
7o PHP 3: o nImero de 0erso menor Bo d"gito do meio) nunca era usado: e todas as 0ers5es !oram
contadas como 3.,.x. Isso mudou no PHP 4: e os menores nImero de 0erso !oram utili?ados 2ara
designar altera5es im2ortantes na linguagem. + 2rimeiro im2ortante mudana 0eio na 0erso PHP
4.1., B$) ;ue introdu?iu su2erglobals como [ RU.6 e [ RPO/6. /u2erglobais 2odem ser acessados
de dentro de !un5es sem ter ;ue usar a 2ala0ra global. .sse recurso !oi adicionado com o !im de
2ermitir a registerRglobals o2o I7I 2ara ser desligada. registerRglobals 1 um recurso no
PHP ;ue con0erte automaticamente as 0ari30eis de entrada como
LN!oo O barL em <tt2HKK2<2.netKN!ooObar 2ara uma 0ari30el do PHP c<amado [!oo. Por;ue muitas
2essoas no c<ecam entradas de 0ari30eis corretamente: muitas a2lica5es ti0eram brec<as de
segurana: ;ue tornou muito !3cil de burlar a segurana e cdigo de autenticao.
%om a no0a su2erglobals em 0igor: em 22 de abril de 2,,2: !oi o PHP 4.2., lanado com o
registerRglobals desati0ado 2or 2adro. PHP 4.3.,: a Iltima 0erso signi!icati0a do PHP 4: !oi
lanada em 2) de de?embro de 2,,2. .sta 0erso introdu?iu a %ommand Dine Inter!ace B%DI): um
ar;ui0o modi!icado e uma camada de IKO de rede Bc<amada streams): e uma biblioteca U(
em2acotada. .mbora a maioria das adi5es no ti0essem nen<um e!eito real sobre os usu3rios
!inais: a 0erso 2rinci2al !oi se Lbum2edL de0ido Js grandes mudanas no nIcleo do PHP.
PHP 5
Dogo de2ois: a demanda 2or mais recursos comuns na orientao a objetos aumentaram
imensamente: e +ndi surgiu com a id1ia de reescre0er a 2arte de orientao aobjetos da Xend
.ngine. Xee0 e +ndi escre0eram o documento LXend .ngine IIH %aracter"stica: (escri5es e
(esignL B') ;ue iniciou o salto 2ara as discuss5es acaloradas sobre o !uturo do PHP.
.mbora a linguagem b3sica 2ermanecesse a mesmo: muitos caracter"sticas !oram adicionados:
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - '/43
outras cairam e outras !oram alteradas 2ara um PHP $ amadurecido. Por exem2lo: names2aces e
<erana mIlti2la: ;ue !oram mencionadas no documento original: nunca a2areceram no PHP $.
Herana mIlti2la !oi abandonado em !a0or de inter!aces e names2aces !oram abandonadas
com2letamente Bat1 a 0erso $.3). @oc9 2ode encontrar uma lista com2leta dos no0os recursos no
ca2"tulo LO ;ue <3 de no0o no PHP $NL
PHP $ 1 es2erado 2ara manter e at1 aumentar a liderana do PHP no mercado de desen0ol0imento
=eb. 7o s re0oluciona o a2oio a orientao a objetos do PHP: mas tamb1m cont1m muitas no0as
!uncionalidades ;ue o tornam a 2lata!orma de desen0ol0imento =eb !inal. + reescrita das
!uncionalidades do \*D no PHP $: o coloca em 21 de igualdade com outras tecnologias =eb em
algumas 3reas e at1 su2era em outras: es2ecialmente de0ido J no0a extenso /im2le\*D ;ue torna
ridiculamente !3cil de mani2ular documentos \*D. +l1m disso: o no0o /O+P: *M/GDi: e uma
0ariedade de outras extens5es so im2ortantes su2ortes do PHP 2ara tecnologias adicionais.
$ <tt2HKK===.2<2.netKreleaseR4R1R,.2<2.
' <tt2HKK?end.comKengine2KXend.ngineA2.,.2d!.
8e!er9nciaH 6radu?ido com o aux"lio do 6ranslate do Uoogle A
<tt2HKK===.google.com.brKlanguageRtoolsN<lO2tA8
do Pre!3cio do eAboo> PHP $ Po=er Programming A <tt2HKK===.2<2tr.comK2erens
<tt2HKK===.in!ormit.comKcontentKimagesK,1314)14&\Kdo=nloadsK,1314)14&\Rboo>.2d!
Hist)ria da Orientao a Objetos no PHP
Guando o PHP !oi criado ele no im2lementa0a a OO em si.
+2s o PHPK4I: ;uando Xee0: 8asmus e +ndM reescre0eram o core e lanaram o PHP3: !oi
introdu?ido uma muito b3sica orientao a objetos.
Guando o PHP4 !oi lanado as caracter"sticas do OO amadureceram com algumas caracter"sticas
introdu?idas.
*as a e;ui2e reescre0eu o core engine e introdu?iu um modelo de objetos com2letamente no0o no
lanamento do PHP$.
O PHP 1 uma linguagem ;ue nos 2ermite escre0er cdigo em dois saboresH 2rocedural e orientado a
objetos.
Guando escre0emos uma grande a2licao no estilo 2rocedural ele de0er3 !icar ;uase im2oss"0el de
gerenciar a2s algumas 0ers5es.
+ maioria das grandes a2lica5es 1 escrita usando o estilo orientado a objetos.
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - (/43
.) Bene"+cios da POO
+ POO !oi criada 2ara tornar a 0ida dos 2rogramadores mais !3cil.
%om POO 2odemos ;uebrar 2roblemas em 2edaos menores ;ue sero com2arati0amente mais
!3ceis de entender.
O 2rinci2al objeti0o da POO 1H tudo ;ue 0oc9 desejar !a?er: !aa com objetos. Objetos so
basicamente 2e;uenas e discretas 2eas de cdigo ;ue 2odem incor2orar dados e com2ortamento
neles. .m uma 2licao todos os objetos so conectados entre si. .les com2artil<am dados 2ara
resol0er 2roblemas.
A 8eusabilidade A (8S P(onPt 8e2eat Soursel!P A 7o re2ita seu cdigo: mas ao contr3rio reutili?eAo.
A 8e!actoring A 7a <ora de re!a?er !ica mais sim2les: 0isto ;ue temos 2edados menores e mais
sim2les.
A .xtens"0el A Podemos criar no0os objetos a 2artir dos existentes: ;ue <erdam todas as suas
caracter"sticas e adicionar no0as.
A *anutenibilidade A /o !3ceis de manter de0ido a ;ue seus objetosK2artes so 2e;uenos e inclusi0e
2ermitem !acilidade 2ara juntar.
A .!ici9ncia A O conceiro de orientao a objetos 1 atualmente associado a uma mel<or e!ici9ncia
de0ido as suas caracter"sticas.
@3rios 2adr5es de 2rojeto so criados 2ara mel<orar a e!ici9ncia.
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - )/43
5) #asse
] um 2edao de cdigo ;ue cont1m 2ro2riedades e m1todos.
] semel<ante a um arraM: ;ue arma?ena dados c<amados de c<a0es e 0alores.
%lasses so mais ;ue arraMs: 2or ;ue cont1m m1todos. %lasses tamb1m 2odem ocultar e exibir
in!orma5es: o ;ue no 1 2oss"0el 2ara os arraMs.
%lasses tamb1m 2arecem com estruturas de dados e 2odem incor2orar 03rios outros objetos em si.
Orientao a objetos no PHP$ tem grandes di!erenas da POO no PHP4.
/ejamos um e!em%o de casse 0ti e como usar1
^N2<2
KKclass.emailer.2<2
class emailer
_
2ri0ate [sender`
2ri0ate [reci2ients`
2ri0ate [subject`
2ri0ate [bodM`
!unction RRconstructB[sender)
_
[t<isAasender O [sender`
[t<isAareci2ients O arraMB)`
b
2ublic !unction add8eci2ientsB[reci2ient)
_
arraMR2us<B[t<isAareci2ients: [reci2ient)`
b
2ublic !unction set/ubjectB[subject)
_
[t<isAasubject O [subject`
b
2ublic !unction setodMB[bodM)
_
[t<isAabodM O [bodM`
b
2ublic !unction send.mailB)
_
!oreac< B[t<isAareci2ients as [reci2ient)
_
[result O mailB[reci2ient: [t<isAasubject: [t<isAabodM: L4romH _[t<isAasenderbcrcnL)`
i! B[result) ec<o L*ail success!ullM sent to _[reci2ientb^brKaL`
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 1*/43
b
b
b
Na
^N2<2
KK .xem2lo de usoH
[emailer O ne= emailerBLriba!sWgmail.comL)` KK %onsrutor
[emailerAaadd8eci2ientsBLtiagoWriba!s.orgL)` KK +cessando o m1todo e 2assando dados
[emailerAaset/ubjectBL+2enas um teste do %urso PHP$OOL)`
[emailerAa/etodMBLOl3 6iago: como 0ai meu amigoNL)`
[emailerAasend.mailB)`
Na
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 11/43
2) 3i"erenas entre a POO no PHP. e no PHP5
Orientao a objetos em PHP$ tem grande di!erena em relao ao PHP4.
+ POO em PHP4 1 2obre e inteiramente aberta: sem ;ual;uer restrio de uso das 2ro2riedades e
m1todos. 7o 2odemos usar os modi!icadores 2ublic: 2rotected e 2ri0ate 2ara os m1todos e
2ro2riedades.
.m PHP 2odemos encontrar inter!aces mas no recursos como abstract e !inal.
Fma inter"ace 1 uma 2ea de cdigo ;ue ;ual;uer classe 2ode im2lementar e signi!ica ;ue a classe
2recisa ter todos os m1todos declarados na inter!ace. Precisamos im2lementar todos os m1todos ;ue
existem na inter!ace. 7a inter!ace 2odemos declarar a2enas o nome e o ti2o de acesso dos m1todos.
Fma inter!ace s 2ode extender outra inter!ace.
Fma classe abstrata Babstract) 1 onde alguns m1todos 2odem ter algum cor2o tamb1m. .nto
;ual;uer classe 2ode extender esta classe abstrata e extender tamb1m todos os seus m1todos na
classe abstrata.
Fma classe "ina 1 uma classe ;ue no 2odemos extender.
.m PHP$ 2odemos usar todas essas.
.m PHP4 no existe <erana mIlti2la 2or inter!aces.
7o PHP$ mIlti2las <eranas so su2ortadas atra01s da im2lementao de mIlti2las inter!aces.
.m PHP4 ;ual;uer coisa 1 static. Isso signi!ica ;ue se 0oc9 declara ;ual;uer m1todo na classe: 0oc9
2ode c<amar este diretamente sem criar uma instdncia da classe.
Por exem2loH
^N2<2
class +bc
_
0ar [ab`
!unction abcB)
_
[t<isAaab O )`
b
!unction mostrealgoB)
_
ec<o [t<isAaab`
b
b
abcHHmostrealgoB)`
Na
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 1$/43
8odando este cdigo no PHP4 ele !unciona: mas no PHP$ acusa erro: 2ois o t<is no 0ale numa
c<amada static.
*o PHP. no e!iste1
%onstante de classe`
Pro2riedade static`
(estrutor.
.xce2tions
.xiste sobrecarga de m1todos 0ia m1todos m3gicos como RRgetB) e RRsetB) no PHP$.
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 13/43
4) Iniciando com a Programao Orientada a Objetos no PHP5
@amos analisar a classe .mailerH
^N2<2
KKclass.emailer.2<2
class emailer
_
2ri0ate [sender`
2ri0ate [reci2ients`
2ri0ate [subject`
2ri0ate [bodM`
!unction RRconstructB[sender)
_
[t<isAasender O [sender`
[t<isAareci2ients O arraMB)`
b
2ublic !unction add8eci2ientsB[reci2ient)
_
arraMR2us<B[t<isAareci2ients: [reci2ient)`
b
2ublic !unction set/ubjectB[subject)
_
[t<isAasubject O [subject`
b
2ublic !unction setodMB[bodM)
_
[t<isAabodM O [bodM`
b
2ublic !unction send.mailB)
_
!oreac< B[t<isAareci2ients as [reci2ient)
_
[result O mailB[reci2ient: [t<isAasubject: [t<isAabodM: L4romH _[t<isAasenderbcrcnL)`
i! B[result) ec<o L*ail success!ullM sent to _[reci2ientb^brKaL`
b
b
b
Na
6emos a" ;uatro 2ro2riedades: todas com 0isibilidade ti2o 2ri0ate. Isso 1 uma das recomenda5es:
;ue as 2ro2riedades sejam desse ti2o 2ara ;ue ningu1m ten<a acesso a elas diretamente.
Para ter acesso de0emos criar os m1todos getter e setter.
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 14/43
(e2ois temos um m1todo construtor: ;ue recebe um 2ardmetro e retorna o remetente e os
destinat3rios Breci2ients). %ada 0e? ;ue essa classe !or instanciada de0eremos 2assar o remetente
como 2ardmetro e receberemos o mesmo e os destinat3rios.
Obser0e ;ue o m1todo construtor no tem modi!icador de 0isibilidade: 2ortanto assume o 2adro:
;ue 1 2ublic.
(e2ois temos mais ;uatro m1todos: todos 2ublicsH
add8eci2ientsB[reci2ient)
set/ubjectB[subject)
setodMB[bodM)
send.mailB)
Obser0e seus nomes: camel%ase e iniciando com minIsculas.
/e todos os m1todos so 2ublic: signi!ica ;ue ao instanciar essa classe teremos acesso a todos os
m1todos: mas no Js 2ro2riedades da classe: ;ue so 2ri0ate.
+ntes de usar uma classe 2recisamos instanci3Ala. +2s instanciar 2odemos acessar suas
2ro2riedades e m1todos usando o o2erador Aa a2s o nome da instdncia.
@eja o exem2lo de uso abaixo da nossa classe .mailerH
^N2<2
includeRonceBPclass.emailer.2<2P)`
KK .xem2lo de usoH
[emailer O ne= emailerBLriba!sWgmail.comL)` KK %onsrutor
[emailerAaadd8eci2ientsBLtiagoWriba!s.orgL)` KK +cessando o m1todo e 2assando dados
[emailerAaset/ubjectBL+2enas um teste do %urso PHP$OOL)`
[emailerAa/etodMBLOl3 6iago: como 0ai meu amigoNL)`
[emailerAasend.mailB)`
Na
@eja ;ue inclu"mos a classe ;ue 0amos usar na 2rimeira lin<a.
Primeiro criamos uma instdncia c<amada [emailer da classe emailerB) e 2assamos um eAmail como
2ardmetroH
[emailer O ne= emailerBLriba!sWgmail.comL)` KK %onsrutor
7s 2assamos o eAmail como 2ardmetro 2or;ue o construtor da classe recebe um eAmail como
2ardmetro.
%aso no 2assemos 2ardmetro ou 2assemos um nImero di!erente de 2ardmetros 2ara a classe ao
instanciar acontecer3 um erro !atal.
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 15/43
5) &odi"icadores de 6cesso
Os modi!icadores !oram introdu?idos no PHP$. /o 2ala0rasAc<a0es ;ue ajudam a de!inir como
ser3 o acesso das 2ro2riedades e m1todos ;uando algu1m instanciar a classe.
%ri7ate - este modi!icador no 2ermite ser c<amado !ora da classe: mas de dentro da classe 2ode
ser c<amado sem 2roblema ;ual;uer m1todo.
%ubic - este 1 o modi!icador de!ault: o ;ue signi!ica ;ue ;uando um m1todo no ti0er modi!icador
ele ser3 2ublic. Public signi!ica ;ue 2ode ser c<amado de !ora da classe sem 2roblema.
%rotected - somente 2ode ser acessado de uma subclasse: ou seja: de uma classe ;ue extendeu esta.
@amos a um exem2lo do modi!icador 2rotectedH
+brir a classe .mailer e mudar a 2ro2riedade [sender 2ara 2rotectedH
^N2<2
KKclass.emailer.2<2
class .mailer
_
2rotected [sender` KK *udar a;ui
2ri0ate [reci2ients`
2ri0ate [subject`
2ri0ate [bodM`
!unction RRconstructB[sender)
_
[t<isAasender O [sender`
[t<isAareci2ients O arraMB)`
b
2ublic !unction add8eci2ientsB[reci2ient)
_
arraMR2us<B[t<isAareci2ients: [reci2ient)`
b
2ublic !unction set/ubjectB[subject)
_
[t<isAasubject O [subject`
b
2ublic !unction setodMB[bodM)
_
[t<isAabodM O [bodM`
b
2ublic !unction send.mailB)
_
!oreac< B[t<isAareci2ients as [reci2ient)
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 1&/43
_
[result O mailB[reci2ient: [t<isAasubject: [t<isAabodM:L4romH _[t<isAasenderbcrcnL)`
i! B[result) ec<o L*ail success!ullM sent to _[reci2ientb^brKaL`
b
b
b
Na
+gora criar o ar;ui0o class.extendedemailer.2<2 com o cdigoH
^N2<2
class .xtended.mailer extends emailer
_
!unction RRconstructB)_b
2ubic !unction set/enderB[sender)
_
[t<isAasender O [sender`
b
b
Na
+gora testar assimH
^N2<2
includeRonceBLclass.emailer.2<2L)`
includeRonceBLclass.extendedemailer.2<2L)`
[xemailer O ne= .xtendex.mailerB)`
[xemailerAaset/enderBLjoaobritoWjoao.comL)`
[xemailerAaset/ubjectBL6este extendidoL)`
[xemailerAasetodMBLOl3 Zoo: es2ero ;ue esteja tudo bem com 0oc9VL)`
[xemailerAasend.mailB)`
Na
Obser0e ;ue a 2ro2riedade sender no ser3 acess"0el de !ora dessas duas classes.
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 1'/43
8) #onstrutor
O PHP$ tem dois ti2os de construtor: o ;ue usa a 2ala0ra reser0ada RRconstructB) e o com2at"0el
com a 0erso 4 do PHP: ;ue tem o mesmo nome da classe.
Guando acontecer de uma classe ti0er dois construtores: um com RRconstruct e outro com o mesmo
nome da classe: o RRconstruct ser3 usado e o outro ignorado.
@eja o exem2lo a seguir e teste instanciando a classe 4atorialH
^N2<2
KKclass.!actorial.2<2
class 4actorial
_
2ri0ate [result O 1`
2ri0ate [number`
!unction RRconstructB[number)
_
[t<isAanumber O [number`
!orB[iO2` [i^O[number` [iee)
_
[t<isAaresultQO[i`
b
ec<o LRRconstructB) executed. L`
b
!unction !actorialB[number)
_
[t<isAanumber O [number`
!orB[iO2` [i^O[number` [iee)
_
[t<isAaresultQO[i`
b
ec<o L!actorialB) executed. L`
b
2ublic !unction s<o=8esultB)
_
ec<o L4actorial o! _[t<isAanumberb is _[t<isAaresultb. L`
b
b
Na
3estrutor
] o m1todo ;ue ;uando executado destri o objeto: in0ocado 2ela 2ala0raAc<a0e RRdestructB). /er3
in0ocado automaticamente sem2re ao !inal da execuo do scri2t.
.xem2lo de usoH
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 1(/43
!unction RRdestructB)
_
2rint L O objeto !oi destru"do.L`
b
19) #onstantes de #asse
7o PHP$ 2ara criar uma constante de classe usamos a 2ala0ra reser0ada const: +tualmente esta
de0e !uncionar como uma 0ari30el static: a di!erena 1 ;ue ela 1 somente leitura.
@eja este exem2loH
^N2<2
class Cord%ounter
_
const +/%O1` KKMou need not use [ sign be!ore %onstants
const (./%O2`
2ri0ate [=ords`
!unction RRconstructB[!ilename)
_
[!ileRcontent O !ileRgetRcontentsB[!ilename)`
[t<isAa=ords O BarraMRcountR0aluesBstrR=ordRcountBstrtolo=er B[!ileRcontent):1)))`
b
2ublic !unction countB[order)
_
i! B[orderOOsel!HH+/%)
asortB[t<isAa=ords)`
else i!B[orderOOsel!HH(./%)
arsortB[t<isAa=ords)`
!oreac< B[t<isAa=ords as [>eMOa[0al)
ec<o [>eM .L O L. [0al.L^brKaL`
b
b
Na
.xem2lo de uso: com o ar;ui0o =ords.txtH
^N2<2
includeRonceBLclass.=ordcounter.2<2L)`
[=c O ne= Cord%ounterBL=ords.txtL)`
[=cAacountBCord%ounterHH(./%)`
Na
Obser0e ;ue estamos acessando uma 2ro2riedade da classe Cord%ounter B(./%) de !ora sem
2assar 2ela instdncia mas diretamente com o o2erador HH.
.xecute e 0eja ;ue 1 um bom utilit3rio.
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 1)/43
11) Herana ;!tendendo uma #asse
Fma caracter"stica !orte do POO e ;ue 1 uma das mais utili?adas: onde 2odemos criar uma classe
inteiramente no0a 2artindo de uma existente. + no0a classe 2ode 2reser0ar todas as caracter"sticas
da classe 2ai ou 2ode sobrescre09Alas. + no0a classe Bsubclasse) tamb1m 2ode adicionar no0as
!uncionalidades.
7s temos uma classe 2ara en0io de eAmails e agora 2recisamos de uma classe ;ue en0ie eAmails do
ti2o H6*D. 7o 2recisamos criar uma classe inteiramente no0a: 2odemos 2artir da existente e
adicionar a2enas uma !uncionalidade ;ue dar3 su2orte ao H6*D.
^N2<2
class Html.mailer extends emailer
_
2ublic !unction sendH6*D.mailB)
_
!oreac< B[t<isAareci2ients as [reci2ient)
_
[<eaders O P*I*.A@ersionH 1.,P . LcrcnL`
[<eaders .O P%ontentAtM2eH textK<tml` c<arsetOisoA##$&A1P . LcrcnL`
[<eaders .O P4romH _[t<isAasenderbP . LcrcnL`
[result O mailB[reci2ient: [t<isAasubject: [t<isAabodM: [<eaders)`
i! B[result) ec<o LH6*D *ail success!ullM sent to _[reci2ientb^brKaL`
b
b
b
Na
+ classe Html.mailer 1 uma subclasse da classe .mailer
e a classe .mailer 1 uma su2erclasse da classe Html.mailer.
@eja ;ue a classe Html.mailer extendeu a classe .mailer e adicionou um m1todo
sendH6*D.mailB) e 2ode continuar usando todos os m1todos da classe 2ai.
6ertaH caso a subclasse no ten<a construtor ento ser3 in0ocado o construtor da su2erclasse.
7o 2odemos extender mais ;ue uma classe de cada 0e?. Herana mIlti2la somente 1 su2ortada
com inter!aces.
.xem2lo de uso da classe Html.mailerH
^N2<2
includeRonceBLclass.<tmlemailer.2<2L)`
[<m O ne= Html.mailerB)`
KK !a?er outras cosias ...
[<mAasend.mailB)`
[<mAasendH6*D.mailB)`
Na
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - $*/43
12) <obrescre7endo &'todos
Guando se extende uma classe a subclasse 2ode sobrescre0er todos os m1todos da su2erclasse:
desde ;ue eles ten<am modi!icadores 2rotected ou 2ublic. Para isso basta criar um m1todo com o
mesmo nome do ;ue desejamos sobrescre0er. Por exem2lo: se criarmos um m1todo com o nome
send*ail na subclasse H6*D*ailer ele ir3 sobrescre0er o m1todo da su2erclasse. +ssim tamb1m
acontecer3 com as 2ro2riedades. /e criarmos uma 2ro2riedade na subclasse com o mesmo nome de
uma na su2erclasse ela o!uscar3 a da su2erclasse.
Pre7enindo a <obrescrio
/e acontecer ;ue ao criar um m1todo no ;ueremos ;ue ela seja sobrescrito nunca ento de0emos
adicionar o modi!icador "ina a ele: como no exem2loH
2ublic !inal !unction nome*etodoB)
+ssim ao ser extendida esta classe o m1todo no 2oder3 ser sobrescrito.
Pre7enindo %ara no ;!tender uma #asse
+s classes tamb1m tem o mesmo recurso 2ara ;ue no sejam extendidas. Para isso tamb1m usamos
o modi!icador "inaH
!inal class 7ome%lasse
.sta classe no 2oder3 ser extendida.
1() Poimor"ismo
] o 2rinc"2io ;ue 2ermite ;ue classes deri0adas de uma mesma su2erclasse ten<am m1todos iguais
Bmesma assinatura e 2ardmetros) mas com com2ortamentos di!erentes de!inidos em cada uma das
classes . .ste 2rocesso 1 c<amado de 2olimor!ismo. ] o 2rocesso de criar 03rios objetos de uma
classe b3sica es2ec"!ica.
.xem2loH
^N2<2
includeBLclass.emailer.2<2L)`
includeBLclass.extendedemailer.2<2L)`
includeBLclass.<tmlemailer.2<2L)`
[emailer O ne= .mailerBL<asinWsome=<erein.netL)`
[extendedemailer O ne= .xtended.mailerB)`
[<tmlemailer O ne= Html.mailerBL<asinWsome=<erein.netL)`
i! B[extendedemailer instanceo! emailer ) ec<o L.xtended .mailer is (eri0ed !rom .mailer.^brKaL`
i! B[<tmlemailer instanceo! emailer ) ec<o LH6*D .mailer is also (eri0ed !rom .mailer.^brKaL`
i! B[emailer instanceo! <tml.mailer ) ec<o L.mailer is (eri0ed !rom H6*D.mailer.^brKaL`
i! B[<tmlemailer instanceo! extended.mailer ) ec<o LH6*D .mailer is (eri0ed !rom
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - $1/43
.mailer.^brKaL`
Na
%<ecar se classe 1 instdncia de outraH
o2erador instanceo"
1.) Inter"ace
Inter!ace 1 uma classe 0a?ia ;ue cont1m somente as declara5es dos m1todos Bcor2o em branco).
Gual;uer classe ;ue im2lemente uma inter!ace 2recisa conter todas as declara5es dos m1todos.
Fma classe usa uma inter!ace 2assando a 2ala0ra reser0ada Lim2lementsL: assim como uma classe
usa uma classe 2ai 2assando a 2ala0ra reser0ada LextendsL. Dembrando ;ue nas inter!aces 2odemos
a2enas declarar m1todos mas no 2odemos escre0er o cor2o dos m1todos: ;ue obrigatoriamente
2recisam 2ermanecer 0a?ios.
Fsada 2ara criar regras 2ara a criao de no0as classes.
@amos tentar mostrar a necessidade das inter!acesH su2ondo ;ue trabal<amos numa em2resa
coordenando uma e;ui2e de tr9s 2rogramadores e ;ueremos criar uma classe de dri0er 2ara os
bancos de dados: onde usamos tr9s /U(s: *M/GD: Postgre/GD e /GDite e ;ueremos deixar a
cargo de cada 2rogramador um /U(: cada um criando uma classe 2ara o seu.
7s ;ueremos ;ue os 2rogramadores sem2re trabal<em: obrigatoriamente: com dois m1todos:
connect e execute. +" 1 onde entra nossa inter!ace: ;ue conter3 a assinatura dos dois m1todos:
connect e execute: mas os cor2os de2endero de cada /U(: no caso a cargo de um dos
2rogramadores.
@eja nossa inter!aceH
^N2<2
KKinter!ace.dbdri0er.2<2
inter!ace ((ri0er
_
2ublic !unction connectB)`
2ublic !unction executeB[s;l)`
b
Na
%ada 2rogramador criar3 uma classe 2ara seu /U( ;ue de0e im2lementar essa inter!ace e agora
eles usaro os dois m1todos da inter!ace e adicionaro cor2o aos mesmos.
@ejamos um exem2lo do 2rimeiro 2rogramador criando uma classe ;ue im2lementar3 a inter!ace
((ri0erH
^N2<2
KKclass.2ostgres;ldri0er.2<2
class Postgre/GD(ri0er im2lements ((ri0er
_
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - $$/43
b
Na
Obrigatoriamente de0emos de!inir os dois m1todos da inter!ace e atente 2ara o 2ardmetro do
m1todo execute.
15) #asses 6bstratas
/emel<ante Js inter!aces: mas agora os m1todos 2odem conter cor2o e no se im2lementa classes
abstratas: mas ao contr3rio se extende.
Praticamente uma casse abstrata e!iste %ara ser e!tendida.
+bstrair Bsim2li!icar: considerar isoladamente). Fm sistema OO de0e ser um sistema se2arado em
mdulos: !ocando nas 2eas mais im2ortantes e ignorando as menos im2ortantes Bna 2rimeira eta2a)
2ara a construo de sistemas robustos e reus30eis.
.xem2lo sim2lesH
^N2<2
KKabstract.re2ortgenerator.2<2
abstract class 8e2ortUenerator
_
2ublic !unction generate8e2ortB[result+rraM)
_
KK %digo do gerator de relatrios
b
b
Por;ue colocamos um m1todo abstrato nesta classeN Por;ue a gerao de relatrios sem2re en0ol0e
bancos de dados.
^N2<2
includeRonceBLinter!ace.dbdri0er.2<2L)`
includeRonceBLabstract.re2ortgenerator.2<2L)`
class *M/GD(ri0er extends 8e2ortUenerator im2lements ((ri0er
_
2ublic !unction connectB)
_
KK conectar ao /U(
b
2ublic !unction executeB[;uerM)
_
KK .xecutar consulta e mostrar resultado
b
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - $3/43
KK 7o 2recisamos declarar ou escre0er no0amente o m1todo re2ortUenerator a;ui: 2ois !oi
KK extendido da classe abstrata
b
Na
Obser0e ;ue 2odemos im2lementar uma inter!ace e ao mesmo tem2o extender uma classe: como no
exem2lo acima.
6erta
7o 2odemos declarar uma classe abstrata como !inal: 2ois a !inal no 2ode ser extendida e a
abstrata !oi criada 2ara ser extendida.
Guando um m1todo !oi declarado como abstrato isso signi!ica ;ue a subclasse 2recisa sobrescre0er
o m1todo. Fm m1todo abstrato 2ode no conter nen<um cor2o onde 1 de!inido.
(eclarao de um m1todo abstratoH
abstract 2ublic !unction connect(B)`
12) Pro%riedades e &'todos <tatic
Para acessar ;ual;uer m1todo ou 2ro2riedade de uma classe temos ;ue criar uma instdncia: ou seja
usarH [objeto O ne= %lasseB)` (e outra !orma no 2odemos acessar. *as existe uma exceo 2ara
m1todos e 2ro2riedades static. .stes 2odem ser acessados diretamente sem a criao de instdncia.
Fm membro static 1 como um membro global.
Onde utili?amos um m1todo staticN
+ criao de no0os objetos com instdncia 1 algo ;ue 2ode consumir recursos do com2utador e um
m1todo est3tico e0ita isso.
.xem2loH
^N2<2
KK class.dbmanager.2<2
class (*anager
_
2ublic static !unction get*M/GD(ri0erB)
_
KK Instanciar o no0o objeto do (ri0er do *M/GD e retornar
b
2ublic static !unction getPostgre/GD(ri0erB)
_
KK Instanciar o no0o objeto do (ri0er do Postgre/GD e retornar
b
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - $4/43
2ublic static !unction get/GDite(ri0erB)
_
KK Instanciar o no0o objeto do (ri0er do /GDite e retornar
b
b
Na
Podemos acessar ;ual;uer m1todo static usando o o2erador HH ao in01s do Aa.
@ejaH
^N2<2
KK test.dbmanager.2<2
includeRonceBLclass.dbmanager.2<2L)`
[dbdri0er O (*anagerHHget*M/GDB)`
KK agora 2rocessamos oe2ra5es do banco com o objeto [dbdri0er
Na
@eja ;ue usamos o o2erador HH e no 2recisamos criar nen<uma instdncia.
*1todos static geralmente executam uma tare!a e !inali?am a mesma.
6ertaH no 2odemos usar $this com m1todos static. %omo a classe no 1 instanciada ento [t<is
no existe. +o contr3rio 2odemos usar a 2ala0ra reser0ada self.
Fm exem2lo de como a 2ro2riedade static !uncionaH
^N2<2
KKclass.statictester.2<2
class /tatic6ester
_
2ri0ate static [idO,`
!unction RRconstructB)
_
sel!HH[id eO1`
b
2ublic static !unction c<ec>Id4rom/tatic*e<odB)
_
ec<o L%urrent Id 4rom /tatic *et<od is L.sel!HH[id.LcnL`
b
2ublic !unction c<ec>Id4rom7on/tatic*et<odB)
_
ec<o L%urrent Id 4rom 7on /tatic *et<od is L.sel!HH[id.LcnL`
b
b
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - $5/43
[st1 O ne= /tatic6esterB)`
/tatic6esterHHc<ec>Id4rom/tatic*e<odB)`
[st2 O ne= /tatic6esterB)`
[st1Aac<ec>Id4rom7on/tatic*et<odB)` KKreturns t<e 0al o! [id as 2
[st1Aac<ec>Id4rom/tatic*e<odB)`
[st2Aac<ec>Id4rom7on/tatic*et<odB)`
[st3 O ne= /tatic6esterB)`
/tatic6esterHHc<ec>Id4rom/tatic*e<odB)`
Na
/em2re ;ue criamos uma no0a instdncia ela a!eta todas as instdncia 2ois a 2ro2riedade 1 declarada
como static.
*embros static tornam a orientao a objetos no PHP como a antiga 2rogramao 2rocedural. Fse
m1todos static com cuidado.
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - $&/43
14) &'todos 6cessores
*1todos acessores so sim2lesmente m1todos ;ue so de0otados somente a receber e setar o 0alor
de ;ual;uer das 2ro2riedades de classe. ] uma boa 2r3tica acessar o 0alor das 2ro2riedades
indiretamente atra01s dos m1todos acessores.
.xistem dois ti2os de m1todos acessoresH os getters Bretornam 0alor de uma 2ro2riedade) e os
setters Bsetam o 0laor de uma 2ro2riedade).
.xem2loH
^N2<2
KKclass.student.2<2
class /tudent
_
2ri0ate [2ro2erties O arraMB)`
!unction RRgetB[2ro2ertM)
_
return [t<isAa2ro2ertiesf[2ro2ertMg`
b
!unction RRsetB[2ro2ertM: [0alue)
_
[t<isAa2ro2ertiesf[2ro2ertMgOL+uto/et _[2ro2ertMb asH L.[0alue`
b
b
Na
%on0en5esH
setterH
set7omeB)
get7omeB)
.stes m1todos 2odem ajudar a !iltrar a entrada de dados antes de con!igurar no trabal<o.
.xistem m1todos m3gicos ;ue !a?em esse trabal<o de !orma autom3tica e redu?em o trabal<o em
&,E.
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - $'/43
15) &'todos &gicos %ara as Pro%riedades da #asse
O 2rocesso 1 c<amado de sobrecarga de 2ro2riedade.
Os dois m1todos m3gicos so o RRgetB) e o RRsetB).
.xem2loH
^N2<2
KKclass.student.2<2
class /tudent
_
2ri0ate [2ro2erties O arraMB)`
!unction RRgetB[2ro2ertM)
_
return [t<isAa2ro2ertiesB[2ro2ertM)`
b
!unction RRsetB[2ro2ertM: [0alue)
_
return [t<isAa2ro2ertiesB[2ro2ertM)OL+uto/et _[2ro2ertMb asH L.[0alue`
b
b
Na
+gora testandoH
^N2<2
[st O ne= .studanteB)`
[stAaname O L6iagoL`
[stAaemail O LtiagoWriba!s.orgL`
ec<o [stAaname.L^braL`
ec<o [stAaemail`
Na
Guando executamos o cdigo anterior o PHP 2ercebe ;ue no existem 2ro2riedades com nome
name nem email na classe. (esde ;ue as 2ro2riedades no existam ento o m1todo RRsetB) ser3
c<amado atribuindo 0alor 2ara a 2ro2riedade.
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - $(/43
18) &'todo &gico %ara <obrecarregar &'todo de #asse
O m1todo m3gico RRcalB) ajuda a sobrecarregar ;ual;uer m1todo c<amado no contexto do PHP$.
Permite 2ro0er a5es ou retornar 0alores ;uando m1todos inde!inidos so c<amados em um objeto.
69m dois argumentos: o nome do m1todo e um arraM de argumentos 2assado 2ara o m1todo
inde!inido.
.xem2loH
^N2<2
class O0erloader
_
!unction RRcallB[met<od: [arguments)
_
ec<o LSou called a met<od named _[met<odb =it< t<e !ollo=ing arguments ^brKaL`
2rintRrB[arguments)`
ec<o L^brKaL`
b
b
[ol O ne= O0erloaderB)`
[olAaaccessB2:3:4)`
[olAanot+nM*et<odBLbooL)`
Na
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - $)/43
29) -un=es de In"orma=es sobre #asses
get>cass>met?ods
8etorna um 0etor com os nomes dos m1todos de uma determinada classe.
arraM getRclassRmet<ods Bstring nomeRclasse)
.xem2loH
^N2<2
class 4uncionario
_
!unction /et/alarioB)
_
b
!unction Uet/alarioB)
_
b
!unction /et7omeB)
_
b
!unction Uet7omeB)
_
b
b
2rintRrBgetRclassRmet<odsBP4uncionarioP))`
Na
get>cass>7ars
8etorna um 0etor com os nomes das 2ro2riedades e conteIdos de uma determinada
classe. 7ote ;ue so 0alores est3ticos de!inidos na criao da classe.
arraM getRclassR0ars Bstring nomeRclasse)
^N2<2
class 4uncionario
_
0ar [%odigo`
0ar [7ome`
0ar [/alario O $#'`
0ar [(e2artamento O P%ontabilidadeP`
!unction /et/alarioB)
_
b
!unction Uet/alarioB)
_
b
b
2rintRrBgetRclassR0arsBP4uncionarioP))`
Na
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 3*/43
get>object>7ars
8etorna um 0etor com os nomes e conteIdos das 2ro2riedades de um objeto. /o
0alores dindmicos ;ue se alteram de acordo com o ciclo de 0ida do objeto.
arraM getRobjectR0ars Bobject nomeRobjeto)
.xem2loH
^N2<2
class 4uncionario
_
0ar [%odigo`
0ar [7ome`
0ar [/alario O $#'`
0ar [(e2artamento O P%ontabilidadeP`
!unction /et/alarioB)
_
b
!unction Uet/alarioB)
_
b
b
[jose O ne= 4uncionario`
[joseAa%odigo O 44`
[joseAa7ome O PZos1 da /il0aP`
[joseAa/alario eO 1,,`
[joseAa(e2artamento O P4inanceiroP`
2rintRrBgetRobjectR0arsB[jose))`
Na
get>cass
8etorna o nome da classe a ;ual um objeto 2ertence.
string getRclass Bobject nomeRobjeto)
.xem2loH
^N2<2
class 4uncionario
_
0ar [%odigo`
0ar [7ome`
!unction /et/alarioB)
_
b
!unction Uet/alarioB)
_
b
b
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 31/43
[jose O ne= 4uncionario`
ec<o getRclassB[jose)`
Na
get>%arent>cass
8etorna o nome da classe ancestral BclasseA2ai). /e o 2ardmetro !or um objeto:
retorna o nome da classe ancestral da classe J ;ual o objeto 2ertence. /e o 2ardA
metro !or uma string: retorna o nome da classe ancestral da classe 2assada como
2ardmetro.
string getR2arentRclass Bmixed objeto)
Pardmetros (escrio
objeto Objeto ou nome de uma classe.
.xem2loH
^N2<2
class 4uncionario
_
0ar [%odigo`
0ar [7ome`
b
class .stagiario extends 4uncionario
_
0ar [/alario`
0ar [olsa`
b
[jose O ne= .stagiario`
ec<o getR2arentRclassB[jose)`
ec<o LcnL` KK ;uebra de lin<a
ec<o getR2arentRclassBPestagiarioP)`
Na
is>subcass>o"
Indica se um determinado objeto ou classe 1 deri0ado de uma determinada
classe.
boolean isRsubclassRo! Bmixed objeto: string classe)
Pardmetros (escrio
objeto Objeto ou nome de uma classe.
classe 7ome de uma classe ancestral.
.xem2loH
^N2<2
class 4uncionario
_
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 3$/43
0ar [%odigo`
0ar [7ome`
b
class .stagiario extends 4uncionario
_
0ar [/alario`
0ar [olsa`
b
[jose O ne= .stagiario`
i! BisRsubclassRo!B[jose: P4uncionarioP))
_
ec<o L%lasse do objeto Zose 1 deri0ada de 4uncionarioL`
b
ec<o LcnL` KK ;uebra de lin<a
i! BisRsubclassRo!BP.stagiarioP: P4uncionarioP))
_
ec<o L%lasse .stagiario 1 deri0ada de 4uncionarioL`
b
Na
met?od>e!ists
@eri!ica se um determinado objeto 2ossui o m1todo descrito. Podemos 0eri!icar a
exist9ncia de um m1todo antes de executar 2or engano um m1todo inexistente.
boolean met<odRexists Bobject objeto: string m1todo)
Pardmetros (escrio
objeto Objeto ;ual;uer.
m1todo 7ome de um m1todo do objeto.
.xem2loH
^N2<2
class 4uncionario
_
0ar [%odigo`
0ar [7ome`
!unction Uet/alarioB)
_
b
!unction /et/alarioB)
_
b
b
[jose O ne= 4uncionario`
i! Bmet<odRexistsB[jose: P/et7omeP))
_
ec<o PObjeto Zose 2ossui m1todo /et7omeB)P`
b
i! Bmet<odRexistsB[jose: P/et/alarioP))
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 33/43
_
ec<o PObjeto Zose 2ossui m1todo /et/alarioB)P`
b
Na
ca>user>"unc
.xecuta uma !uno ou um m1todo de uma classe 2assado como 2ardmetro. Para
executar uma !uno: basta 2assar seu nome como uma string: e: 2ara executar
um m1todo de um objeto: basta 2assar o 2ardmetro como um arraM contendo na
2osio , o objeto e na 2osio 1 o m1todo a ser executado. Para executar m1todos
est3ticos: basta 2assar o nome da classe em 0e? do objeto na 2osio , do arraM.
mixed callRuserR!unc Bcallbac> !uno f: mixed 2ardmetro f: mixed ...gg)
Pardmetros (escrio
!uno 4uno a ser executada.
2ardmetro PardmetroBs) da !uno.
.xem2loH
^N2<2
KK exem2lo c<amada sim2les
!unction min<a!uncaoB)
_
ec<o Lmin<a !unoV cnL`
b
callRuserR!uncBPmin<a!uncaoP)`
KK declarao de classe
class *in<a%lasse
_
!unction *eu*etodoB)
_
ec<o L*eu m1todoV cnL`
b
b
KK c<amada de m1todo est3tico
callRuserR!uncBarraMBP*in<a%lasseP: P*eu*etodoP))`
KK c<amada de m1todo
[obj O ne= *in<a%lasseB)`
callRuserR!uncBarraMB[obj: P*eu*etodoP))`
Na
cass>e!ists
%<eca se uma classe existe.
^N2<2
includeRonceBLclass.emailer.2<2L)`
ec<o classRexistsBL.mailerL)`
KK 8etorna true se existir e !alse se o contr3rio
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 34/43
Na
+ mel<or maneira de usar a !uno classRexistsB) 1 sem2re antes de instanciar uma classe: c<ecando
2rimeiro se ela existe. .nto se existir instanciamos: caso contr3rio dis2aramos um erro. +ssim !ica
mais est30el.
^N2<2
includeRonceBLclass.emailer.2<2L)`
i!B classRexistsBL.mailerL))
_
[emailer O ne= .mailerBLjoaobritoWjoao.comL)`
belse_
die BL%lasse .mailer no encontradaVL)`
b
Na
get>decared>casses
Procurar classes carregadas atualmente. 8etorna um arraM com as classes carregadas.
^N2<2
includeRonceBLclass.emailer.2<2L)`
2rintRrBgetRdeclaredRclassesB))`
Na
is>a
%<eca o ti2o de uma classe.
^N2<2
class %lassePai
_
b
class 4il<a extends %lassPai
_
b
[cc O ne= 4il<aB)`
i! BisRaB[cc: L4il<aL)) ec<o L.sta classe 1 um objeto do ti2o 4il<aL`
ec<o L^braL`
i! BisRaB[cc: L%lassePaiL)) ec<o L.sta classe 1 um objeto do ti2o %lassePaiL`
Na
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 35/43
21) @ratamento de ;!ce=es
Fm recurso muito im2ortante adicionado no PHP$. %om isso gan<amos um tratamento de erros
mais e!iciente e com mais recursos.
^N2<2
KKclass.db.2<2
errorRre2ortingB.R+DD A .RC+87I7U)`
class db
_
!unction connectB)
_
i! BV2gRconnectBL<ostOlocal<ost 2ass=ordO2ass userOusername dbnameOdbL))
t<ro= ne= .xce2tionBL%annot connect to t<e databaseL)`
b
b
[db O ne= dbB)`
trM _
[dbAaconnectB)`
b
catc< B.xce2tion [e)
_
2rintRrB[e)`
b
Na
Fsando um bloco trM ... catc< 2odemos ca2turar todos os error. Podemos usar blocos dentro de
blocos. @eja um exem2loH
^N2<2
includeRonceBLPU/GD%onnection.xce2tion.class.2<2L)`
includeRonceBLPU/GDGuerM.xce2tion.class.2<2L)`
errorRre2ortingB,)`
class (+D
_
2ublic [connection`
2ublic [result`
2ublic !unction connectB[%onnection/tring)
_
[t<isAaconnection O 2gRconnectB[%onnection/tring)`
i! B[t<isAaconnectionOO!alse)
_
t<ro= ne= PU/GD%onnection.xce2tionB[t<isAaconnection)`
b
b
2ublic !unction executeB[;uerM)
_
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 3&/43
[t<isAaresult O 2gR;uerMB[t<isAaconnection:[;uerM)`
i! BVisRresourceB[t<isAaresult))
_
t<ro= ne= PU/GDGuerM.xce2tionB[t<isAaconnection)`
b
KKelse do t<e necessarM =or>s
b
b
[db O ne= (+DB)`
trM_
[dbAaconnectBLdbnameOgol2o userO2ostgres2L)`
trM_
[dbAaexecuteBLselect Q !rom abcL)`
b
catc< B.xce2tion [;uerMexce2tion)
_
ec<o [;uerMexce2tionAaget*essageB)`
b
b
catc<B.xce2tion [connectionexce2tion)
_
ec<o [connectionexce2tionAaget*essageB)`
b
Na
/e o cdigo no conseguir conectar ao /U( ele ca2tura o erro e exibe a mensagemH
/orrM: couldnPt connect to Postgre/GD ser0er.
/e a conexo !or bem sucedida mas existir 2roblema na consulta: ento exibir3 uma mensagem
ade;uada.
@eja ;ue 2ara uma !al<a na conso usamos o objeto PU/GD%onnection.xce2tion e 2ara a !al<a na
consulta usamos o objeto PU/GDGuerM.xce2tion.
Podemos 2ersonali?ar o desen0ol0imento desses objetos extendendo a classe core .xce2tion do
PHP$. @eja os exem2losH
^N2<2
%lass PU/GD%onnection.xce2tion extends .xce2tion
_
2ublic !unction RRconstructB)
_
[message O L(escul2e: im2oss"0el conectar ao ser0idor do Postgre/GDVL`
2arentHHRRconstructB[message: ,,,,)`
b
b
Na
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 3'/43
+gora a classe PU/GDGuerM.xce2tionH
^N2<2
%lass PU/GDGuerM.xce2tion extends .xce2tion
_
2ublic !unction RRconstructB[connection)
_
2arentHHRRconstructB2gRlastRerrorB[connection): ,)`
b
b
Na
Podemos ca2turar todos os erros como exce2tions: exceto os erros !atais. @eja o cdigoH
^N2<2
!unction exce2tionsRerrorR<andlerB[se0eritM: [message: [!ilename: [lineno) _
t<ro= ne= .rror.xce2tion B[message: ,: [se0eritM: [!ilename: [lineno)`
b
setRerrorR<andlerBPexce2tionRerrorR<andlerP)`
Na
+utorH !joggenWgmail.com no manual do PHP.
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 3(/43
22) #on7en=es %ara *omes
%ada classe de0e !icar em um scri2t 2<2 e somente uma classe
%lasse de nome .mailer !ica no ar;ui0o class.emailer.2<2.
6odos os ar;ui0os em minIsculas e nomes de classes em %amel%ase. 7omes de classes e
ar;ui0os no 2odem ininiar com algarismos.
/ugesto 2ara os 03rios nomesH
class.emailer.2<2
inter!ace.emailer.2<2
abstract.emailer.2<2
!inal.emailer.2<2
A 7omes de 2ro2riedades e m1todos em camel%ase: mas iniciando com minIsculasH send.mailB).
2() &odeando agumas #asses
Pessoa
Pro2riedadesH nome: c2!: altura: endereco: tele!one: u!: cidade
*1todos B!uncionalidades)H nascer: crescer: trabal<ar: sorrir: 2assear
%arros
Pro2riedadesH cor: ano: 2lacas: marca: modelo
*1todosH bu?inar: !uncionar: !rear: 2artir
%om2utadores
Pro2riedadesH 2rocessador: memoria: teclado: gabinete: monitor: ano: !abricante: marca: modelo
*1todosH iniciar: !uncionar: 2rocessar: acessar
%ontas
Pro2riedadesH c2!Rconta: titular: banco: agencia: dataRabertura: saldo: cancelado: sen<a
*1todosH abrir: encerrar: de2ositar: debitar: obterRsaldo
Obser0e ;ue algumas classes se relacionam com outras: como 1 o caso de 2essoa com contas:
atra01s da 2ro2riedade c2! e c2!Rtitular.
(icaH Obser0e tamb1m ;ue cada classe de0e lidar com a2enas um assunto.
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 3)/43
2.) #onceitos OO
#asse - uma classe 1 um tem2late 2ara a criao de objetos. + classe cont1m o cdigo ;ue de!ine
como os objetos de0em se com2ortar e interagir com os demais objetos ou consigo mesmo. %ada
0e? ;ue criamos um objeto de uma classe e <erdando tudo ;ue !oi 2lanejado na classe.
Objeto - um objeto 1 criado ;uando instanciamos uma classe. + classe 1 a2enas o modelo: o ;ue
usamos 2ra 0aler so os objetos.
Instanciar A 1 o ato de criar um objeto de uma classe. 7este momento c<amaAse o construtor da
classe instanciada. ] executado assimH [objeto O ne= 7ome%lasseB)`
Pro%riedade - so similares Js 0ari30eis: mas 2ertencem a uma classe. O PHP no c<eca o ti2o das
2ro2riedades.
&'todo - so semel<antes Js !un5es mas 2ertencem a uma classe.
&embros - *embros de uma classe so suas 2ro2riedades e m1todos.
#onstrutor - 1 o m1todo da classe ;ue 1 automaticamente executado sem2re ;ue se instancia uma
classe.
3estrutor - 1 o m1todo ;ue ;uando executado destri o objeto: in0ocado 2ela 2ala0raAc<a0e
RRdestructB). /er3 in0ocado automaticamente sem2re ao !inal da execuo do scri2t.
Herana - O 2rocesso c<a0e de deri0ar um objeto de uma classe 1 c<amado de <erana. + classe
;ue extende a outra 1 c<amada de subclasse e deri0a todas as 2ro2riedades e m1todos da su2erclasse
Bclasse extendida). + subclasse ento 2oder3 2rocessar cada m1todo da su2erclasse.
e!tends - 2ala0ra reser0ada usada ;uando uma classe <erda de outra: di?Ase ;ue ela extendeu a
outra: ou seja %lasse/ub extends %lasse/u2er.
Inter!ace A
+bstrata
;nca%suamento A .nca2sulamento 1 o mecanismo ;ue liga o cdigo aos dados ;ue ele mani2ula e
mant1m tanto a sal0o de inter!er9ncia externa e uso inde0ido. O !ec<amento de dados e m1todos em
uma Inica unidade Bc<amada classe) 1 con<ecido como enca2sulamento. O bene!"cio do
enca2sulamento 1 ;ue executa tare!as no interior sem 2reocu2a5es.
6co%amento - ] a de2end9ncia e interde2end9ncia entre classes. Guanto menos aco2lamento
mel<or.
Poimor"ismo - ] o 2rinc"2io ;ue 2ermite ;ue classes deri0adas de uma mesma su2erclasse ten<am
m1todos iguais Bmesma assinatura e 2ardmetros) mas com com2ortamentos di!erentes de!inidos em
cada uma das classes . .ste 2rocesso 1 c<amado de 2olimor!ismo. ] o 2rocesso de criar 03rios
objetos de uma classe b3sica es2ec"!ica. .
/etter A
Uetter
t?is - t<is signi!ica uma re!er9ncia 2ara a atual instdncia deste objeto. O t<is tanto d3 acesso Js
2ro2riedades ;uanto aos m1todos. [t<isAabodM e [t<isAaset/ubjectB). O t<is somente 1 03lido no
esco2o de m1todos ;ue no sejam static.
se" A usado 2ara acessar membros static e const de dentro da classe. Para as demais usaAse t<is.
11 A o2erador usado 2ara acessar membros static Binclusi0e const) no lugar de Aa.
AB A o2erador utili?ado 2ara acessar membros de uma classe: exceto static.
<obrescre7er,O7erCriting A .m um objeto deri0ado 2odemos sobrescre0er ;ual;uer um dos
m1todos <erdados: desde ;ue sejam
declarados como 2rotected ou 2ublic e executem alguma coisa como desejamos. /im2lesmente crie
um m1todo com o mesmo nome do ;ue deseja sobrescre0er.
.xem2loH
+ classe /end*ail tem um m1todo en0iar.mailB). O objeto [objmail criado desta classe <erdar3
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 4*/43
este m1todo. Gueremos ;ue o m1todo ten<a um com2ortamento di!erente ento criamos um no0o
m1todo no objeto com o mesmo nome do objeto da classe 2ai: o ;ue signi!ica sobrescre0er o
m1todo da classe 2ai.
<obrecarregar,O7eroading A 6anto c<amada de m1todos e acesso a membros 2odem ser
sobrecarregados 2elos
m1todos RRcall: RRget e RRset. .sses m1todos s sero dis2arados ;uando seu objeto
ou o objeto <erdado no conti0er o membro 2ublic ou m1todo ;ue 0oc9 est3 tentando
acessar. 6odos os m1todos sobrecarregados de0em ser de!inidos est3ticos. 6odos os
m1todos sobrecarregados de0em ser de!inidos 2ublic.
+ 2artir do PHP $.1., tamb1m 1 2oss"0el sobrecarregar as !un5es issetB) and unsetB)
atra01s dos m1todos RRisset e RRunset res2ecti0amente. O m1todo RRisset tamb1m 1
c<amado com a !uno em2tMB).
/obrecarga de membros
0oid RRset B string [name : mixed [0alue )
mixed RRget B string [name )
bool RRisset B string [name )
0oid RRunset B string [name )
*embros de classes 2odem ser sobrecarregados 2ara executar cdigo es2ec"!ico
de!inido na sua classe de!inindo esses m1todos es2ecialmente nomeados. O
2ardmetro [name usado 1 o nome da 0ari30el ;ue de0e ser con!igurada ou
recu2erada. O 2ardmetro [0alue do m1todo RRsetB) es2eci!ica o 0alor ;ue o objeto
de0e atribuir J 0ari30el [name.
7otaH O m1todo RRsetB) no 2ode obter argumentos 2or re!er9ncia.
im%ements - 2ala0raAc<a0e usada ;uando uma no0a classe 0ai im2lementar uma inter!ace.
neC A ] utili?ada 2ara criar no0os objetos de uma classe. [obj O ne= PessoaB)H
Os 2ar9ntesis ao !inal do nome da classe LPessoaB)h so o2cionais: mas recomendados 2ara tornar o
cdigo mais claro.
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 41/43
25) Padr=es de Projeto (3esign Patterns)
In0entados 2ela Uangue dos Guatro BUang o! 4our - Uo4). 4oram criados 2ara solucionar
conjuntos de 2roblemas similares de !orma inteligente. Os 2adr5es de 2rojeto 2odem incrementar a
2er!ormance dos a2licati0os com cdigo m"nimo. +lgumas 0e?es no 1 2oss"0el a2licar os design
2atterns. (esnecess3rio e no 2lanejado uso dos (P 2ode tamb1m degradar a 2er!ormance de
a2licati0os.
Padr=es Do-
Os 2adr5es LUo4L so organi?ados em !am"lias de 2adr5esH de criao: estruturais e
com2ortamentais. Os 2adr5es de criao so relacionados J criao de objetos: os estruturais tratam
das associa5es entre classes e objetos e os com2ortamentais das intera5es e di0is5es de
res2onsabilidades entre as classes ou objetos.
Fm 2adro LUo4L tamb1m 1 classi!icado segundo o seu esco2oH de classe ou de objeto. 7os
2adr5es com esco2o de classe os relacionamentos ;ue de!inem este 2adro so de!inidos atra01s de
<erana e em tem2o de com2ilao. 7os 2adr5es com esco2o de objeto o 2adro 1 encontrado no
relacionamento entre os objetos de!inidos em tem2o de execuo.
Padr5es LUo4L organi?ados nas suas !am"liasH
Padr=es de criao
+bstrat Fator,
-ui.der
Fator, /ethod
Protot,pe
Sin#.eton
Padr=es estruturais
+dapter
-rid#e
Composite
0eorator
Fa1ade
F.,2ei#ht
Pro3,
Padr=es com%ortamentais
Chain o" Responsibi.it,
Command
4nterpreter
4terator
/ediator
/emento
Obser5er
State
Strate#,
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 4$/43
6emp.ate /ethod
7isitor
Ci>i21dia A <tt2HKK2t.=i>i2edia.orgK=i>iKPadrE%3E$esRdeR2rojetoRdeRso!t=are
+2enas 2ara citar alguns dos 2adr5es de 2rojeto.
O 2adro de 2rojeto mais comum <oje 1 o *@%.
22) -erramentas %ara @raba?ar com PHP Orientado a Objetos
I3;s %ara %rogramao com PHP
;ci%se P3@
<tt2HKK===.ecli2se.orgK2dtK
<tt2HKK===.ecli2se.orgK2dtKarticlesKdebuggerKosA2<2Aecli2seA2dtAdebugA2d!.2d!
*etBeans "or PHP
<tt2HKK===.netbeans.orgKdo=nloadsKindex.<tml
-erramentas %ara traba?ar com E&F em PHP
Fmbrello A gera cdigo PHP A !or Dinux Bi(.) A <tt2HKKuml.source!orge.netK
+rgoF*D A <tt2HKKargouml.tigris.orgK
(I+ A <tt2HKK2rojects.gnome.orgKdiaK
/tartF*D A <tt2HKKstaruml.source!orge.netKenK
F*D na Ci>i2edia A <tt2HKKen.=i>i2edia.orgK=i>iKDistRo!RF*DRtools
6utorial %reating Fse %ase (iagrams A <tt2HKK===.de0elo2er.comKdesignKarticle.2<2K21,&#,1
Poseidon A <tt2HKK===.gentle=are.comK2roducts.<tml
@erso 2ara a comunidadeH
Q (o=nload t<e so!t=are. A <tt2HKK===.gentle=are.comKdo=nloadcenter.<tml
(ocumentao das classes com o PHP (ocumentor A <tt2HKK===.2<2doc.orgK
O PHP (ocumentor ou 2<2doc 1 uma !erramenta de gerao autom3tica de documentao 2ara
cdigo PHP documentado de !orma ade;uada. .le 1 similar ao Za0a(oc.
@eja no diretrio (ocumentacao como usar o PHP (ocumentor 2ara documentar as classes em PHP.
Ribamar FS http://ursos!riba"s!or#
Curso de PHP5 Orientado a Objetos - 43/43
24) Ge"erHncias
Fi7ro ObjectAOriented Programming Cit? PHP5
+utor A Hasin HaMder
.ditora - Pac>t Publis<ing A <tt2HKK===.2ac>t2ub.com
%digo de .xem2lo A <tt2HKK===.2ac>t2ub.comKsu22ortK
;AbooI PHP 5 PoCer Programming
+utores A +ndi Uutmans: /tig /jt<er a>>en: and (eric> 8et<ans
.ditora A P8.76I%. H+DD - <tt2HKK===.2<2tr.com
Fi7ro Programando com Orientao a Objetos
%a2"tulo 1 de desmonstrao
+utor A Pablo (allkOglio
.ditora - 7o0atec - <tt2HKK===.no0atec.com.br
6%icati7o em PHPOO %ara a criao de um Bog
+baixo um timo exem2lo de a2licao sim2les criada com PHPOO e bem comentada: inclusi0e
com cdigo !onte 2ara do=nloadH
<tt2HKKnet.tuts2lus.comKne=sK<o=AtoAcreateAanAobjectAorientedAblogAusingA2<2K
4ontesH <tt2HKKnettuts.s3.ama?ona=s.comK,&)RPHPlogK/im2lelog4iles.?i2
Bom @utoria sobre PHP Orientado a Objetos
<tt2HKK===.2<2ro.orgKtutorialsKObjectAOrientedAProgrammingA=it<APHP.<tml
Ribamar FS http://ursos!riba"s!or#

Você também pode gostar