phpoo_mostra

Upload: joao-assef

Post on 09-Apr-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/8/2019 phpoo_mostra

    1/40

    PHPProgramando com Orientao a Objetos

    Pablo DallOglio

    Novatec

  • 8/8/2019 phpoo_mostra

    2/40

    20

    Captulo 1

    Introduo ao PHP

    A vida uma pea de teatro que no permite ensaios...Por isso, cante, ria, dance, chore e viva intensamente cada momento de sua vida,antes que a cortina se feche e a pea termine sem aplausos...

    Charles Chaplin

    Ao longo deste livro utilizaremos diversas unes, comandos e estruturas de con-trole bsicos da linguagem PHP, que apresentaremos neste captulo. Conheceremosas estruturas bsicas da linguagem, suas variveis e seus operadores e tambm um

    conjunto de unes para manipulao de arquivos, arrays, bancos de dados, entreoutros.

    1.1 O que o PHP?

    A linguagem de programao PHP, cujo logotipo vemos na Figura 1.1, oi criada nooutono de 1994 por Rasmus Lerdor. No incio era ormada por um conjunto descripts voltados criao de pginas dinmicas que Rasmus utilizava para monitorar

    o acesso ao seu currculo na internet. medida que essa erramenta oi crescendo emuncionalidades, Rasmus teve de escrever uma implementao em C, a qual permitias pessoas desenvolverem de orma muito simples suas aplicaes para web. Rasmusnomeou essa verso de PHP/FI (Personal Home Pages/Forms Interpreter) e decidiudisponibilizar seu cdigo na web, em 1995, para compartilhar com outras pessoas,bem como receber ajuda e correo de bugs.

    Em novembro de 1997 oi lanada a segunda verso do PHP. Naquele momento,aproximadamente 50 mil domnios ou 1% da internet j utilizava PHP. No mesmo

    ano, Andi Gutmans e Zeev Suraski, dois estudantes que utilizavam PHP em umprojeto acadmico de comrcio eletrnico, resolveram cooperar com Rasmus para

  • 8/8/2019 phpoo_mostra

    3/40

    37Captulo 1 Introduo ao PHP

    if ($valor_venda > 100)

    {

    $resultado = 'muito caro';

    }

    else

    {$resultado = 'pode comprar';

    }

    O mesmo cdigo poderia ser escrito em uma nica linha da seguinte orma:

    $resultado = ($valor_venda > 100) ? 'muito caro' : 'pode comprar';

    A primeira expresso a condio a ser avaliada; a segunda o valor atribudocaso ela seja verdadeira; e a terceira o valor atribudo caso ela seja alsa.

    1.6.2 WHILE

    O WHILE uma estrutura de controle similar ao IF. Da mesma orma, possui uma condiopara executar um bloco de comandos. A dierena primordial que o WHILEestabeleceum lao de repetio, ou seja, o bloco de comandos ser executado repetitivamenteenquanto a condio de entrada dada pela expresso or verdadeira. Este comandopode ser interpretado como ENQUANTO (expresso) FAA {comandos... ..comandos... ..... ..

    A Figura 1.3 procura explicar o uxo de uncionamento do comando WHILE. Quandoa expresso avaliada como TRUE, o programa parte para a execuo de um bloco decomandos. Quando do fm da execuo deste bloco de comandos, o programa retor-na ao ponto inicial da avaliao e, se a expresso continuar verdadeira, o programacontinua tambm com a execuo do bloco de comandos, constituindo um lao derepeties, o qual s interrompido quando a expresso avaliada retornar um valoralso (FALSE).

    Figura 1.3 Fluxo do comando WHILE.

  • 8/8/2019 phpoo_mostra

    4/40

    58 PHP Programando com Orientao a Objetos

    var

    dev

    bin

    etc

    lib

    usrboot

    home

    1.10 Manipulao de strings

    1.10.1 Declarao

    Uma string uma cadeia de caracteres alanumricos. Para declarar uma string po-demos utilizar aspas simples ' ' ou aspas duplas " ".

    $variavel = 'Isto um teste';

    $variavel = "Isto um teste";

    A dierena que todo contedo contido dentro de aspas duplas avaliado pelo PHP.Assim, se a string contm uma varivel, esta varivel ser traduzida pelo seu valor.

    Tambm podemos declarar uma string literal com muitas linhas observando asintaxe a seguir, na qual escolhemos uma palavra-chave (neste caso, escolhemos CHAVE)para delimitar o incio e o fm da string.

    Resultado:

    Aqui nesta rea

    voc poder escrever

    textos com mltiplas linhas.

  • 8/8/2019 phpoo_mostra

    5/40

  • 8/8/2019 phpoo_mostra

    6/40

    86

    Captulo 2

    Orientao a objetos

    No que diz respeito ao desempenho, ao compromisso, ao esforo, dedicao,no existe meio termo. Ou voc faz uma coisa bem-feita ou no faz.

    Ayrton Senna

    A orientao a objetos um paradigma que representa toda uma flosofa paraconstruo de sistemas. Em vez de construir um sistema ormado por um conjuntode procedimentos e variveis nem sempre agrupadas de acordo com o contexto,como se azia em linguagens estruturadas (Cobol, Clipper, Pascal), na orientao a

    objetos utilizamos uma tica mais prxima do mundo real. Lidamos com objetos,estruturas que j conhecemos do nosso dia-a-dia e sobre as quais possumos maiorcompreenso.

    2.1 Introduo

    Neste captulo abordaremos a implementao da orientao a objetos, seus diversosconceitos e tcnicas das mais diversas ormas, sempre com um exemplo ilustrado de

    cdigo-onte com aplicabilidade prtica. Ao fnal do captulo tambm abordaremosdois assuntos importantes: a manipulao de erros e a manipulao de arquivosXML. Antes de mais nada, no entanto, iremos rever os principais conceitos da pro-gramao estruturada.

    2.1.1 Programao estruturada

    A programao estruturada um paradigma de programao que introduziu umasrie de conceitos importantes na poca em que oi criada e dominou a cena da enge-

    nharia de sotware durante algumas dcadas. baseada ortemente na modularizao,cuja idia dividir o programa em unidades menores conhecidas por procedimentosou unes. Essas unidades menores so construdas para desempenhar uma tarea

  • 8/8/2019 phpoo_mostra

    7/40

    91Captulo 2 Orientao a objetosOrientao a objetos

    Ao modelar uma classe Conta (bancria), so suas propriedades: Agencia, Codigo,DataDeCriacao, Titular, Senha, Saldo e se est Cancelada, bem como so seus mtodos (un-cionalidades): Retirar(), Depositar() e ObterSaldo(), dentre outros.

    A seguir, veremos a representao grfca de uma classe de acordo com o padroUML:

    Figura 2.3 Classes.

    As classes so orientadas ao assunto, ou seja, cada classe responsvel por umassunto dierente e possui responsabilidade sobre o mesmo. Ela deve proteger o acessoao seu contedo por meio de mecanismos como o de encapsulamento (visto a seguir).Dessa orma, criamos sistemas mais confveis e robustos. A classe Pessoa e a classe Contaso responsveis pelas propriedades nelas contidas, evitando que essas propriedadescontenham valores inconsistentes ou sejam manipuladas indevidamente.

    Os membros de uma classe so declarados na ordem: primeiro as propriedades(mediante o operador var) e, em seguida, os mtodos (pelo operador function, tambmutilizado para declarar unes). As classes Pessoa e Conta so apresentadas a seguir:

    Pessoa.class.php

  • 8/8/2019 phpoo_mostra

    8/40

    108 PHP Programando com Orientao a Objetos

    exclusivamente por mtodos dela mesma, que so implementaes projetadas paramanipular essas propriedades da orma correta. As propriedades nunca devem seracessadas diretamente de ora do escopo de uma classe, pois dessa orma a classeno ornece mais garantias sobre os atributos que contm, perdendo, assim, a res-

    ponsabilidade sobre eles.Na Figura 2.6, vemos a representao grfca de um objeto. As propriedades so os

    pequenos blocos no ncleo do objeto; os mtodos so os crculos maiores na parteexterna do mesmo. Esta fgura oi construda para demonstrar que os mtodos devemser projetados de orma a protegerem suas propriedades, ornecendo interaces paraa manipulao destas.

    Figura 2.6 Encapsulamento.

    Para atingir o encapsulamento, uma das ormas defnindo a visibilidade daspropriedades e dos mtodos de um objeto. A visibilidade defne a orma como essaspropriedades devem ser acessadas. Existem trs ormas de acesso:

    Visibilidade Descrio

    private Membros declarados comoprivatesomente podem ser acessados dentroda prpria classe em que oram declarados. No podero ser acessados

    a partir de classes descendentes nem a partir do programa que az usodessa classe (manipulando o objeto em si). Na UML, simbolizamoscom um (-) em rente propriedade.

    protected Membros declarados como protected somente podem ser acessadosdentro da prpria classe em que oram declarados e a partir de classesdescendentes, mas no podero ser acessados a partir do programa queaz uso dessa classe (manipulando o objeto em si). Na UML, simboli-zamos com um (#) em rente propriedade.

    public Membros declarados como public podero ser acessados livremente a

    partir da prpria classe em que oram declarados, a partir de classesdescendentes e a partir do programa que az uso dessa classe (manipu-lando o objeto em si). Na UML, simbolizamos com um (+) em rente propriedade.

  • 8/8/2019 phpoo_mostra

    9/40

    117Captulo 2 Orientao a objetosOrientao a objetos

    echo "=============================:\n";

    Aplicacao::Sobre();

    ?>

    Resultado:

    Informaes sobre a aplicao:

    =============================:

    Esta aplicao est licenciada sob a GPL

    Para maiores informaes, www.fsf.org

    Contate o autor atravs do e-mail [email protected]

    2.10 Associao, agregao e composio

    2.10.1 Associao

    Associao a relao mais comum entre dois objetos, de modo que um possui umareerncia posio da memria onde o outro se encontra, podendo visualizar seusatributos ou mesmo acionar uma de suas uncionalidades (mtodos). A orma maiscomum de implementar uma associao ter um objeto como atributo de outro. Veja oexemplo a seguir, no qual criamos um objeto do tipo Produto (j criado anteriormente)

    e outro do tipo Fornecedor. Um dos atributos do produto o ornecedor. Observe, naFigura 2.9, como se d a interao.

    Figura 2.9 Associao.

    Fornecedor.class.php

  • 8/8/2019 phpoo_mostra

    10/40

    150 PHP Programando com Orientao a Objetos

    defnida por set_error_handler() como sendo a uno a ser invocada quando algumerro ocorrer. Dentro desta uno (que recebe o arquivo e a linha em que ocorreu oerro, alm do nmero e a mensagem de erro ocorrido) podemos exibir ou suprimira exibio do erro, grav-lo em um banco de dados ou gravar em um arquivo de log,

    como fzemos no exemplo demonstrado. No exemplo, todas as mensagens (ERROR,WARNING e NOTICE) so armazenadas em um arquivo de log; somente as de WARNING eERROR so exibidas na tela, e as de ERROR causam parada na execuo da aplicao pelocomando die. A desvantagem deste tipo de abordagem que concentramos todotratamento de erro em uma nica uno genrica, quando muitas vezes precisamosanalisar caso a caso para optar por uma determinada ao.

    2.17.4 Tratamento de excees

    O PHP5 implementa o conceito de tratamento de excees, da mesma orma queele implementado em linguagens como C++ ou Java. Uma exceo um objetoespecial derivado da classe Exception, que contm alguns mtodos para inormar aoprogramador um relato do que aconteceu. A seguir, voc conere estes mtodos:

    Mtodo Descrio

    getMessage() Retorna a mensagem de erro.

    getCode() Retorna o cdigo de erro.

    getFile() Retorna o arquivo no qual ocorreu o erro.

    getLine() Retorna a linha na qual ocorreu o erro.

    GetTrace() Retorna um array com as aes at o erro.

    getTraceAsString() Retorna as aes em orma de string.

    O tratamento de erros ocorre em dois nveis. Quando executamos um conjuntode operaes que pode resultar em algum tipo de erro, monitoramos essas operaes,escrevendo o cdigo dentro do bloco try. Dentro das operaes crticas, quando ocorreralgum erro, devemos azer uso do comando throw para lanar uma exceo (objeto

    Exception), isto , para interromper a execuo do bloco contido na clusula try, a qualrecebe esta exceo e repassa para outro bloco de comandos catch. Dentro do blocode comandos catch, programamos o que deve ser realizado quando da ocorrnciada exceo, podendo emitir uma mensagem ao usurio, interromper a execuo daaplicao, escrever um arquivo de log no disco, dentre outros. O interessante destaabordagem que a ao resultante do erro ocorrido fca totalmente isolada, externaao contexto do cdigo gerador da exceo. Esta modularidade permite mudarmoso comportamento de como realizado este tratamento de erros, sem alterar o blococdigo principal.

  • 8/8/2019 phpoo_mostra

    11/40

    154

    Captulo 3

    Manipulao de dados

    A melhor maneira de prever o futuro cri-lo.

    Peter Drucker

    Este captulo abordar a manipulao de bancos de dados e suas nuances. Em umprimeiro momento, iremos recapitular como se d a manipulao de dados utilizandoos comandos nativos que o PHP nos oerece para cada sistema gerenciador de bancode dados. Em seguida, estudaremos a utilizao da biblioteca PDO, que nos permiteabstrair o acesso a dierentes mecanismos de bancos de dados. Posteriormente, visan-

    do evitar a utilizao direta de comandos SQL em nossas aplicaes, construiremosum conjunto de classes que iro nos oerecer uma interace totalmente orientada aobjetos para abstrair todos os aspectos relativos a manipulao e armazenamentode inormaes no banco de dados por meio da linguagem SQL, tornando isto umatarea simples, trivial e, sobretudo, transparente ao programador.

    3.1 Acesso nativo

    3.1.1 Introduo

    No atual mundo das aplicaes de negcio, o armazenamento de inormaes deuma organizao implementado por dierentes mecanismos de bancos de dadosem decorrncia, muitas vezes, da utilizao de sistemas de dierentes ornecedores etecnologias. Alguns dados relativos a recursos humanos podem estar armazenadosem um banco de dados DB2, ao passo que os dados fnanceiros podem estar arma-zenados em um Oracle, as estatsticas de acesso ao site da empresa podem estar em

    um MySQL, e o Data Warehouse, que consiste de vrias inormaes estratgicas,pode estar em um PostgreSQL. A diversidade reside nos mais diversos ornecedores debancos de dados existentes, cada qual com mtodos dierentes (interaces) de acesso

  • 8/8/2019 phpoo_mostra

    12/40

    159Captulo 3 Manipulao de dados

    Resultado:

    1 - rico Verssimo

    2 - John Lennon

    3 - Mahatma Gandhi

    4 - Ayrton Senna5 - Charlie Chaplin

    6 - Anita Garibaldi

    7 - Mrio Quintana

    3.2 PDO :: PHP Data Objects

    3.2.1 Introduo

    O PHP , em sua maioria, um projeto voluntrio cujos colaboradores esto distri-budos geografcamente ao redor de todo o planeta. Como resultado, o PHP evoluiubaseado em necessidades individuais para resolver problemas pontuais, movidos porrazes diversas. Por um lado, essas colaboraes fzeram o PHP crescer rapidamen-te; por outro, geraram uma ragmentao das extenses de acesso base de dados,cada qual com sua implementao particular, no havendo real consistncia entre asinteraces das mesmas (Oracle, MySQL, PostgreSQL, SQL Server etc.).

    Em razo da crescente adoo do PHP, surgiu a necessidade de unifcar o acessos dierentes extenses de bancos de dados presentes no PHP. Assim surgiu a PDO(PHP Data Objects), cujo objetivo prover uma API limpa e consistente, unifcandoa maioria das caractersticas presentes nas extenses de acesso a banco de dados.

    A PDO no uma biblioteca completa para abstrao do acesso base de dados,uma vez que ela no az a leitura e traduo das instrues SQL, adaptando-as aos maisdiversos drivers de bancos de dados existentes. Ela simplesmente unifca a chamada

    de mtodos, delegando-os para as suas extenses correspondentes e az uso do queh de mais recente no que diz respeito orientao a objetos presente no PHP5.

    Para conectar em bancos de dados dierentes, a nica mudana na string deconexo. Veja a seguir alguns exemplos nos mais diversos bancos de dados.

    Banco Stringdeconexo

    SQLite new PDO('sqlite:teste.db);

    FireBird new PDO("frebird:dbname=C:\\base.GDB, "SYSDBA, "masterkey);

    MySQL new PDO('mysql:unix_socket=/tmp/mysql.sock;host=localhost;port=3307;dbname=livro, 'user, 'senha);

    Postgres new PDO('pgsql:dbname=example;user=user;password=senha;host=localhost);

  • 8/8/2019 phpoo_mostra

    13/40

    171Captulo 3 Manipulao de dados

    entidade (tabela) do banco de dados ir atuar, portanto ser necessrio termos ummtodo para defnir a entidade, o qual chamaremos de setEntity(), e um para retornaro nome desta entidade, que ser chamado de getEntity().

    Apesar de estarmos utilizando uma estrutura orientada a objetos para defnir asconsultas enviadas ao banco de dados, em um determinado momento precisaremosobter esse comando no ormato string para poder realizar a consulta, e este o obje-tivo do mtodo getInstruction(), que na superclasse um mtodo abstrato, portantosem implementao, o que obriga a cada classe-flha implement-lo. Cada classe-flhapossui uma orma de realizar a consulta ao banco de dados (ormato) dierente, por-tanto convm que cada uma implemente o seu getInstruction() de maneira peculiar.Veja na Figura 3.3 como ser nossa estrutura de classes. A classe TSqlInstruction irornecer os mtodos comuns e cada uma das classes-flha oerecer sua variao do

    mtodo getInstruction().

    Figura 3.3 Estrutura de classes SQL.

    Durante o projeto destas classes percebemos alguns atores interessantes: a maioriadas instrues SQL (com exceo do INSERT) possui um critrio de seleo de dadosque se traduz em uma clusula WHERE. assim com o Update, o Delete e o Select. Tal ex-presso (fltro) pode ser uma instruo complexa, composta de operadores lgicos (AND,OR), operadores de comparao (,=,), dentre outros. Poderamos escrever mtodos

    para defnir esse critrio de seleo em cada uma das classes que necessitam desterecurso, mas estaramos duplicando o cdigo-onte sem necessidade. A soluo queadotaremos a criao de mais uma classe no sistema, a qual ir se chamar TCriteriae ser responsvel pela criao dessas expresses, utilizando operadores lgicos. Pararelacionar um critrio (TCriteria) a uma instruo SQL (TSqlInstruction), utilizamos umrelacionamento do tipo composio, de modo que a instruo SQL ter uma reernciaao objeto que contm o critrio de seleo, como demonstrado na Figura 3.4. Noentraremos em detalhes sobre a estrutura da classe TCriteria neste momento.

  • 8/8/2019 phpoo_mostra

    14/40

    186 PHP Programando com Orientao a Objetos

    tamento do mtodo getInstruction() que retornar a instruo SQL montada e prontapara ser executada sobre o banco de dados. Para tanto, ela se utilizar das defniesgeradas pelo mtodo setRowData() e pelo mtodo setEntity() da superclasse. Veja aseguir o diagrama que representa a classe TSqlInsert.

    Figura 3.11 Classe TSqlInsert.

    TSqlInsert.class.php

  • 8/8/2019 phpoo_mostra

    15/40

    204 PHP Programando com Orientao a Objetos

    Figura 3.16 Interao entre as classes TConnection e PDO.

    No programa a seguir, estamos selecionando o registro de cdigo 1 da tabela

    de amosos e exibindo-o na tela. No primeiro bloco try/catch, estamos realizandoesta operao com o banco de dados MySQL, confgurado no arquivo my_livro.ini;no segundo bloco try/catch, estamos realizando essa operao com o banco de dadosPostgreSQL, confgurado no arquivo pg_livro.ini. Antes de tudo, estamos instanciandoum objeto da classe TSqlSelect, para defnir a tabela sobre a qual atuaremos e quaiscolunas retornaremos, alm de instanciar um objeto da classe TCriteria, para defniro critrio de seleo dos dados.

    connection.php

  • 8/8/2019 phpoo_mostra

    16/40

    210 PHP Programando com Orientao a Objetos

    e exatamente por isso que estamos utilizando o controle de transaes. Caso ocorraalgum erro na primeira execuo, automaticamente uma exceo lanada e a apli-cao direcionada para o bloco catch, ignorando as demais instrues.

    Na Figura 3.17 procuramos demonstrar como a interao entre as classes parti-cipantes de uma transao. Veja que o programa abre uma transao executando omtodo open() da classe TTransaction. Este mtodo, por sua vez, executa o mtodo openda classe TConnection, obtendo um objeto de conexo PDO, e armazena-o na proprie-dade esttica $conn. Sempre que o programa quiser essa varivel de conexo, ele irexecutar o mtodo esttico get(), que retornar a conexo da transao ativa. De posseda varivel de conexo (objeto $conn), o programa poder enviar diversas consultas aobanco de dados por meio do mtodo query(). Ao fnal, quando desejarmos fnalizara transao, executaremos o mtodo close() da classe TTransaction, que, por sua vez,

    eliminar o objeto PDO, atribuindo NULL varivel de conexo.

    Figura 3.17 Interao entre as classes durante a transao.

    transaction.php

  • 8/8/2019 phpoo_mostra

    17/40

    221

    Captulo 4

    Mapeamento Objeto-Relacional

    O homem est sempre disposto a negar tudo aquilo que no compreende.

    Blaise Pascal

    No captulo anterior revemos como se d a manipulao de dados em bases rela-cionais com PHP por meio da utilizao da linguagem SQL. Tambm criamos umaAPI orientada a objetos para manipulao de dados. Agora podemos subir um nvelde complexidade e pensar em nossa aplicao como um conjunto de objetos que o nosso modelo conceitual. Quando trabalhamos com um conjunto de objetos,

    precisamos persistir estes objetos na base de dados, ou seja, armazen-los e permitirposterior recuperao. Pensando nisso, estudaremos as tcnicas mais utilizadas parapersistncia de objetos em bases de dados relacionais, assim como criaremos uma APIorientada a objetos que ir permitir que aamos tudo isso de orma transparente,sem nos preocuparmos com os detalhes internos de implementao.

    4.1 Persistncia

    4.1.1 Introduo

    De modo geral, persistncia signifca continuar a existir, perseverar, durar longo tempoou permanecer. No contexto de uma aplicao de negcios, na qual temos objetosrepresentando as mais diversas entidades a serem manipuladas (pessoas, mercadorias,livros, clientes, arquivos etc.), a persistncia signifca a possibilidade de esses objetosexistirem em um meio externo aplicao que os criou, de modo que esse meio devepermitir que o objeto perdure, ou seja, no deve ser um meio voltil. Os bancos de

    dados relacionais so o meio mais utilizado para isso (embora no seja o nico). Como auxlio de mecanismos sofsticados especfcos de cada ornecedor, esses bancos de

  • 8/8/2019 phpoo_mostra

    18/40

    226 PHP Programando com Orientao a Objetos

    Figura 4.4 Composio.

    No nosso modelo de dados, precisamos criar as chaves de cada tabela (IdentityField). Em seguida, adicionamos uma chave estrangeira na tabela Telefone (id_pessoa),apontando para a chave primria da tabela Pessoa, como demonstrado na Figu-ra 4.5.

    Figura 4.5 Mapeando uma composio.

    4.2.3 Association Table Mapping

    At o momento vimos como se d o mapeamento de associaes e de composies nobanco de dados por meio do design pattern conhecido como Foreign Key Mapping.Mapping..Um outro relacionamento importante a agregao, no qual tambm temos umarelao todo/parte como na composio, mas, desta vez, o objeto parte no estintrinsecamente ligado ao todo, ou seja, quando destrumos o objeto todo, as partesainda continuam a existir, isto porque uma parte pode pertencer a dierentes objetos.Vamos exemplifcar.

    No caso a seguir, temos uma agregao em que um objeto CestaCompras representauma cesta de compras em um sistema de comrcio eletrnico. Uma cesta de comprassimboliza os vrios produtos que um cliente resolve comprar. No objeto CestaComprastemos atributos como a data em que a compra oi realizada ($data) e o cliente parao qual aquela cesta oi constituda ($cliente). Na cesta de compras temos mtodoscomo o insereProduto(), o qual ir receber um objeto do tipo Produto e inserir na cesta

  • 8/8/2019 phpoo_mostra

    19/40

    230 PHP Programando com Orientao a Objetos

    4.2.5 Concrete Table Inheritance

    A segunda orma de mapearmos um relacionamento de herana para o banco dedados termos uma tabela para cada classe olha, ou para cada classe concreta dahierarquia. Dessa orma, teramos em nosso exemplo duas tabelas: uma para arma-zenar os objetos Livro e outra para DVD. Cada tabela deve ter, alm dos atributos daprpria classe que ela est mapeando, todos os atributos da classe-pai. Assim, a tabelalivro iria conter os atributos da classe Livro mais os atributos da classe Material, bemcomo a tabela dvd iria conter os atributos da classe DVD mais os atributos da classeMaterial, como demonstrado na Figura 4.11.

    Figura 4.11 Concrete Table Inheritance.

    A vantagem deste pattern sobre o anterior reside no ato de que cada tabela con-tm somente os campos relativos ao seu contexto, dierentemente do Single Table

    Inheritance, no qual temos campos irrelevantes que podem fcar vazios.

    A difculdade em implementar este pattern reside no ato de que o objeto nico namemria, independente se ele um Livro ou DVD, ele az parte da mesma hierarquia declasses e os objetos devendo ser tratados com unicidade tambm no banco de dados.Dessa orma, temos de ter cuidado para que o ID no fque duplicado nas tabelas, ouseja, para que no exista na tabela livro um registro com um ID que exista na tabeladvd, e vice-versa. A unicidade no ID deve ser estendida para o universo das duas ta-belas e no somente para uma. Imagine uma tela em que o usurio pode selecionar

    qualquer tipo de material, seja Livro ou DVD. Adotando essa estratgia, teramos derealizar duas consultas ao banco de dados (uma para cada tabela) ou usar um join,agrupando os resultados em uma nica consulta. Neste caso, fca mais claro ainda anecessidade de no termos IDs que se repetem entre as tabelas.

    4.2.6 Class Table Inheritance

    A terceira orma de mapearmos uma herana para o banco de dados criar uma

    tabela para cada classe da estrutura de herana e relacionar estas tabelas por meiode pares de chaves primrias e chaves estrangeiras, como visto na Figura 4.12.

  • 8/8/2019 phpoo_mostra

    20/40

    257Captulo 4 Mapeamento Objeto-Relacional

    // recupera um objeto e realiza alterao

    $objeto= new ProdutoGateway;

    $objeto->getObject(2);

    $objeto->estoque = $objeto->estoque*2;

    $objeto->descricao = 'Salaminho Italiano';

    $objeto->update();

    // exclui o produto vinho da tabela

    $vinho->delete();

    ?>

    Resultado:

    INSERT INTO Produtos (id, descricao, estoque, preco_custo) VALUES ('1', 'Vinho Cabernet', '10', '10')

    INSERT INTO Produtos (id, descricao, estoque, preco_custo) VALUES ('2', 'Salame', '20', '20')

    SELECT * FROM produtos where id='2'UPDATE produtos set descricao = 'Salaminho Italiano', estoque = '40', preco_custo = '20'

    WHERE id = '2'

    DELETE FROM produtos where id='1'

    4.4.3 Active Record

    O pattern Active Record muito parecido com o Row Data Gateway. A dierenaprimordial que o pattern Row Data gateway no possui nenhum mtodo perten-

    cente ao modelo de negcios, somente mtodos de acesso base de dados. Quandoadicionamos lgica de negcio, ou seja, mtodos que tratam de implementar carac-tersticas do modelo de negcios a um Row Data Gateway, temos um Active Record.Este pattern pode ser utilizado com sucesso onde o modelo de negcios se parecebastante com o modelo de dados.

    Os patterns vistos anteriormente (Table Data Gateway e Row Data Gateway)proviam uma camada de acesso ao banco de dados para a camada superior (modeloconceitual). Com o pattern Active Record, temos uma nica camada, na qual temos

    lgica de negcios (modelo conceitual) e mtodos de persistncia do objeto na base dedados (gateway). Um Active Record deve prover o mesmo que um Row Data Gateway,alm de implementar mtodos do modelo conceitual (lgica de negcios).

    Um Active Record, assim como o Row Data Gateway, pode possuir mtodosgetterse setters para realizar algumas converses de tipo entre uma propriedade do objeto domodelo conceitual e uma coluna de uma tabela do banco de dados. Exemplo disso a converso de arrays ou mesmo de um objeto relacionado. Um mtodo _ _get() podeinstanciar automaticamente um objeto relacionado baseado em seu ID.

    No programa a seguir temos basicamente a repetio do que vimos no exemploanterior do pattern Row Data Gateway. A grande dierena est agora na presena

  • 8/8/2019 phpoo_mostra

    21/40

    288 PHP Programando com Orientao a Objetos

    Um Repository utiliza outros patterns j vistos neste livro, como o Query Object(classes TSqlInstruction/TCriteria). O seu uncionamento inicia pela defnio de al-gum critrio de seleo de objetos ($criteria->add(new TFilter('idade, '>, 20))) porparte do programador (Programa). Este, ento, passa o critrio para o Repository por

    meio de algum mtodo (obter coleo, remover coleo, contar elementos etc.), sendoque esses mtodos atuam sobre uma coleo de objetos que satisazem os critriosdefnidos, alterando-os ou retornando-os. Na Figura 4.23 vemos o uncionamentode um Repository Pattern.

    Figura 4.23 Repository Pattern.

    O programador no precisa saber quais instrues SQL esto sendo executadasdentro de cada um desses mtodos, ele s precisa conhecer o mtodo necessrio paradesempenhar determinada uno e passar o critrio de seleo desejado.

    Para implementar um Repository, criaremos a classe TRepository,a qual implemen-tar os mtodos necessrios para a manipulao de colees de objetos. O mtodoload() ser responsvel por carregar uma coleo de objetos, ao passo que o mtododelete() ir excluir uma coleo de objetos, e o mtodo count() ir contar quantosobjetos satisazem um determinado critrio. Em seu mtodo construtor, a TRepositoryrecebe o nome da classe que ir manipular, ou seja, a classe qual pertence a coleode objetos manipulada.

    TRepository.php

  • 8/8/2019 phpoo_mostra

    22/40

    312

    Captulo 5

    Apresentao e controle

    Aquele que conhece os outros sbio; mas quem conhece a si mesmo iluminado! Aqueleque vence os outros forte; mas aquele que vence a si mesmo poderoso! Seja humilde epermanecers ntegro.

    Lao-Ts

    Nos captulos anteriores vimos undamentos de orientao a objetos, acesso base dedados e persistncia de objetos. Agora que j conclumos esta camada da aplicao,precisamos nos preocupar com a sua interace com o usurio. Neste captulo, desen-

    volveremos uma srie de classes com o objetivo de construir o visual da aplicao deorma orientada a objetos. Para isso, na primeira parte deste captulo construiremosclasses para exibio de textos, imagens e tabelas, dentre outros elementos grfcos. Nasegunda, desenvolveremos classes com o objetivo de coordenar o uxo de execuoe controle da aplicao por meio de parmetros.

    5.1 Introduo

    Se voc programa em alguma linguagem para web h algum tempo, j deve ter per-cebido o quanto a exibio de tags HTML deixa o cdigo conuso e pouco legvelquando temos de concatenar expresses que mesclam cdigo HTML e variveis daaplicao PHP.

    Ao longo deste captulo criaremos alguns componentes de apresentao, comoimagens e textos, e alguns contineres para exibir tabelas, painis e janelas, alm dealguns componentes de controle, como dilogos de mensagem e controladores depgina de orma orientada a objetos.

    O objetivo das classes que desenvolveremos justamente o de substituir a utiliza-o de tags presentes no cdigo HTML pela utilizao dessas classes e seus mtodos,

  • 8/8/2019 phpoo_mostra

    23/40

    314 PHP Programando com Orientao a Objetos

    5.2.1 Elementos HTML

    Como descreveremos, ainda neste captulo, classes que precisam exibir diretamentecdigo HTML em tela, consideramos melhor criar uma classe para manipular as tagsHTML. Assim, podemos exibir qualquer elemento (tag) por uma estrutura orientadaa objetos, sem a necessidade de utilizar comandos como o echo ou print diretamenteno cdigo da aplicao.

    Para atingir esse objetivo, iremos criar a classe TElement. Esta classe representa umelemento HTML (

    , , ) e recebe em seu mtodo construtor o nome doelemento (tag), exibindo este elemento na tela do usurio. importante notar queuma tag possui propriedades e, neste caso, optamos por atribuir tais propriedadesdiretamente ao objeto. Lembre-se que ao atribuirmos uma propriedade que no existe

    ao objeto, automaticamente o mtodo_ _set()

    interceptar esta atribuio. Assim sendo,aremos com que as propriedades da tag sejam armazenadas no array $properties, oqual ser lido no momento da exibio da tag de abertura pelo mtodo open(). NaFigura 5.3, temos a classe TElement.

    Figura 5.3 Classe TElement.

    TElement.class.php

  • 8/8/2019 phpoo_mostra

    24/40

    327Captulo 5 Apresentao e controle

    TImage.class.php

    5.2.3.1 Exemplo

    No exemplo a seguir, exibiremos, por meio da utilizao da classe recm-criada, duasimagens na tela. Mostraremos primeiro o logotipo do gnome (gnome.png) e depois ologotipo do gimp (gimp.png), resultando na pgina exibida pela Figura 5.9.

    Figura 5.9 Exibindo imagens com a classe TImage.

  • 8/8/2019 phpoo_mostra

    25/40

    338 PHP Programando com Orientao a Objetos

    $total += $pessoa[3];

    $i++;

    }

    // instancia uma linha para o totalizador

    $linha = $tabela->addRow();

    // adiciona clulas

    $celula= $linha->addCell('Total');

    $celula->colspan = 3;

    $celula = $linha->addCell($total);

    $celula->bgcolor = "#a0a0a0";

    $celula->align = "right";

    // exibe a tabela

    $tabela->show();

    ?>

    Neste novo exemplo, demonstramos o objeto tabela contendo objetos de tiposdierentes, como um objeto do tipo TImage (imagem) e TParagraph (pargrao). O obje-tivo principal demonstrar o objeto TTable como continer, capaz de conter, agrupare organizar outros objetos que oeream em sua interace o mtodo show(). Veja naFigura 5.14 o resultado.

    Figura 5.14 Tabela orientada a objetos.

  • 8/8/2019 phpoo_mostra

    26/40

    344 PHP Programando com Orientao a Objetos

    painel.php

    5.3.3 Janelas

    Uma janela pop-up uma janela que se abre sobre a janela principal da aplicao,geralmente sem muitas opes e de tamanho reduzido, para exibir algumas inorma-es como o resultado de uma operao, uma mensagem ao usurio, um ormulriode dados, uma propaganda, dentre outros. Entretanto, abrir janelas uma prtica nomuito bem aceita no ambiente web, e a maioria dos navegadores de ltima gerao

    j conta com erramentas de bloqueio para abertura de janelas pop-up.

    Apesar disso, interessante termos disponvel esse recurso sempre que quisermosdar um destaque maior para um evento que ocorre. Para contornar esta situao, uma

    das ormas de continuar exibindo uma janela para o usurio simular a abertura deuma janela utilizando uma camada com um boto de echar (para esconder a

  • 8/8/2019 phpoo_mostra

    27/40

    352 PHP Programando com Orientao a Objetos

    Figura 5.20 Janelas construdas com a classe TWindow.

    window.php

  • 8/8/2019 phpoo_mostra

    28/40

    372 PHP Programando com Orientao a Objetos

    if (file_exists("app.widgets/{$classe}.class.php"))

    {

    include_once "app.widgets/{$classe}.class.php";

    }

    }

    // exibe uma mensagem de informao

    new TMessage('info', 'Esta ao inofensiva, isto s um lembrete');

    ?>

    No exemplo a seguir, estamos azendo uso da classe TMessage para exibir a mensa-gem de erro ao usurio Agora eu estou alando srio. Este erro atal! , como vistona Figura 5.31.

    Figura 5.31 Mensagem de erro.

    message_error.php

  • 8/8/2019 phpoo_mostra

    29/40

    377

    Captulo 6

    Formulrios e listagens

    Uma sociedade s ser democrtica quando ningum for to rico que possa compraralgum e ningum for to pobre que tenha de se vender a algum.

    Jacques Rousseau

    Neste captulo iremos nos concentrar em alguns dos componentes que esto entreos mais utilizados na maioria das aplicaes: ormulrios e listagens. Utilizamos or-mulrios para as mais diversas ormas de entrada de dados na aplicao, seja para ainsero de novos registros, para defnio de preerncias do sistema ou para defnir

    parmetros para fltragem de um relatrio, dentre outros. Utilizamos listagens paraexibir os dados da aplicao, seja para simples conerncia, em relatrios ou aindapossibilitando a edio e excluso de registros. Neste captulo criaremos componentesque visam acilitar a implementao de ormulrios e listagens de orma orientadaa objetos.

    6.1 Formulrios

    Um ormulrio um conjunto de campos dispostos ao usurio de orma agrupadapara que este os preencha com inormaes requisitadas pela aplicao. Um ormulrio composto por campos de diversos tipos como caixas de digitao, radio buttonse combo-boxes, alm de possuir botes de ao, os quais defnem o programa queprocessar os dados. Em uma aplicao temos interaces de entrada de dados, rotinasde processamento e interaces para apresentao de dados. Podemos dizer que osormulrios dominam amplamente as interaces de entradas de dados em aplicaes,portanto imprescindvel dominarmos o seu uso e tambm simplifcarmos ao m-

    ximo para ganharmos maior produtividade no desenvolvimento.

  • 8/8/2019 phpoo_mostra

    30/40

    385Captulo 6 Formulrios e listagens

    Classe Descrio

    TEntry Classe que representar campos de entrada de dados .

    TPassword Classe que representar campos de senha .

    TFile Classe que representar um boto de seleo de arquivo .

    THidden Classe que representar um campo escondido .

    TCombo Classe que representar uma lista de seleo .

    TText Classe que representar uma rea de texto .TCheckButton Classe que representar campos de checagem .

    TCheckGroup Classe que representar um grupo de TCheckButton.TRadioButton Classe que representar botes de rdio .

    TRadioGroup Classe que representar um grupo de TRadioButton.

    Acima de todas estas classes listadas anteriormente, teremos a classe TField. Talclasse ir prover a inra-estrutura bsica e comum a todo campo de um ormulrio,ou seja, aquelas operaes bsicas que todo elemento de um ormulrio dever oe-recer, como mtodos para alterar seu nome, seu valor e seu tamanho. Veja a seguirum exemplo de ormulrio contendo as classes que sero criadas.

    Figura 6.2 Exemplo de formulrio.

    A classe responsvel por montar o ormulrio ir encapsular os elementos ante-riormente listados. Para isso, criaremos a classe TForm, que poder conter, por meio

    de uma estrutura de agregao, qualquer elemento derivado da classe TField. Veja aseguir o diagrama de classes resumido.

  • 8/8/2019 phpoo_mostra

    31/40

    399Captulo 6 Formulrios e listagens

    Figura 6.7 Visual de tabela.

    O ormulrio que construiremos com o programa a seguir ormado por trstabelas. Existe uma grande tabela com duas linhas: a primeira linha contm o ttu-lo do ormulrio; a segunda contm duas clulas. Como o componente TTable que

    criamos aceita outros objetos em suas clulas, nestas duas clulas da segunda linhacolocamos uma nova tabela dentro de cada uma. Nestas tabelas internas temos,por sua vez, novas linhas e colunas para dispor e organizar seus elementos (rtulosde texto e campos de digitao de dados). Utilizamos esta ttica para organizar ovisual do ormulrio em duas colunas, cada uma contendo uma nova tabela. Noteque podemos azer diversas combinaes, adicionando tabelas dentro de tabelas ouainda outros componentes para organizar o layout de nosso ormulrio. Veja a seguiro resultado fnal.

    Figura 6.8 Formulrio com tabela.

    formA.php

  • 8/8/2019 phpoo_mostra

    32/40

    422 PHP Programando com Orientao a Objetos

    Figura 6.19 Usando a TForm de maneira estruturada e esttica.

    form1.php

  • 8/8/2019 phpoo_mostra

    33/40

    445Captulo 6 Formulrios e listagens

    6.4 Listagens orientadas a objetos

    6.4.1 Introduo

    Nos exemplos anteriores, vimos como se d a visualizao de listagens estticas etambm com inormaes do banco de dados. Construiremos, agora, uma classe quepossibilite criar listagens utilizando uma estrutura totalmente orientada a objetos,denominada TDataGrid. Esta classe ir conter alguns mtodos que possibilitaro aoprogramador adicionar novas colunas e tambm aes na listagem. As colunas iroconter os dados da listagem; as aes sero exibidas na rente dos dados e permitiromanipul-los (deletar, editar, visualizar).

    Veja na Figura 6.27 o resultado de uma listagem construda com a classe TDataGrid.

    No lado esquerdo da tabela temos os cones contendo as aes e, em seguida,as colunas contendo os dados. As aes sero representadas por objetos do tipoTDataGridAction, e as colunas sero representadas por objetos do tipo TDataGridColumn.O objeto do tipo TDataGrid ir conter objetos do tipo TDataGridColumn e TDataGridActionem uma estrutura de agregao, como veremos a seguir. Poderemos agregar diversascolunas (TDataGridColumn) e aes (TDataGridAction) na listagem (TDataGrid).

    Figura 6.27 Exemplo de listagem construda com TDataGrid.

    6.4.2 Elementos de uma DataGrid

    6.4.2.1 TDataGrid

    A classe TDataGrid ser responsvel pela exibio de listagens. Uma listagem basica-mente um tipo de tabela. Assim, iremos aproveitar toda estrutura j desenvolvidapela classe TTable e iremos utiliz-la como superclasse de TDataGrid. Em seu mtodoconstrutor iremos criar os estilos que sero utilizados para renderizar a tabela eseu cabealho. O estilo tdatagrid_table ser aplicado na tabela para indicar algumas

    caractersticas como a onte e o espaamento entre clulas. O estilo tdatagrid_colser utilizado para as colunas do cabealho. Este estilo ir defnir a espessura, a cordas bordas e do undo de cada clula do cabealho. O estilo tdatagrid_col_over ser

  • 8/8/2019 phpoo_mostra

    34/40

    462 PHP Programando com Orientao a Objetos

    Figura 6.33 Listagem orientada a objetos e esttica.

    list2.php

  • 8/8/2019 phpoo_mostra

    35/40

    477

    Captulo 7

    Criando uma aplicao

    Quando morremos, nada pode ser levado conosco, com a exceo dassementes lanadas por nosso trabalho e do nosso conhecimento.

    Dalai Lama

    Ao longo desta obra, criamos uma srie de classes para automatizar desde a conexocom banco de dados, transaes, persistncia de objetos e manipulao de coleesde objetos, at a criao de ormulrios, listagens, tabelas e aes, dentre outros. Aolongo de cada captulo procuramos dar exemplos da utilizao de cada classe e agora

    chegou o momento de utilizar este conhecimento para construir algo maior, umaaplicao completa. Para isso, estudaremos ormas de organizar e estruturar estaaplicao, como o padro MVC e Web Services.

    7.1 Organizao da aplicao

    7.1.1 Model View Controller

    Model View Controller (MVC) o design pattern mais conhecido de todos. Seusconceitos remontam plataorma Smaltalk na dcada de 1970. Basicamente umaaplicao que segue o pattern Model View Controller dividida em trs camadas. Asletras que compem o nome deste pattern representam cada um desses aspectos.

    Model signifca modelo. Um modelo um objeto que representa as inormaesdo domnio de negcios da aplicao. A camada de Modelo pode ser representada porum Domain Model ou um Active Record, dentre outros. View signifca Visualizao.

    Nesta camada, teremos a defnio da interace com o usurio, como os campos seroorganizados e distribudos na tela. Por exemplo: se temos um cadastro de pessoas,em algum lugar precisamos defnir como ser este ormulrio, sua estrutura. Esta

  • 8/8/2019 phpoo_mostra

    36/40

    498 PHP Programando com Orientao a Objetos

    no exista, ento poder ser cadastrado, como acontece na tabela de cidades. Veja naFigura 7.7 nosso Modelo Entidade Relacionamento.

    Figura 7.7 Modelo Entidade Relacionamento.

    A venda um caso parte. A empresa pode realizar inmeras vendas, para clientesdierentes e em datas dierentes. Portanto, precisaremos armazenar para qual clientea venda oi realizada e em qual data. Tambm poderemos armazenar o valor total davenda e tambm o valor pago, caso tenha sido concedido algum desconto. Uma venda

    composta de produtos. Em uma venda, podem ser vendidas quantidades dierentesde produtos. Portanto az-se necessria a criao de uma tabela para armazenar quaisoram os produtos que participaram de uma determinada venda. Para isso, criaremosa tabela item, na qual cada item corresponde a um produto que ez parte de umavenda. Nessa tabela ainda teremos a quantidade vendida de cada item, alm, claro,das chaves estrangeiras para cada tabela.

    7.2.2 Cadastro de cidades

    O cadastro de cidades ser um cadastro bsico. Chamamos de bsico porque utili-zado de orma a complementar um registro mais importante, que carrega um maiornmero de inormao e que, neste caso, o cliente. O nosso cadastro de cidadester somente o nome da cidade e o estado, sendo que o estado ser representado porapenas dois caracteres (UF) e vir a partir de uma combo-box.

    7.2.2.1 Modelo

    O nosso registro de cidade ser apenas uma extenso da classe TRecord, no oere-

    cendo nenhum novo mtodo. S utilizaremos os mtodos bsicos para armazenar oregistro no banco de dados (store), excluir (delete) e carregar (load). A classe de modeloCidadeRecord ser armazenada na pasta app.model.

  • 8/8/2019 phpoo_mostra

    37/40

    500 PHP Programando com Orientao a Objetos

    instanciar os objetos, adicionamos os mesmos em uma tabela. Para este ormulrio,criaremos um boto de ao (save_button) que, ao ser clicado ir recarregar a pginae executar o mtodo onSave(), de modo que sero tomadas as medidas para que oregistro seja armazenado no banco de dados.

    CidadesList.class.php

  • 8/8/2019 phpoo_mostra

    38/40

    550 PHP Programando com Orientao a Objetos

    7.2.7.2 Aplicao

    Nosso programa de emisso do relatrio de vendas ser muito simples. Ser compostobasicamente de um ormulrio, no qual o usurio ir preencher duas datas: a datainicial e a data fnal. O programa dever pesquisar na base de dados todas as vendasrealizadas entre esses dois perodos e montar o relatrio em tela. Veja na Figura 7.19o relatrio de vendas.

    Figura 7.19 Relatrio de vendas.

    Nossa pgina ter ento um ormulrio com dois campos do tipo TEntry (data_inie data_fm). O ormulrio ter tambm o boto de ao Gerar Relatrio que est vin-culado execuo do mtodo onGera(), o qual tem como uno ler o intervalo dedatas e montar o relatrio em tela.

    RelatorioForm.class.php

  • 8/8/2019 phpoo_mostra

    39/40

    555Captulo 7 Criando uma aplicao

    /*

    * mtodo conv_data_to_br()

    * Converte uma data para o formato dd/mm/yyyy

    * @param $data = data no formato yyyy-mm-dd

    */

    function conv_data_to_br($data){

    // captura as partes da data

    $ano = substr($data,0,4);

    $mes = substr($data,5,2);

    $dia = substr($data,8,4);

    // retorna a data resultante

    return "{$dia}/{$mes}/{$ano}";

    }

    }

    ?>

    7.3 Web Services

    7.3.1 Introduo

    Web Services so servios disponibilizados pela internet por meio de um conjuntode tecnologias independentes de plataorma que permitem interoperabilidade entreaplicaes por meio da entrega de servios e a comunicao entre aplicaes por meiode padres abertos e conhecidos como XML e SOAP. A interoperabilidade providapelos Web Services torna possvel agregar e publicar dinamicamente aplicaes. WebServices permitem que tecnologias de dierentes plataormas acionem servios e secomuniquem umas com as outras, como ilustrado a seguir.

    Figura 7.20 Web Services.

  • 8/8/2019 phpoo_mostra

    40/40

    564 PHP Programando com Orientao a Objetos

    uma interace enxuta, que encapsula uma srie de chamadas a mtodos e objetos daaplicao servidora, por um meio remoto.

    Do lado cliente da aplicao, teremos a classe NovoCliente, que na verdade umajanela GTK (GtkWindow). Esta janela disponibiliza alguns campos para preenchimentodo usurio. Quando este terminar de preencher esses campos e clicar no boto Salvar,o mtodo onSaveClick() ser executado, instanciando um objeto da classe SoapClient, querealiza a conexo com o servidor SoapServer, de modo que ser executado o mtodohandle() que ir despachar a chamada ao mtodo correto no lado do servidor, queneste caso o mtodo salvar().Veja na Figura 7.24 a estrutura da aplicao.

    Figura 7.24 Estrutura da aplicao proposta.

    A primeira parte da aplicao ser o servidor. Para implement-lo, criaremos aclasse ClienteFacade, que estar dentro do arquivo server.php. Esta classe oerecer omtodo salvar(), que recebe um array com dados de cliente. O mtodo salvar() instan-cia um objeto ClienteRecord, alimenta-o com os dados vindos do array e armazena-ona base de dados pelo mtodo store().

    Observe que no temos as classes necessrias declaradas neste arquivo. Assim,escrevemos a uno _ _autoload(), que se encarregar de automaticamente carregaras classes a partir das pastas app.ado e app.model quando necessrio.

    As excees lanadas da orma throw no cdigo da aplicao servidora no socapturadas pelo bloco de try/catch da aplicao cliente do Web Service. Para que issouncione, precisamos retornar o objeto de exceo por um return e no lan-lo.Neste programa, estamos capturando qualquer exceo lanada e retornando-a naorma de um objeto SoapFault.

    Nesta aplicao, mostraremos uma orma dierente de utilizar Web Services:sem o arquivo WSDL. Dependendo dos parmetros que passamos no momento deinstanciarmos os objetos SoapServer e SoapClient, podemos identifcar que estamos no