Академический Документы
Профессиональный Документы
Культура Документы
comPHP
PabloDallOglio
ovatec
CAPTULO1
IntroduoaoPHP
Persistirnaraivacomoapanharumpedaodecarvoquentecomaintenodeoatiraremalgum.semprequemlevantaapedraquesequeima.
Buda
Opresentecaptulorealizaumaintroduosobreasdiversasfunes,comandose
estruturasdecontrolebsicosdalinguagemPHP,quesopossivelmenteutilizados
aolongodolivro.Conheceremosasestruturasbsicasdalinguagem,suasvariveis
eseusoperadoresetambmumconjuntodefunesparamanipulaodearquivos,
dearrays,debancosdedados,dentreoutros.
OqueoPHP?
AlinguagemdeprogramaoPHP,cujalogomarcaapresentadanagura1.1,foi
criadanooutonode1994porRasmusLerdorf.NoincioeraformadaporumconjuntodescriptsvoltadoscriaodepginasdinmicasqueRasmusutilizavapara
monitoraroacessoaoseucurrculonainternet.medidaqueessaferramentafoi
crescendoemfuncionalidades,RasmustevedeescreverumaimplementaoemC,
quepermitiaqueaspessoasdesenvolvessemdeformamuitosimplessuasaplicaes
paraweb.RasmusnomeouessaversodePHP/FI(PersonalHomePages/FormsInterpreter)edecidiudisponibilizarseucdigonawebem1995paracompartilh-locom
outraspessoas,bemcomoreceberajudaecorreodebugs.
Figura1.1LogodoPHP.
Emnovembrode1997,foilanadaasegundaversodoPHP.Nessemomento,aproximadamente50mildomnios,ou1%dainternet,utilizavamPHP.Nomesmoano,
AndiGutmanseZeevSuraski,doisestudantesqueutilizavamPHPemumprojeto
acadmicodecomrcioeletrnico,resolveramcooperarcomRasmusparaaprimorar
oPHP.Paratal,reescreveremtodoocdigo,combasenoPHP/FI2,nascendoassimo
16
30
CriandoRelatrioscomPHP
Estruturasdecontrole
IF
Oumaestruturadecontrolequeintroduzumdesviocondicional,ouseja,um
desvionaexecuonaturaldoprograma.Casoacondiodadapelaexpressoseja
satisfeita,entoseroexecutadasasinstruesdoblocodecomandos.Casoacondionosejasatisfeita,oblocodecomandossimplesmenteignorado.Ocomando
podeserlidocomo.
:utilizadoparaindicarumnovoblocodecomandosdelimitadopor,caso
acondiodonosejasatisfeita.Podeserlidocomocasocontrrio.Autilizao
doopcional.
Nagura1.2,vejaumuxogramaexplicandoofuncionamentodocomando.Caso
aavaliaodaexpressosejaverdadeira,oprogramaparteparaaexecuodeum
blocodecomandos,casosejafalsa,parteparaaexecuodoblocodecomandos
dadapelo.
Figura1.2FluxodocomandoIF.
Exemplo:
Captulo1IntroduoaoPHP
51
Exemplo:
Resultado:
Manipulaodearrays
AmanipulaodearraysnoPHP,semdvida,umdosrecursosmaispoderosos
dalinguagem.Oprogramadorqueassimilarbemessaparte,termuitomaisprodutividadenoseudiaadia.IssoporqueosarraysnoPHPservemcomoverdadeiros
contineres, servindo para armazenar nmeros, strings, objetos, entre outros, de
formadinmica.Almdisso,oPHPnosofereceumagamaenormedefunespara
manipul-los,vistasaseguir.
Criandoumarray
Arrayssoacessadospormeiodeumaposio,comoumndicenumrico.Paracriar
umarray,podemosutilizarafuno.
ou
Outraformadecriarumarraysimplesmentelheadicionandovalorespormeioda
seguintesintaxe:
De qualquer forma, para acessar o array indexado, basta indicar seu ndice entre
colchetes:
CAPTULO2
Objetosebancosdedados
Estecaptuloabordaraorientaoaobjetospormeiodeexemplosqueincluam
conceitosbsicoscomoavisibilidade,aherana,entreoutrostpicosimportantes
paraacontinuidadedaleituradolivro.Almdaorientaoaobjetos,estecaptulo
examinartambmotratamentodeexceeseoacessoabancosdedadosdemaneira
estruturadaetambmorientadaaobjetos,utilizandoabibliotecaPDO.
OrientaoaObjetos
Aorientaoaobjetosumparadigmadeprogramaoquerepresentaumalosoa
paraconstruodesistemas.Nolugardemodelarestruturasdedadoseconstruir
umsistemaformadoporumconjuntodeprocedimentos,comosefaziaemlinguagensestruturadas(Cobol,C,Clipper,Pascal),naorientaoaobjetosmodelamos
econstrumososistemautilizandoobjetos,quesoentidadesquetmatributos,
comportamento, relacionamentos e que representam uma viso de sistema mais
prximadomundoreal.
AorientaoaobjetosabordadacommaiorprofundidadenolivroPHPProgramando
comOrientaoaObjetos,domesmoautor,NovatecEditora.
Introduo
Aotrabalharmoscomaorientaoaobjetos,fundamentalentenderoconceitode
classeseobjetos.Umaclasseumaestruturaestticaquedeneumtipodedados.
Umaclassepodeconteratributos(variveis)etambmfunes(mtodos)paramanipularessesatributos.Nesteexemplo,declaramosaclassecomquatroatributos.
Osatributossovariveisqueexistemdentrodocontextodeumobjeto.Declaramos
atributospormeiodapalavrachave,entreoutrasvistasmaisadiante.
59
71
Captulo2Objetosebancosdedados
Herana
Autilizaodaorientaoaobjetoseoencapsulamentodocdigoemclassesnos
orientamemdireoaumamaiororganizao.Masumdosmaioresbenefciosque
encontramosnautilizaodesseparadigmaoreuso.Apossibilidadedereutilizar
partesdecdigojdenidasoquenosdmaioragilidadenodiaadia,almde
eliminaranecessidadedeeventuaisduplicaesoureescritasdecdigo.
Quandofalamosemherana,aprimeiraimagemquenosaparecenamemriaa
de uma rvore genealgica com avs, pais, lhos e as caractersticas transmitidas
geraoapsgerao.Oquedevemoslevaremconsideraosobreaheranaem
orientaoaobjetosocompartilhamentodeatributosecomportamentosentre
as classes de uma mesma hierarquia (rvore).As classes inferiores da hierarquia
automaticamenteherdamtodasaspropriedadesemtodosdasclassessuperiores,
chamadasdesuperclasses.
Esserecursotemumaaplicabilidademuitogrande,vistoquerelativamentecomum
termosdecriarnovasfuncionalidadesemsoftware.Aoutilizarmosaherana,em
vezdecriarmosumaestruturatotalmentenova(umaclasse),podemosreaproveitar
umaestruturaexistente,quenosforneaumabaseabstrataparaodesenvolvimento,
provendorecursosbsicosecomuns.
J criamos a classe , agora podemos aproveitar seu cdigo para criar classes
maisespeccascomo e ,comonodiagramaapresentado
nagura2.4.
Figura2.4Heranadeclasses.
92
CriandoRelatrioscomPHP
PDOPHPDataObjects
OPHP,emsuamaioria,umprojetovoluntriocujoscolaboradoresestodistribudosgeogracamenteaoredordetodooplaneta.Comoresultado,oPHPevoluiu
combaseemnecessidadesindividuaispararesolverproblemaspontuais,movidospor
razesdiversas.Porumlado,essascolaboraeszeramoPHPcrescerrapidamente,
poroutro,geraramumafragmentaodasexensesdeacessobasededados,cada
qualcomsuaimplementaoparticular,nohavendorealconsistnciaentreasinterfacesdelas(Oracle,MySQL,PostgreSQL,SqlServeretc.).
Em razo da crescente adoo do PHP, tornou-se necessrio unicar o acesso s
diferentes extenses de bancos de dados presentes no PHP.Assim surgiu o PDO
(PHPDataObjects)cujoobjetivoproverumaAPIlimpaeconsistente,unicando
amaioriadascaractersticaspresentesnasextensesdeacessoabancodedados.
OPDOnoumabibliotecacompletaparaabstraodoacessobasededados,uma
vezquenofazaleituranematraduodasinstruesSQL,adaptando-asaosmais
diversosdriversdebancosdedadosexistentes.Simplesmenteunicaachamada
demtodos,delegando-osasuasextensescorrespondentes,efazusodoquehde
maisrecenteemtermosdeorientaoaobjetospresentenoPHP5.
Paraconectarembancosdedadosdiferentes,anicamudananastringdeconexo.
Vejaaseguiralgunsexemplosnosmaisdiversosbancosdedados.
Banco
SQLite
FireBird
MySQL
Postgres
StringdeConexo
JnoWindows,habilitamosdaseguinteforma:
CAPTULO3
Bibliotecasutilizadas
Apreguiaamedoprogresso.Seohomemnotivessepreguiadecaminhar,noteriainventadoaroda.
MarioQuintana
Nestecaptulo,abordaremosasprincipaisbibliotecasutilizadasaolongodolivro.
Oobjetivoinicialconhecerasbibliotecasesuasdiversascaractersticas,sem,no
entanto,tratardiretamentedageraoderelatrios,queservistademaneirasegmentadanosprximoscaptulos.Dentreasbibliotecasutilizadas,veremosagerao
dearquivosnosformatosHTML,PDFeRTF,almdageraodegrcosgerenciais.
GeraonoformatoHTML
HTML(HyperTextMarkupLanguage)aprincipallinguagemparaformataode
pginasweb.Propostaoriginalmentenoinciodosanosde1990porTimBerners-Lee,
utilizadaparaproduzirdocumentosinterpretadospelosnavegadores.Alinguagem
permitecriardocumentosestruturadospormeiodeumaestruturasemnticacontendoelementoscomocabealhos,pargrafos,listas,links,imagens,entreoutrositens.Os
elementossoformadosportagsoumarcadoresdelimitadospelossmbolose.
Introduo
Sevocprogramaemalgumalinguagemparawebhalgumtempo,deveterpercebidooquantoaexibiodetagsHTMLdeixaocdigoconfusoepoucolegvel
quandotemosdeconcatenarexpressesquemesclamcdigoHTMLevariveisda
aplicaoPHP.
Aolongodestaseo,criaremosalgumasclassesvoltadasapresentaodeelementos
HTML.Oobjetivodessasclassessubstituirautilizaodastagspresentesnocdigo
HTMLporclasseseseusmtodos,podendoconstruirumapginaHTMLpormeio
deobjetos,emquecadaumdelesrepresentarumelementogrco(texto,imagem,
tabela), como na gura 3.1, na qual temos uma pequena pgina contendo alguns
elementos,comoumpargrafo,umboto,umaimagem,umatabela,entreoutros.
103
Captulo3Bibliotecasutilizadas
123
GeraonoformatoPDF
Nestaseo,estudaremoscomogerardocumentosnoformatoPDFemPHP.PDF
(PortableDocumentFormat)umformatodearquivoscriadopelaAdobeSystems
em1993, com o objetivo de permitir a representao de documentos de maneira
independentedesofware,hardwareousistemaoperacional.UmdocumentoPDF
contmumadescriocompletadeumlayoutdedocumentoxo,queincluielementos
textuais,fontes,imagensegrcos2D.Originalmenteproprietrio,oformatoPDF
foiocialmentepublicadocomoumpadroabertoem1998pelaISO(International
OrganizationforStandardization).Atualmentequalquerpessoapodeescreveraplicativos
quemanipulamarquivosnesseformato.OformatoPDFsuportadopordiversosaplicativoscomoAdobeReadereFoxitReaderemWindowseEvinceeKPDFemLinux.
138
CriandoRelatrioscomPHP
procuraexibirumagrandequantidadedetextopormeiodarepetiodastringteste
milvezes.Dessaforma,serocriadastrspginasdodocumento,contendoessastring,
comocabealhoeosrodaps.Agura3.13apresentaoresultadodoprograma.
Figura3.13ManipulaodecabealhoserodapsemPDF.
fpdf5.php
Captulo3Bibliotecasutilizadas
139
GeraonoformatoRTF
Nestaseo,estudaremoscomogerardocumentosnoformatoRTFemPHP.RTF(Rich
TextFormat)umformatodearquivospararepresentardocumentosdesenvolvido
pelaMicrosoftCorporationem1987.OobjetivodoformatodearquivosRTFeraser
utilizadocomoformato-padrodearquivosnosprodutosdaMicrosoft,bemcomo
permitirointercmbiodedocumentosentrediferentesplataformas.Foiutilizado
pelaprimeiravezcomopartedoMicrosoftWord3.Almdemanteroformato,a
MicrosofttemosdireitosdepropriedadeintelectualsobreopadroRTF.Talformato
suportadopelamaioriadoseditoresdetexto,comoWordPadeMicrosoftWordno
Windows,TextEditnoMacOS,almdoAbiWordeOpenOcenoLinux.
Introduo
ParagerardocumentosnoformatoRTFemPHP,utilizaremosabibliotecaPHPRtfLite
(http://phprtf.sf.net),queformadaporumconjuntodeclassescomoobjetivode
construir documentos no formato RTF. Essas classes abrangem a construo de
pginas,sees,cabealhos,rodaps,pargrafos,imagens,tabelas,entreoutrositens.
AbibliotecaPHPRtfLitenotemcomopr-requisitosextensesououtrasbibliotecas.Dessaforma,podeserutilizadaapartirdequalquerinstalaobsicaPHP.
Odesenvolvimentodessabibliotecarelativamenterecente(2007),entretantotem
demonstradoserconsistentecomaconstruodedocumentosemaplicaescomerciais.AbibliotecaPHPRtfLitedisponibilizadasobumalicenapermissiva(LGPL)
quepermiteseuusotantoparaaplicaeslivresquantoparaaplicaescomerciais.
Manipulaobsicadetexto
OobjetivodesteprimeiroexemplosobreautilizaodoformatoRTFparagerar
documentosdemonstraralgunsaspectossimples,comoaformataodetextos,
fontes,imagenselinks.
OexemploiniciacomarequisiosimplesbibliotecaRTFpormeiodafuno
.Logoaps,utilizamosomtodo ,queregistrarinternamenteomtododabiblioteca responsvelporcarregarautomaticamente
asclassesnecessriassemprequeestasforemrequisitadaspelaprimeiravez.Depois,
instanciamosumobjetodaclasse.
Captulo3Bibliotecasutilizadas
141
Depoisdevermosmaisesteexemplodeutilizaodomtodo,utilizaremos
omtodoparaadicionarumaimagemaodocumento.Essemtodorecebea
localizaodaimagemaserexibidanodocumento,umobjetoparadeniraformataodopargrafonoqualaguraserinseridaemaisdoisparmetrosparaindicar
alarguraeaaltura.Comoindicamossomentealargura(3cm),aalturacalculada
demaneiraproporcionalparamanteroaspectooriginaldagura.
Porltimo,inserimosumhyperlinknodocumentopormeiodomtodo,
querecebeoendereoquedesejamosreferenciar,ortulodetextoaserinserido,um
objetocontendoaformataodafonteeoutrocontendoaformataodopargrafo.
Agura3.14apresentaoresultadodoprograma.
Figura3.14ManipulaobsicadetextoemRTF.
rtf1.php
Captulo3Bibliotecasutilizadas
153
Geraodegrcos
Nestaseo,abordaremosacriaodegrcos.Grcosbuscamrepresentardeforma
visualvaloresnumricos,facilitandoacompreensopeloserhumano.Existemdiversostiposdegrcos,comocolunas,linhas,pizza,disperso,rea,radar,entreoutros.
Introduo
ParagerarmosgrcosemPHP,serutilizadaabibliotecaJPGraph(http://www.aditus.
nu/jpgraph).AbibliotecaJPGraphumabibliotecaorientadaaobjetos,construda
completamenteemlinguagemPHP.AbibliotecaJPGraphutilizadealgumasextensesdalinguagem,como,ou,entreoutras.importantenotar
queessasdependnciasgeralmentejsopartedasinstalaes-padrodalinguagem
PHPnasmaisdiversasplataformas,emrazodesuapopularidade.Abibliotecapode
serutilizadaparacriarumagrandediversidadedegrcos,comocolunas,linhas,
pizza,entreoutros.
AbibliotecaJPGraphdisponibilizadasobumalicenadupla.Paraodesenvolvimento
deaplicaeslivres,podeserutilizadasemcusto.Entretanto,paraodesenvolvimento
deaplicaescomerciais,umalicenaprossionaldeveseradquirida.
Captulo3Bibliotecasutilizadas
157
.Depois,sodenidasacor()eaespessura()decadauma
daslinhas.Porm,denidaapalavraquerepresentarcadaumadaslinhasdo
grconalegendapormeiodomtodo.
Aonal,ogrcoexibidononavegadorpormeiodomtodo.Agura3.20
apresentaoresultadodoprograma.
Figura3.20Geraodegrcosdemltiplaslinhas.
graph2.php
170
CriandoRelatrioscomPHP
Figura3.26Geraodegrcosdepizza3Dcomlinks.
graph8.php
CAPTULO4
Relatriostabulares
Sexistemdoisdiasnoanoemquenadapodeserfeito:umsechamaontemeooutro,amanh.Portanto,hojeodiacertoparaamar,acreditar,fazer
eprincipalmenteviver.
DalaiLama
Nestecaptulo,veremosaconstruodosprimeirosrelatriosenvolvendodiretamente
autilizaodebancodedados.Nestemomento,desenvolveremosrelatriostabulares,
querecebemessenomepelofatodeassemelharem-seaoformatodeumatabelaou
planilha.Noscaptulosseguintes,serodesenvolvidosrelatriosmaiselaborados,
comquebras,agrupamentos,totalizaesediferentesnveishierrquicos.
Basededadosdeexemplos
Apartirdestecaptulo,amaioriadosexemplosdesenvolvidosutilizardadosarmazenadosemumbancodedados.Parafacilitaradistribuioeainstalaodosexemplos,optamosporcriarumabasededadosemSQLite,queumbancodedadosno
formatodearquivosquesuportaalinguagemSQLeutilizaaextenso.db.Odriver
deacessoabancosdedadosSQLiteintegradoaoPHP,ouseja,nonecessria
ainstalaodesoftwareadicionalalgumparaofuncionamentodosexemplosaqui
desenvolvidos.Almdabasededadosnoformato.db,serdisponibilizadooscript
decriaodelacomonomeexemplos.sql.
Odiagramaapresentadonagura4.1representaaestruturadetabelasutilizadas
nosexemplosaolongodolivro.Atabela terumcadastrodepessoas.Cada
pessoaestarrelacionadaaumacidade.Essebancodedadosterregistrodevendas
realizadas.Cadavendarealizadaemumadeterminadadata()parauma
pessoa(),porumvendedor(),emumalial().Umavenda
compostadeitens.Atabela relacionaquaisprodutos(),quais
quantidadesdecadaproduto()equaisvalorespraticadosdecadaproduto
()integramumavenda.Atabelaregistraocadastrodeprodutos,contendo
172
176
CriandoRelatrioscomPHP
Figura4.2RelatrionoformatoTXT.
simples_txt.php
180
CriandoRelatrioscomPHP
Figura4.3RelatrionoformatoHTML.
simples_html.php
184
CriandoRelatrioscomPHP
formatamosascolunasepormeiodomtodo.
importanteressaltarqueessesclculostotalizadoresdevemserrealizadosantesda
formataodascolunas,umavezqueaformataodescaracterizaosdados,inuenciandodiretamenteosresultadosdeclculosmatemticos.
Depoisdetotalizarmoseformatarmosasvariveis,adicionamosasclulascontendo
osdadosaorelatriopormeiodomtodo.Utilizamosavarivelcomo
parmetrodomtodo.Avarivelindicarseasclulasexibidasapresentarocordefundoouno.Apsacriaodasclulas,alinhaquebradapormeio
domtodoeavarivelmudadecontedo(/).
Depoisdesairmosdo,afonteredenida(ArialBold10)eadicionamosuma
cluladetotal(Total)queocuparalarguracorrespondenteaquatrocolunasdedadosdorelatrio.Depois,adicionamosclulascontendoosdadostotais(
e , devidamente formatadas e alinhadas direita).Ao nal, o relatrio
PDF armazenado no arquivo output.pdf dentro da pasta app.output e um link
apresentadoaousuriopararealizardownloaddeste.Agura4.4representaoincio
dorelatriogerado.
Figura4.4RelatrionoformatoPDF.
simples_pdf.php
188
CriandoRelatrioscomPHP
depargrafo.Apscriarmosalinhacontendoosttulosdascolunas,utilizamoso
mtodoparacolorirofundodaprimeiralinhadorelatrio.
Antesdeiniciarmoso,percorrendoosdadosdorelatrio,criamosavarivel
decontrole (quecontrolaracordefundodalinhadosdados),asvariveis
totalizadorase,almdavarivel,querepresentaralinha
atualdorelatrio,oquenecessrioparaomtodo.
Dentro do , acumulamos as variveis totalizadoras, formatamos as colunas
e,conformeoformatomonetrio,edenimosqualseracorde
fundoutilizada,pormeiodavariveldecontrole.Alinhaqueterosdados
adicionadapormeiodomtodo.Depois,cadaumadascolunasresultantes
dabasededadosescritanatabelapormeiodomtodo.Posteriormente,
omtodoexecutadoparacoloriralinhadedadoscoma
cordenidapelavarivel .Aindadentrodo ,avarivel alterna
seuvalor(/)eavariveltemseucontedoincrementado.
Saindodo ,adicionamosmaisumalinhatabela,destavezparaapresentar
oresultadototal.Asprimeirasquatroclulasdatabelasomescladaspormeiodo
mtodo.NesseespaoserexibidootextoTotal.Aoladodaclula
contendootextoTotal,soexibidasasvariveiseformatadas
ealinhadasdireita.Posteriormente,alinhadetotalcoloridapormeiodomtodo
eutilizamosomtodoparaapresentar
bordasemtodaatabela.
Porm,orelatriosalvonoarquivo output.rtf,dentrodapasta app.output,eum
linkescritonatelaparaqueousuriorealizeodownloaddessearquivo.Agura4.5
representaoinciodorelatriogerado.
Figura4.5RelatrionoformatoRTF.
208
CriandoRelatrioscomPHP
Figura4.10Formulriodepersonalizaodorelatrio.
custom1.html
213
Captulo4Relatriostabulares
Depoisdeformaralinhacontendoosttulosdascolunas,percorremososdados
resultantespormeiodeumsobreavarivel.Paracadalinharesultante,
adicionamosumalinhatabela.Dentrodesselaodeiterao,percorremosascolunasselecionadaspelousurio()parasomenteadicionarlinha
dedadosrealmenteascolunasselecionadas.Nesteponto,denimosoalinhamento
dacolunacombasenainformaoarmazenadanovetor.Depoisdeadicionar
todasaslinhasresultantes,apresentamosatabelacomorelatriopormeiodomtododoobjeto.
Norelatrioaseguir,apresentadonagura4.11,podemosveroresultadodeumrelatriodepessoasemqueousurioselecionouvisualizarascolunascdigo,nome,
sexo,emailenomedacidade,ordenadaspelonomedapessoa,eestabeleceucomo
ltrosdorelatriosomentelistaraspessoascujonomecontmAna,sodosexo
FemininoeresidemnoestadodoRioGrandedoSul.
Figura4.11Resultadodaexecuodorelatrio.
CAPTULO5
Relatrioshierrquicosematriciais
Viverenfrentarumproblemaatrsdooutro.Omodocomovocoencara
quefazadiferena.
BenjaminFranklin
Nestecaptulo,abordaremosacriaoderelatrioshierrquicos,queapresentamas
informaesdivididasemquebrasesees,permitindototalizaesemdiferentes
nveis, e tambm relatrios matriciais, que apresentam a informao de maneira
sintetizada,utilizandooformatodeumamatrizcomomeiodevisualizao.
Introduo
Nocaptulo4,abordamosageraoderelatriostabulares.Nessesentido,foram
desenvolvidosrelatriossimples,comcontedoeestruturapredenidosemnvelde
programao,relatriosparametrizados,quepermitiamaousurioestabelecerltros
sobreosdadosaseremapresentados,relatrioscustomizados,quetambmpermitiam
aousurioselecionarcolunaseordenaese,porltimo,relatriosinterligados,que
permitiamaousuriorealizarsaltosentreumrelatrioeoutro.
Nestecaptulo,abordaremosacriaoeapresentaoderelatrioscontendoagrupamentosdeinformaes.Oobjetivodestecaptulodemonstrardequaisformas
podemosrealizaragrupamentosesumarizaessobreainformaopresentenobanco
dedadosnomomentodeserapresentadaaousurio.Dessaforma,ocaptuloser
divididoemduaspartes:relatrioshierrquicoserelatriosmatriciais.
Relatrios hierrquicos, muitas vezes conhecidos tambm como relatrios com
quebrasouagrupamentos,permitemapresentarainformaotabularemumnvel
detalhado,separadaemgruposdedadostambmconhecidoscomoquebras,permitindoaplicarfrmulastotalizadorasconformeonveldeagrupamentodesejado.
A caracterstica principal desse tipo de relatrio a segmentao da informao
conformeosgruposeatotalizaodosdadosapsaapresentaodelesdentrode
cadaagrupamento.
229
239
Captulo5Relatrioshierrquicosematriciais
Jasvariveis,earmazenamos
totaisdascolunasdepreodecusto,preodevendaequantidadeemestoquedentro
daquebradorelatrio,ouseja,acumulamosvaloresdentrodeummesmofabricante.Cadavezqueacolunadofabricantetrocadevaloreaquebratotalizada,essas
variveissoreinicializadas.Avarivelarmazenaroltimofabricante
(valoranteriordaquebra).Essavarivelcontrolaatrocadequebra.Dessamaneira,
semprequeacomparaodessavarivelcomocontedodacolunado
produtoatualresultaremumadiferena,teremosumatrocadegrupo(quebra).A
gura5.2apresentaoresultadodorelatrio.
Figura5.2RelatriocomumaquebraemPDF.
quebra_uma_pdf.php
254
CriandoRelatrioscomPHP
Figura5.4RelatriocomduasquebrasemPDF.
quebras_duas_pdf.php
Captulo5Relatrioshierrquicosematriciais
261
DuasdimensesnoformatoHTML
Nesseprimeirorelatriomatricial,serapresentadoumresumodevendasconformedoisagrupamentos(dimenses)dedados:vendedorems.Assim,aprimeira
dimensoserexibidanaslinhas(vendedor)eaoutra,nascolunas(ms),enquanto
nointeriordorelatrioserapresentadaaquantidadevendida.importanteressaltar
quecadacluladointeriordorelatriodeveserlidacomoumainterseodasduas
dimenses,quesovendedor(linhas)ems(colunas).Orelatrioapresenta,ainda,
duastotalizaes,sendoumanavertical,apresentandoototaldevendasdecadams,
eoutranahorizontal,apresentandoototaldevendasdecadavendedor.
Aideiageraldesserelatriotransmitidapelagura5.5,quenocontmexatamente
osmesmosdadosapresentadosnorelatrioquedesenvolveremos,masapenasuma
ideiaabstrata.Noladoesquerdodagura,constamosdadosdeorigemqueseroutilizadoscomobaseparaconfecodorelatriomatricial.Essesdadossoextradosda
basededadospormeiodeumsimplescomandoquelistaonomedovendedor,
omsemqueocorreuavendaeovalorvendido.Apartirdessesdados,chegamos
partedireitadagura,queexibeumrelatriomatricialdeduasdimensesjpronto.
Figura5.5Formaodeumamatrizcomduasdimenses.
Nesterelatrio,podemosobservarqueduascolunasdorelatrioforamselecionadas
comoagrupamentosoudimensesdorelatriomatricial:nomedovendedorems
davenda.Cadainformaodeagrupamentofoidispostaemumeixodiferentedo
relatrioresultante,sendoqueonomedovendedorfoiexibidoaolongodaslinhas,
enquantoomsderealizaodasvendas,aolongodascolunas.
importanteressaltarqueemumrelatriomatricialainformaodeagrupamento
apresentadademaneiradistinta,ouseja,tantoosnomesdosvendedoresquanto
osnomesdosmesessoapresentadosumanicavezemcadaclula.Nointeriordo
Captulo5Relatrioshierrquicosematriciais
Figura5.6RelatriocomduasdimensesemHTML.
matriz_duas_html.php
263
Captulo5Relatrioshierrquicosematriciais
273
Obs.:Aversosemcortesdessecdigoencontra-separadownloadnositedaeditora
Novatec.
QuatrodimensesnoformatoHTML
Nosdoisexemplosanteriores,foramapresentadosrelatriosmatriciaisqueexibiam
osdadosconformeduasdimenses:vendedorems.Osdoisprximosexemplosde
relatriosmatriciaismostraroasinformaesdevendasconformequatrodimenses:
lial,nomedovendedor,msdevendaesexodocliente.Duasdessasdimenses
(lialevendedor)serodispostasnaslinhaseasoutrasduas(msdavendaesexo
docliente),nascolunas.
Agura5.8procurademonstrar,demaneiraabstrata,aideiageraldosprximosdois
exemplos.importanteressaltarqueosdadoscontidosnessagurasoctciose
nocorrespondemaosdadospresentesnobancodedadosqueseroapresentados
noprximoexemplo.Emseuladoesquerdo,aguratemumatabelaquerepresenta
osdadosdeorigemtrazidospelaconsultaSQLrealizadanobancodedados.Depois
deseremprocessados,essesdadosresultamnamatrizdadireita,querepresentao
relatriomatricialresultante.
Figura5.8Formaodeumamatrizcomquatrodimenses.
Atabeladaesquerda,quecontmosdadosdeorigem,temcincocolunas,equatro
delassetransformaroemdimensesdorelatriomatricial,eaquintadelas,querepresentaovalorvendido,seracolunaasertotalizadanointeriordorelatrioresultante.
Asduasprimeirascolunasdatabeladaesquerda(lialenomedovendedor)seroas
Captulo5Relatrioshierrquicosematriciais
275
Avarivelcontmumaestruturadedadosquearmazenaostotaisdevendas
demaneirasimilarcomoestesseroexibidos.Trata-sedeumamatrizcomquatro
ndices(lial,vendedor,msdavendaesexodocliente)queserutilizadaparaa
exibiodorelatrio.Jamatrizarmazenarostotaisdecadavendedoreserutilizadaparaapresentaraltimacolunadorelatrio.Dessaforma,essa
matrizarmazenaatotalizaodevendasconformealialeovendedor.Jamatriz
armazenaratotalizaodevendasconformeomseosexoeserutilizada
paraapresentaraltimalinhadorelatrio.
Osvetores e armazenaroosdiferentesvaloresdascolunassexoems,
resultantesdaconsultaaobancodedados,paramontagemdascolunasdorelatrio.
Essesvetoressounicados()paragarantirquenocontenhamvalores
repetidosesoordenados().Agura5.9apresentaoresultadodorelatrio.
Figura5.9RelatriocomquatrodimensesemHTML.
matriz_quatro_html.php
CAPTULO6
Grcosedocumentos
Eupreroseressametamorfoseambulantedoqueteraquelavelhaopinio
formadasobretudo.
RaulSeixas
Nestecaptuloserabordadaageraodegrcos,bemcomodedocumentos.O
captuloabordaquatrotpicosprincipais:geraodegrcosdelinhasecolunas
segundoosdadosexistentesnabasededados,degrcoscominteraocomousurio,dedocumentosnoformatoPDFededocumentosnoformatoRTF.
Grcos
Nocaptulo3foramapresentadasasbibliotecasutilizadasaolongodolivro,entre
elasaJPGraph.Osexemplosdessecaptuloutilizavamapenasdadosestticos,denidosnaformadevetores,paragerargrcos.Osprximosexemplostratamda
geraodessesmesmosgrcos,masconformeosdadosprovindosdabasededados
utilizadaatomomento.
Grcodelinhas
Oprximoexemplotratadageraodeumgrcodelinhasapartirdosdados
existentes na base de dados utilizada at o momento. O objetivo do grco ser
projetarasvendas(R$)realizadasemcadaumadasliaisaolongodosmeses.Nesse
grco,cadalinharepresentarumalial,conformepodemosconferirnalegenda.
Ogrcoapresentar,noeixoX,osmesesemqueasvendasocorrerame,noeixoY,
omontantedevendas.
Oprogramainiciacomaapresentaodomtodo,quedenirapartir
dequaislocaisasclassesdeconexocomabasededados(app.ado)serocarregadas.
Apartirdeento,deneoano(varivel)queserutilizadonaconsultaSQLpara
montarogrco.Apsaaberturadaconexocomabasededados,aconsultaSQL
denida,tendocomoobjetivolistaromontanterealizadoemvendasagrupadopor
290
292
CriandoRelatrioscomPHP
, que contm sempre seis valores (desde julho at dezembro) para serem
Figura6.1Grcodelinhasrepresentandoasvendasdecadalialporms.
grafico_linhas.php
296
CriandoRelatrioscomPHP
seisposies,eovolumedevendasdecadams,quandoessainformaoexistir,ou
zero,quandonoexistir.
Depoisdeinstanciarumobjeto,algumascaractersticassodenidas,como
acordecadabarra(),seosvaloresdeveroserexibidosouno,onome
querepresentarabarranalegenda(),seasbarrasterosombreamento
(),entreoutras.Porm,abarraadicionadaaovetor ,queter
todasasbarras(umaparacadalial).Depoisdepercorreramatriz ,criado
um objeto da classe , que representa um agrupamento de barras. Esse
objetorecebecomoparmetroovetor,sendoresponsvelporsuaexibio.
Esseobjeto,ento,adicionadoaogrcopormeiodomtododa
classe,que,ento,exibidoemtelapelomtodo.Agura6.2apresenta
oresultadodogrco.
Figura6.2Grcodecolunasrepresentandoasvendasdecadalialporms.
grafico_colunas.php
300
CriandoRelatrioscomPHP
Depoisdepercorrerosdadosretornadosdabasededados,ogrcoinstanciado
pormeiodacriaodoobjetodaclasse.Depois,algumascaractersticasdo
grcocomosombreamento()ettulosodenidas.Depois,umobjeto
dotipo criado,recebendocomoparmetroovetorquecontmosdados
aseremprojetados().
O mtodo dene uma fatia a ser distanciada do grco, indicando
umdestaquemaior.Omtodo denedemaneirapercentual(entrezero
eum)aposiodocentrodogrcoemrelaoaoseixoshorizontalevertical.O
mtododeneosvetorescontendooslinksertulosdelink.Omtodo
atribuiaslegendas(nomesdeliais)aogrco.Aonal,oobjeto
adicionadoaoobjeto,pormeiodomtodo,eogrcoexibidoem
tela,pormeiodomtododaclasse,que,emvezdeexibirapenas
umaimagememtela,responsveltambmpelageraodocdigoHTMLquefaz
omapeamentodoslinks,permitindoqueousuriocliquesobreasfatiasdapizza.A
gura6.3apresentaoresultadodogrco.
Figura6.3Grcodepizzarepresentandoopercentualdevendasparacadalial.
grafico_pizza.php
Captulo6Grcosedocumentos
313
Oprogramaaseguirprocurademonstrarcomosedautilizaodaclasserecmcriada.Oresultadodaexecuodesseprogramapodeservisualizado
nagura6.5.
Figura6.5NotascalgeradanoformatoPDF.
Esteexemploiniciacomadeniodomtodo,quedenecomosedar
acargadasclassesdeconexocomabasededadosapartirdaclasse app.ado.Em
seguida,iniciaumblococomautilizaodaclasse.
Paraemitirasnotasscais,seroutilizadososdadosdastabelas:,,,
e.Dessaforma,seremitidaumanotascalparacadavendarealizada.Osprodutosintegrantesdeumavendafaropartedocorpodanotascal.
Ocdigoiniciacomadeclaraodavarivel,quedenequalocdigoda
vendaqueserutilizadoparaemissodanotascal.Essecdigoestdenidode
maneiraxa,mas,emumaaplicaoreal,seriapassadoviaformulriodeparmetros.Logodepoisdedenirocdigodavenda,abrimosumaconexocomabasede
dadosedenimosumaconsultaSQLparaobter,apartirdocdigodavenda,adata
emqueestafoirealizadaeocdigodocliente.
Captulo6Grcosedocumentos
323
Figura6.6CartadeinadimplnciageradanoformatoRTF.
Emdocumentoscomocartasdeinadimplncia,contratosdeprestaodeservios,
entreoutros,bastantecomumotextododocumentosofreralteraesaolongo
dotempo,sejapormudanasnasregrasdenegcio,mudanasnalegislao,entre
outrosfatores.Dessaforma,noumaboaprticamanteressecontedocomoparte
integrantedocdigo-fontedaaplicao,umavezquequalqueralteraosubsequente
dependerdaaododesenvolvedor.
Paraevitaressetipodemanuteno,recomendvelmanterocontedododocumentoemumlocalquepossasereditadopelousurio,deprefernciapelaprpria
interfacedaaplicao.Paraimplementaressaseparaoemnossoexemplo,otexto
dacartacararmazenadoemumarquivoexternoaplicao,chamadodecarta.txt.
Essedocumentopodersereditadopelousurioeconterinclusivetagshtmlcomo
(bold),(italic)e(underline),umavezqueessastagssosuportadaspelaPHPRtfLite.
Comoimpossvelescreverumnicotextodecartaquesirvaparatodososclientes,
essetextodevercontervariveiscomo,,e,quesero
posteriormentesubstitudaspeloprograma.Autilizaodevariveispermitequeo
textodacartacontenhaosdadosretornadosposteriormentepelobancodedados,
tornandoacartapersonalizada.
Oprogramainiciacomadeclaraodomtodo,quedenecomosed
acargadasclassesdeconexoaobancodedados.Aseguir,jdentrodobloco
,denimosocdigodoclienteparaoqualemitiremosacartadeinadimplncia.
importantetornarclaroque,emumaaplicaoreal,nuncaestaremosdenindo
CAPTULO7
Umabibliotecaparageraoderelatrios
Aperfeionoalcanadaquandojnohmaisnadaparaadicionar,mas
quandojnohmaisnadaquesepossaretirar.
AntoinedeSaint-Exupry
Oobjetivoprincipaldestecaptuloconstruirumconjuntodeclassesquepermita
aoprogramadordesenvolverrelatriostabularesehierrquicosemformatosdiversos,
comoHTML,PDFeRTF,semnecessariamenteconhecerdetalhesdofuncionamento
dessasbibliotecas,comoocasodaFPDFparaarquivosPDFoudaPHPRtfLitepara
arquivosRTF.Paraisso,serocriadasclassesqueautomatizamaelaboraodesses
tiposderelatrio,aumentandoaprodutividadenodesenvolvimentodeaplicaes
corporativasnoquedizrespeitocriaoderelatriosoperacionais.
Introduo
Aolongodolivro,aprendemosautilizaralgumasdasmaisimportantesbibliotecas
paragerarrelatriosemPHPetambmdiversasestratgiasparagerarrelatriosdos
maisdiversostipos,desdeosmaissimplesatosmaiscomplexos.Atesteponto,
construmosvariadostiposderelatrios,realizamosconsultasaosbancosdedados,
formatamososdadosparaapresentaoemtabelas,grcos,entreoutrositens.
Nodiaadiadodesenvolvimentodeaplicaes,sobretudoquandofalamosdeaplicaesdenegcio,necessrioquetenhamosprodutividadeeestapossaseralcanada
dediversasmaneiras.Quandodesenvolvemosumaaplicaoorientadaaobjetos,
umadasmaneirasmaisecientesdealcanarmosaprodutividadepormeioda
criaodeclassesqueautomatizamtarefasparaoprogramador,demaneiraqueele
possafazercadavezmaiscommenoslinhasdecdigo.poressemotivoqueneste
captuloprojetaremosalgumasclassesquesimplicamatarefadegerarrelatrios,
tornandomelhoravidadoprogramador.
Dentretodosostiposderelatriosquevimos,osrelatriostabulareseoshierrquicos
estoentreosmaissolicitadospelosusuriosdeaplicaesdenegcioemtermos
327
Captulo7Umabibliotecaparageraoderelatrios
329
Figura7.1PadrodeprojetoStrategy.
Um designpattern representadoporumafamliadealgoritmosencapsuladosemumahierarquiadeobjetos,deformaquepossamosfacilmentetrocarde
algoritmo.Paraimplementarodesignpattern,normalmentedeclaramosuma
classeabstratacontendoosmtodosqueessealgoritmodeveprovereumconjunto
declasses-lhaconcretasdesta,queimplementamcadaversodiferentedessealgoritmo.Adecisodequalalgoritmotomarcaporcontadoprogramadorques
terdeescolherumadeterminadaclasseainstanciar.Independentementedaclasse
escolhida,todasasclasses-lhaimplementaroamesmainterface.
Captulo7Umabibliotecaparageraoderelatrios
335
Obs.:Aversosemcortesdessecdigoencontra-separadownloadnositedaeditora
Novatec.
EscritordePDF
Aprximaclasseescritoraqueconstruiremosa,queserresponsvel
pelaescritadetabelasemarquivosPDF.EstaclassefarusodaclasseFPDFpara
construiroarquivonalemPDF.Emseumtodoconstrutor,aclasse
recebercomoparmetroumvetorcontendoaslargurasdascolunasdatabelae
armazenar esse vetor no atributo .Alm disso, o mtodo construtor
inicializaovetorecriaoobjeto,instnciadaclasseFPDF,que
serresponsvelporescreveratabelanoformatoPDF.Emseguidasoexecutados
osmtodoseparaaberturadodocumentoPDF.
TTableWriterPDF.class.php
Captulo7Umabibliotecaparageraoderelatrios
347
Obs.:Aversosemcortesdessecdigoencontra-separadownloadnositedaeditora
Novatec.
Utilizandorecursosvisuais
Noltimoexemplo,vimoscomoutilizarasclassesescritorasdetabelaspormeio
deumexemplobastantesimplesquegeravaaomesmotempotrsarquivoscomo
mesmocontedo,masemtrsformatosdiferentes:html,pdfertf.
Oobjetivodestenovoexemplo,quepodeservistonagura7.3,exploraraspotencialidadesdasclassesescritoras,criandoumdocumentocommaisdetalhes,explorando
recursoscomoestilos,cores,fontes,alinhamentoseapossibilidadedecriarclulas
queocupemmaisdeumacoluna()paraproporcionarumrelatriocomefeito
dequebras(agrupamentos)etotalizaes.
Figura7.3RelatriogeradonoformatoPDF.
Assimcomofoirealizadonoexemploanterior,tambmnesteoblocoprincipaldo
programaestardentrodeumlaoderepetiescujoscomandosseroexecutados
umavezparacadaumdosformatosdearquivos:html,pdfertf.Aonaldaexecuo
370
CriandoRelatrioscomPHP
importantenotarqueacolunaquecontmonomedofabricantenoserexibida
nosdetalhesdorelatriopornotersidoadicionadapelomtodo.Dessa
forma,onomedofabricantesomenteserexibidoquandoalterarseuvalor,congurandoumaquebranorelatrioesendoexibidaemumalinhadegrupo.Almdisso,
importantedizerqueambosparmetrosdosmtodosedevem
corresponderexatamenteaosnomesqueoscampostmnaconsultaSQLenviadaao
bancodedados.Paragarantirqueoscampostenhamessesnomes,podemosutilizar
recursoscomoaliasesdecampos,pormeiodaclusuladalinguagemSQL.Isso
especialmentetilquandocamposdetabelasdiferentestmomesmonome.
Aonal,omtodo acionado,aconsultabasededadosrealizada,o
relatriogeradoemmemriaeomtodo armazenaorelatrionoarquivo
saida5.pdf.Casoalgumaexceoocorraduranteageraodorelatrio,oprograma
serdirecionadoparaoblocoeamensagemdeexceoserexibidanatela.Por
m,umlinkexibidoaousurio,pormeiodoqualelepoderefetuarodownloaddo
arquivocontendoorelatrio,quepodeservisualizadonagura7.6.
Figura7.6RelatriogeradonoformatoPDF.
relatorio5.php