(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#