Você está na página 1de 13

PHP 5 Orientado a Objetos

Introduo ao PHP 5
Com as primeiras 2 verses de PHP, PHP 3 e PHP 4, conseguiram uma plataforma potente e estvel para a programao de pginas do lado do servidor. Estas verses serviram muito de ajuda para a comunidade de desenvolvedores, tornando possvel que PHP seja a linguagem mais utilizada na web para a realizao de pginas avanadas. Entretanto, ainda existiam pontos negros no desenvolvimento de PHP que trataram de solucionar com a verso 5, aspectos que fizeram falta na verso 4, quase desde o dia de seu lanamento. Referimonos principalmente programao orientada a objetos (POO) que, apesar de estar suportada a partir de PHP3, s implementava uma parte muito pequena das caractersticas deste tipo de programao. Nota: A orientao a objetos uma maneira de programar que trata de modelar os processos de programao de uma maneira prxima realidade: tratando a cada componente de um programa como um objeto com suas caractersticas e funcionalidades. Podemos ver uma pequena introduo no artigo O que a programao orientada a objetos. O principal objetivo de PHP5 foi melhorar os mecanismos de POO para solucionar as carncias das verses anteriores. Um passo necessrio para conseguir que PHP seja uma linguagem apta para todo tipo de aplicaes e meios, inclusive os mais exigentes.

Instalao de PHP5 com WAMP5


Existe um pacote de instalao chamado WAMP5 que pode instalar em conjunto Apache, PHP 5, MySQL e PHPMyAdmin. Neste captulo, ainda nos referimos forma de instalao de WAMP5 e outras opes para aumentar as possibilidades do pacote. Existe uma maneira de comear a utilizar PHP5 em Windows sem ter que sofrer as complicaes tpicas da instalao dos servidores necessrios para programar em PHP. Trata-se de instalar um pacote chamado WAMP, que permite instalar e configurar em um s processo o servidor Apache, a base de dados MySQL e o mdulo de programao em PHP verso 5. WAMP um sistema indicado para os usurios que no tm instalado no sistema nenhum dos programas necessrios para programar em PHP (Apache, PHP e MySQL), j que realiza uma instalao completa e desde zero. Mas tambm podem utilizar este programa os usurios que dispem de Apache, PHP e/ou MySQL em seu sistema. Em cujo caso, simplesmente se realizar outra cpia das aplicaes em um diretrio distinto, que princpio, no tem porque interferir com as outras instalaes alojadas em nosso computador. Programas que contem WAMP5 O software que se instala com WAMP5 contem os seguintes servidores e programas: Apache 2.2.6. O servidor de pginas web mais difundido do mercado. Embora a ltima verso deste servidor seja Apache 2, instala-se uma verso anterior que mais estvel. Existe um Add-on que permite substituir a verso 1.3.31 de Apache pela ltima verso. PHP 5.2.5. O motor renovado da linguagem. MySQL 5.0.45. A base de dados mais difundida para utilizar com PHP. PHPmyadmin. Um software que permite administrar uma base de dados atravs de uma interface web. SQLitemanager. Um sistema para administrar uma base de dados a partir de sentenas SQL. Instalao de WAMP Nota: A verso dos software acima so referentes at a data de criao desta apostila. A instalao se realiza atravs de um executvel Windows onde podem se introduzir poucas configuraes, apenas o diretrio onde desejarmos que se instalem os programas. Depois do processo de instalao foram criados dois servios com o servidor web e o de base de dados: Servio wampapache: Relacionado com o servidor Apache. Servio wampmysql: Relacionado com a base de dados MySQL. Ademais, dentro do diretrio onde tivermos instalado WAMP5 ter sido criado uma pasta chamada "www", que corresponde com o diretrio de publicao, ou seja, o lugar onde devem ser colocadas as

pginas web. Durante a instalao tambm devemos decidir se desejamos que WAMP5 se inicie automaticamente ao ligar o computador ou se desejamos que seu funcionamento se realize manualmente. Funcionamento dos servidores Quando instalamos WAMP5 se cria um grupo de programas chamado WampServer, onde poderemos encontrar uma opo que pe "Start Wampserver", que ser necessrio executar se no tivermos selecionado que o servidor se inicie automaticamente. Uma vez o WampServer em funcionamento obteremos um cone na barra de tarefas com a forma parecida a de um marcador de velocidade. Se clicarmos sobre esse cone, abrir um menu com opes variadas para providenciar os servios relacionados com o pacote. Podemos provar se os servios esto funcionando perfeitamente acessando pgina de incio do servidor, escrevendo na barra de endereos de nosso navegador algo como http://localhost/. Ento dever aparecer uma pgina com vrios links s distintas ferramentas instaladas com WAMP5, alm de algumas pginas de proba de PHP. Add-ons Existem vrios acrscimos que podem ser instalados com WAMP, para ampliar as possibilidades do pacote. Por exemplo, podemos instalar um add-on para permitir que WAMP trabalhe com PHP5 ou com PHP4, criando una nova opo no menu de WAMP5 que permite mudar de uma verso a outra de PHP. Existem outros acrscimos disponveis: Instalar ActiveState Perl em nosso sistema, para permitir a execuo de CGI. Atualizar a verso de Apache 2. Instalar Zend Optimizer, para melhorar o comportamento em tempo de execuo de PHP. Por ltimo, o add-on que instala Webalizer, um sistema para obter estatsticas de uso do servidor web. Pode-se obter mais informao deste sistema e opes para download na pgina http://www.en.wampserver.com/

Modelo de orientao a objetos em PHP 5


Como PHP 5 trabalha com a orientao a objetos. Lista das novidades em relao aos objetos em verses anteriores. Um dos problemas mais bsicos das verses anteriores de PHP era a clonagem de objetos, que se realizava ao atribuir um objeto a outra varivel ou ao passar um objeto por parmetro em uma funo. Para resolver este problema PHP5 usa os manipuladores de objetos (Object handles), que so uma espcie de ponteiros que apontam os espaos de memria onde residem os objetos. Quando se atribui um manipulador de objetos ou se passa como parmetro em uma funo, se duplica o prprio object handle e no o objeto em si. Nota: Tambm pode-se realizar uma clonagem de um objeto, para obter uma cpia exata, mas que no o prprio objeto. Para isso, utilizamos uma nova instruo chamada " clone", que veremos mais adiante.

Algumas caractersticas do trabalho com POO em PHP 5


Vejamos a seguir uma pequena lista das novas caractersticas da programao orientada a objetos (POO) em PHP5. No vamos descrever exaustivamente cada caracterstica. Faremos isso mais adiante neste mesmo manual. 1.- Nomes fixos para os construtores e destrutores Em PHP 5 temos que utilizar nomes pr-definidos para os mtodos construtores e destrutores (Os que se encarregam de resumir as tarefas de iniciao e de destruio dos objetos. Agora se chamam

__construct e __destruct. 2.- Acceso public, private e protected a propriedades e mtodos A partir de agora podemos utilizar os modificadores de acesso habituais da POO. Estes modificadores servem para definir que mtodos e propriedades das classes so acessveis desde cada meio. 3.- Possibilidade de uso de interfaces As interfaces se utilizam na POO para definir um conjunto de mtodos que implementa uma classe. Uma classe pode implementar vrias interfaces ou conjuntos de mtodos. Na prtica, o uso de interfaces utilizado muitas vezes para suprir a falta de herana mltipla de linguagens como PHP ou Java. Explicaremos isto com detalhe mais adiante. 4.- Mtodos e classes final Em PHP 5 pode-se indicar que um mtodo "final". Com isso, no se permite sobrescrever esse mtodo, em uma nova classe que o herde. Se a classe "final", o que se indica que esta classe no permite ser herdada por outra classe. 5.- Operador instanceof Utiliza-se para saber se um objeto uma instncia de uma classe determinada. 6.- Atributos e mtodos static Em PHP5 podemos fazer uso de atributos e mtodos "static". So as propriedades e funcionalidades as quais se pode acessar a partir do nome de classe, sem a necessidade de haver instanciado um objeto de tal classe. 7.- Classes e mtodos abstratos Tambm possvel criar classes e mtodos abstratos. As classes abstratas no se podem instanciar, costumam ser utilizadas para herda-las de outras classes que no tm porque serem abstratas. Os mtodos abstratos no podem ser chamados, utilizam-se mais para serem herdados por outras classes, onde no tm porque serem declarados abstratos. 8.- Constantes de classe Pode-se definir constantes dentro da classe. Logo, pode-se acessar tais constantes atravs da prpria classe. 9.- Funes que especificam a classe que recebem por parmetro Agora podem se definir funes e declarar que devem receber um tipo especfico de objeto. No caso de que o objeto no seja da classe correta, se produz um erro. 10.- Funo __autoload habitual que os desenvolvedores escrevam um arquivo por cada classe que realizam, como tcnica para organizar o cdigo das aplicaes. Por essa razo, s vezes fatigante realizar os incluis de cada um dos cdigos das classes que se utilizam em um script. A funo __autoload serve para tentar incluir o cdigo de uma classe que se necessite, e que no tenha sido declarada ainda no cdigo que est sendo executada. 11.- Clonagem de objetos Se desejarmos, podemos realizar um objeto a partir da cpia exata de outro objeto. Para isso, utilizase a instruo"clone". Tambm pode se definir o mtodo __clone para realizar tarefas associadas coma clonagem de um objeto.

Classes em PHP 5
Vemos o que uma classe, como podemos defini-la e instanci-la. Classes em PHP 5 As classes em Programao orientada a objetos (POO) so definies dos elementos que formam um sistema, neste caso, definies dos objetos que vo intervir em nossos programas.

Um objeto se define indicando que propriedades e funcionalidades tm. Justamente essas declaraes so o que uma classe. Quando se faz uma classe simplesmente se especifica que propriedades e funcionalidades tm. Por exemplo, um homem poderia ter como propriedades o nome ou a idade e como funcionalidades, comer, mover-se ou estudar. Na classe homem, declararamos dois atributos: a idade ou o nome, que seriam como duas variveis. Tambm deveramos criar trs mtodos, com os procedimentos a seguir para que o homem possa comer, mover-se ou estudar. Estes mtodos se definem declarando funes dentro da classe. O cdigo para definir uma classe pode ser visto a seguir: class home{ var $nome; var $idade; function comer($comida){ //aqui o cdigo do mtodo } function moverse($destino){ //aqui o cdigo do mtodo } function estudar($diciplina){ //aqui o cdigo do mtodo }

Poder se comprovar que este cdigo no difere em nada das verses anteriores de PHP, que j suportavam certas caractersticas da POO. Esta situao mudar explorando um pouco mais as caractersticas mais avanadas de PHP 5, que implicaro melhoras que no estavam presentes nas verses anteriores Instanciar objetos a partir de classes Vimos que uma classe somente uma definio. Se quisermos trabalhar com as classes devemos instanciar objetos, processo que consiste em gerar um exemplar de uma classe. Por exemplo, temos a classe homem anterior. Com a classe em si no podemos fazer nada, mas podemos criar objetos homem a partir dessa classe. Cada objeto homem ter umas caractersticas prprias, como a idade ou o nome. Ademais poder desempenhar umas funes como comer ou mover-se, agora tambm, cada um comer ou se mover por sua prpria conta quando lhe for solicitado, sem interferir princpio, com o que possa estar fazendo outro homem. Aproveitando, vamos ver como se gerariam dois homens, ou seja, como se instanciariam dois objetos da classe homem. Para isso, utilizamos o operador new. $carol = new nome; $jorge = new nome; Concluso importante se dar conta da diferena entre um objeto e uma classe. A classe uma definio de umas caractersticas e funcionalidades, algo abstrato que se concretiza com a instanciao de um objeto de tal classe. Um objeto j tem propriedades, com seus valores concretos, e podem ser passadas mensagens (chamar aos mtodos) para que faam coisas.

Construtores em PHP 5
Vamos ver o que um construtor e para que serve, alm de um exemplo simples de uma classe que define um construtor. Os construtores se encarregam de resumir as aes de iniciao dos objetos. Quando instanciamos um objeto, temos que realizar vrios passos em sua iniciao, por exemplo, dar valores a seus atributos e isso o que se encarrega o construtor. Os construtores podem receber dados para iniciar os objetos como se deseje em cada caso. A sintaxe para a criao de construtor varia em relao a do PHP 3 e 4, pois deve se chamar com um nome fixo: __construct. (So dois hfens baixos(underline), antes da palavra "construct") A longo dos exemplos deste manual vamos ir criando um cdigo para gesto de um vdeo club. Vamos comear definindo uma classe cliente, que utilizaremos logo em nosso programa. class cliente{ var $nome; var $numero; var $filmes_alugados; function __construct($nome,$numero){ $this->nome=$nome; $this->numero=$numero; $this->filmes_alugados=array; } function dame_numero{ return $this->numero; } } O construtor nesta classe recebe o nome e nmero que atribuir ao cliente, que introduz logo em suas correspondentes propriedades. Ademais inicia o atributo filmes_alugados como um array, neste caso vazio porque ainda no tem nenhum filme em seu poder. Logo, criamos um mtodo muito simples para poder utilizar o objeto. Vamos ver umas aes simples para ilustrar o processo de instanciao e utilizao dos objetos. //instanciamos dois objetos cliente $cliente1 = new cliente("Pedro", 1); $cliente2 = new cliente("Roberto", 564); //mostramos o numero de cada cliente criado "O identificador do cliente 1 : " . $cliente1->dame_numero; "O identificador do cliente 2 : " . $cliente2->dame_numero; Este exemplo obteria esta sada como resultado de sua execuo: O identificador do cliente 1 : 1 O identificador do cliente 2 : 564

Destrutores em PHP 5
Explicao dos destrutores em PHP5 e exemplos de funcionamento. Os destrutores so funes que se encarregam de realizar as tarefas que se necessita executar quando um objeto deixa de existir. Quando um objeto j no est referenciado por nenhuma varivel, deixa de ter sentido que esteja armazenado na memria, portanto, o objeto deve ser destrudo para liberar seu espao. No momento de sua destruio, a funo se chama destrutor, que pode realizar as tarefas que o programador estime oportuno realizar.

A criao do destrutor opcional. Somente devemos cri-lo, se desejarmos fazer alguma coisa quando um objeto se elimine da memria. O destrutor como qualquer outro mtodo da classe, embora deve se declarar com um nome fixo: __destruct. No cdigo seguinte veremos um destrutor em funcionamento. Embora a ao que se realiza ao destruir o objeto no muito til, pode nos servir bem para ver como trabalha. class cliente{ var $nome; var $numero; var $filmes_alugados; function __construct($nome,$numero){ $this->nome=$nome; $this->numero=$numero; $this->filmes_alugados=array; } function __destruct{ "<br>destruido: " . $this->nome; } function dame_numero{ return $this->numero; } } //instanciamos dois objetos cliente $cliente1 = new cliente("Pedro", 1); $cliente2 = new cliente("Roberto", 564); //mostramos o numero de cada cliente criado "O identificador do cliente 1 : " . $cliente1->dame_numero; "<br>O identificador do cliente 2 : " . $cliente2->dame_numero; Este cdigo igual que o anterior. Somente acrescentamos o destrutor, que imprime uma mensagem na tela com o nome do cliente que foi destrudo. Depois de sua execuo obteramos a seguinte sada. O identificador do cliente 1 : 1 O identificador do cliente 2 : 564 destrudo: Pedro destrudo: Roberto Como vimos, antes de acabar o script, libera-se o espao na memria dos objetos, com o qual se executa o destrutor e aparece a correspondente mensagem na pgina. Um objeto pode ficar sem referncias e, portanto, ser destrudo, por muitas razes. Por exemplo, o objeto pode ser uma varivel local de uma funo e ao finalizar a execuo dessa funo local deixaria de ter validade, sendo ento destrudo. O cdigo seguinte ilustra como uma varivel local a qualquer mbito (por exemplo, local a uma funo), se destri quando esse mbito foi finalizado. function cria_cliente_local{ $cliente_local = new cliente("sou local", 5); } cria_cliente_local A funo simplesmente cria uma varivel local que contem a instanciao de um cliente. Quando a funo se acaba, a varivel local deixa de existir, e ento, chama-se ao destrutor definido para esse objeto.

Nota: Tambm podemos nos desfazer de um objeto sem a necessidade de acabar com o mbito onde foi criado. Para isso, temos a funo unset que recebe uma varivel e a elimina da memria. Quando se perde uma varivel que contem um objeto e esse objeto deixa de ter referncias, elimina-se ao objeto e chama-se ao destrutor.

Modificadores de acesso a mtodos e propriedades em PHP


So os Public, Protected e Private, que se podem conhecer porque j se utilizam e outras linguagens orientados a objetos. Veremos neste captulo os novos modificadores de acesso aos mtodos e atributos dos objetos que foram incorporados em PHP 5. Estes modificadores de acesso so os conhecidos public, protected e private, que j dispem de outras linguagens como Java. Um dos princpios da programao orientada a objetos o encapsulamento, que um processo no qual se ocultam as caractersticas internas de um objeto queles elementos que no tm porque conhecelas. Os modificadores de acesso servem para indicar as permisses que tero outros objetos para acessar a seus mtodos e propriedades. Modificador public o nvel de acesso mais permissivo. Serve para indicar que o mtodo ou atributo da classe pblico. Neste caso pode-se acessar a este atributo, para visualiz-lo ou edita-lo, por qualquer outro elemento de nosso programa. o modificador que se aplica se no se indica outra coisa. Vejamos um exemplo de classe onde declaramos como public seus elementos, um mtodo e uma propriedade. Trata-se da classe "dado", que tem um atributo com sua pontuao e um mtodo para tirar o dado o obter uma nova pontuao aleatria. class dado{ public $pontos; function __construct{ srand((double)microtime*1000000); } public function tirar{ $this->pontos=$randval = rand(1,6); }

$meu_dado = new dado; for ($i=0;$i<30;$i++){ $meu_dado->tirar; "<br>Saiu " . $meu_dado->pontos . " pontos"; } Vemos a declarao da classe dado, e logo umas linhas de cdigo para ilustrar seu funcionamento. No exemplo se realiza um loop 30 vezes, nas quais se tira o dado e se mostra a pontuao que se obteve. Como o atributo $pontos e o mtodo tirar so pblicos, podemos acess-los de fora do objeto, ou que o mesmo, de fora do cdigo da classe. Modificador private o nvel de acesso mais restritivo. Serve para indicar que essa varivel somente vai poder ser acessada pelo prprio objeto, nunca de fora. Se tentarmos acessar um mtodo ou atributo declarado private de fora do prprio objeto, obteremos uma mensagem de erro indicando que no possvel a este elemento. Se no exemplo anterior tivssemos declarado private o mtodo e a propriedade da classe dado, teramos recebido uma mensagem de erro.

Aqui temos outra possvel implementao da classe dado, declarando como private o atributo pontos e o mtodo tirar. class dado{ private $pontos; function __construct{ srand((double)microtime*1000000); } private function tirar{ $this->pontos=$randval = rand(1,6); } public function dar_nova_pontuacao{ $this->tirar; return $this->pontos; }

$meu_dado = new dado; for ($i=0;$i<30;$i++){ "<br>Han salido " . $meu_dado->dar_nova_pontuacao . " pontos"; } Tivemos que criar um novo mtodo pblico para operar com o dado, porque se tudo privado no h forma de fazer uso dele. O mencionado mtodo dar_nova_pontuacao, que realiza a ao de tirar o dado e devolver o valor que saiu. Modificador protected Este indica nvel de acesso mdio e um pouco mais especial que os anteriores. Serve para que o mtodo ou o atributo seja pblico dentro do cdigo da prpria classe e de qualquer classe que herde daquela onde est o mtodo ou propriedade protected. privado e no acessvel de qualquer outra parte. Ou seja, um elemento protected pblico dentro da prpria classe e em suas heranas. Mais adiante explicaremos a herana e poderemos oferecer exemplos com o modificador protected. Concluso Muitas vezes o prprio desenvolvedor o que fixa seu critrio na hora de aplicar os distintos modificadores de acesso a atributos e mtodos. Pouca proteo implica que os objetos percam seu encapsulamento e com isso, uma das vantagens da POO. Uma proteo maior pode tornar mais trabalhoso gerar o cdigo do programa, mas em geral, aconselhvel.

A herana em PHP5
Explicamos a herana em PHP 5, um processo pelo qual os objetos podem herdar as caractersticas de outros, de modo que se podem fazer objetos especializados, baseados em outros mais gerais. A herana um dos mecanismos fundamentais da programao orientada a objetos. Por meio da herana, podem se definir classes a partir da declarao de outras classes. As classes que herdam incluem os mtodos como as propriedades da classe a partir da qual esto definidos. Por exemplo, pensemos na classe "veculo". Esta classe geral pode incluir as caractersticas gerais de todos os veculos (atributos da classe), como a matrcula, ano de fabricao e potncia. Ademais, incluir algumas funcionalidades (mtodos da classe) como poderiam ser, ligar ou mover. Agora tambm, na prtica existem vrios tipos de veculos, como os carros, os nibus e os caminhes. Todos eles tm umas caractersticas comuns, que foram definidas na classe veculo. Ademais,

tero uma srie de caractersticas prprias do tipo de veculo, que, princpio, no tm outros tipos de veculos. Por exemplo, os caminhes podem ter uma carga mxima permitida ou os nibus um nmero de lugares disponveis. Da mesma forma, as classes mais especficas podem ter umas funcionalidades prprias, como os caminhes carregar e descarregar, ou os nibus aceitar_passageiros ou vender_passagem. O normal em sistemas de herana que as classes que herdam de outras incluam novas caractersticas e funcionalidades, parte dos atributos e mtodos herdados. Porm, isto no imprescindvel, de modo que podem se criar objetos que herdem de outros e no incluam nada novo. Sintaxe de herana em PHP 5 A programao orientada a objetos nos oferece uma srie de mecanismos para definir este tipo de estruturas, de modo que possam se criar hierarquias de objetos que herdam uns de outros. Veremos agora como definir estas estruturas de herana em PHP 5. Para isso, continuando com nosso exemplo da locadora de vdeo, vamos criar os distintos tipos de elementos que so oferecidos no aluguel. Como todo mundo conhece, as locadoras de vdeos oferecem distintos tipos de elementos para alugar, como podem ser os filmes (fitas de vdeo ou DVD) e os jogos. Cada elemento tem umas caractersticas prprias e algumas comuns. Chamamos "suporte" classe geral, que inclui as caractersticas comuns para todos os tipos de elementos em aluguel. Logo, criamos trs tipos de suportes diferentes, que herdam da classe suporte, mas que incluem algumas caractersticas e funcionalidades novas. Estes tipos de suporte sero "fita_video", "dvd" e "jogo". O esquema de herana que vamos realizar neste exemplo pode ser visto na seguinte imagem.

Comeamos pela classe suporte. Seu cdigo ser o seguinte: class suporte{ public $titulo; protected $numero; private $preco; function __construct($tit,$num,$preco){ $this->titulo = $tit; $this->numero = $num; $this->preco = $precio; } public function dar_preco_sem_imposto{ return $this->preco; } public function dar_preco_com_imposto{ return $this->preco * 1.16; } public function dar_numero_identificacao{ return $this->numero; }

public function imprime_caracteristicas{ echo $this->titulo; echo "<br>" . $this->preco . " (imposto nao incluido)"; } } Os atributos que definimos so, ttulo, nmero (um identificador do suporte) e preo. Aplicamos a cada um, um modificador de acesso distinto, para poder praticar os diferentes tipos de acesso. Definimos um constructor, que recebe os valores para a iniciao do objeto. Um mtodo dar_preco_sim_imposto, que devolve o preo do suporte, sem aplicar o imposto. Outro mtodo dar_preco_com_imposto, que devolve o preo uma vez aplicado por exemplo, 16% de imposto. O mtodo dar_numero_identificacao, que devolve o nmero de identificador e imprime_caracteristicas, que mostra na pgina as caractersticas deste suporte. Nota: Como se foi definido como private o atributo preo, este atributo s poder ser acessado dentro do cdigo da classe, ou seja, na prpria definio do objeto. Se quisermos acessar ao preo de fora da classe (algo muito normal se temos em conta que vamos necessitar o preo de um suporte de outras partes da aplicao) ser necessrio criar um mtodo que nos devolva o valor do preo. Este mtodo devera se definir como public, para que possa ser acessado de qualquer lugar que se necessite. Em todos os mtodos usa-se a varivel $this. Esta varivel no mais que uma referncia ao objeto sobre o qual se est executando o mtodo. Em programao orientada a objetos, para executar qualquer destes mtodos, primeiro temos que ter criado um objeto a partir de uma classe. Logo, poderemos chamar os mtodos de um objeto. Isto se faz com $meu_objeto->metodo_a_chamar. Dentro de mtodo, quando se utiliza a varivel $this, se est fazendo referncia ao objeto sobre o qual se chamou ao mtodo, neste caso, o objeto $meu_objeto. Com $this->titulo estamos fazendo referncia ao atributo "titulo" que tem o objeto $meu_objeto. Se quisermos provar a classe suporte, para confirmar que se executa corretamente e que oferece resultados coerentes, podemos utilizar um cdigo como o seguinte. $suporte1 = new suporte("Os Intocveis",22,3); echo "<b>" . $suporte1->titulo . "</b>"; echo "<br>Preco: " . $suporte1->dar_preco_sem_imposto . "euros"; echo "<br>Preco imposto includo: " . $suporte1->dar_preco_com_imposto . " euros"; Neste caso criamos uma instncia da classe suporte, em um objeto que chamamos $suporte1. Logo, imprimimos seu atributo titulo (como o ttulo foi definido como public, podemos acessa-lo desde fora do cdigo da classe. Logo, chamam-se aos mtodos dar_preco_sem_imposto e dar_preco_com_imposto para o objeto criado. Dara isto como resultado: Os Intocveis Preo: 3 euros Preo imposto includo: 3,48 euros Continuando com nosso exemplo da locadora de vdeo, vamos construir uma classe para os suportes de tipo fita de vdeo. As fitas de vdeo tm um atributo novo que a durao da fita. No tm nenhuma classe nova, embora devemos aprender a sobrescrever mtodos criados para o suporte, visto que agora tm que fazer tarefas mais especficas. Sobrescrever mtodos Antes de mostrar o cdigo da classe fita_video, vamos falar sobre a sobrescritura ou substituio de mtodos, que um mecanismo pelo qual uma classe que herda pode redefinir os mtodos que est herdando. Pensemos em uma cafeteira. Sabemos que existem muitos tipos de cafeteiras e todas fazem caf, mas o mecanismo para fazer o caf distinto dependendo do tipo de cafeteira. Existem cafeteiras express,

cafeteiras por gotas e at se pode fazer caf com uma meia! Nossa cafeteira "pai" (da que vai herdar todas as cafeteiras) pode ter definido um mtodo fazer_cafe(), mas no necessariamente todas as cafeteiras que possam herdar desta fazem o caf seguindo o mesmo processo. Ento podemos definir um mtodo para fazer caf padro, que teria a classe cafeteira. Mas ao definir as classes cafeteira_express e cafeteira_gotas, deveramos sobrescrever o mtodo fazer_cafe() para que se ajuste ao procedimento prprio destas. A sobrescritura de mtodos algo bastante comum em mecanismos de herana, visto que os mtodos que foram criados para uma classe "pai" no tm porqu ser os mesmos que os definidos nas classes que herdam. Veremos como sobrescrever ou substituir mtodos em um exemplo de herana, seguindo nosso exemplo da locadora de vdeo. Sintaxe para herdar em PHP 5 Havamos comentado que a locadora de vdeo dispe de diferentes elementos para alugar, como fitas de vdeo, DVD ou jogos. Havamos criado uma classe suporte, que vamos herdar em cada um dos elementos disponveis para alugar. Vamos comear pela classe fita_video, cujo cdigo ser o seguinte: class fita_video extends suporte{ private $duracao; function __construct($tit,$num,$preco,$duracao){ parent::__construct($tit,$num,$preco); $this->duracao = $duracao; } public function imprime_caracteristicas(){ echo "Filme em VHS:<br>"; parent::imprime_caracteristicas(); echo "<br>Duracao: " . $this->duracao; }

Com a primeira linha class fita_video extends suporte estamos indicando que est sendo definida a classe fita_video e que vai herdar da classe suporte. Nota: Como est sendo herdado de uma classe, PHP tem que conhecer o cdigo da classe "pai", neste caso, a classe suporte. De modo que o cdigo da classe suporte deve estar includo dentro do arquivo da classe fita_video. Podemos colocar os dois cdigos no mesmo diretrio, ou se esto em diretrios independentes, devemos incluir o cdigo da classe suporte com a instruo include ou require de PHP. Na classe fita_video definimos um novo atributo chamado $duracao, que armazena o tempo que dura o filme. Embora a classe sobre a qual herdamos (a classe suporte) tinha definido um construtor, a fita de vdeo deve iniciar a nova propriedade $duracao, que especfica das fitas de vdeo. Por isso, vamos sobrescrever ou substituir o mtodo construtor, o que se faz simplesmente voltando a escrever o mtodo. A graa aqui consiste em que o sistema pode basear a nova declarao do construtor na declarao que existia para a classe da que herda. Ou seja, j havia sido definido um construtor para a classe suporte, que iniciava os atributos desta classe. Agora, para a classe fita_video, h que iniciar os atributos definidos na classe suporte, mais o atributo $duracao, que o prprio de fita_video. O cdigo do construtor o seguinte: function __construct($tit,$num,$preco,$duracao){ parent::__construct($tit,$num,$preco); $this->duracao = $duracao; }

Na primeira linha do construtor chamado ao construtor criado para a classe "suporte". Para isso, utilizamos parent:: e logo o nome do mtodo da classe pai ao que se quer chamar, neste caso __construtor(). Ao construtor da classe pai lhe enviamos as variveis que sero iniciadas com a classe pai. Na segunda linha do construtor inicia-se o atributo durao, com o que tivermos recebido por parmetro. Acontece o mesmo com o mtodo imprime_caracteristicas(), que agora deve mostrar tambm o novo atributo, prprio da classe fita_video. Como se pode observar no cdigo da funo, faz-se uso tambm de parent::imprime_caracteristicas() para utilizar o mtodo definido na classe pai. Se quisermos provar a classe fita_video, poderamos utilizar um cdigo como este: $minhafita = new fita_video("Os Outros", 22, 4.5, "115 minutos"); echo "<b>" . $minhafita->titulo . "</b>"; echo "<br>Preco: " . $minhafita->dar_preco_sem_imposto() . " euros"; echo "<br>Preco IVA incluido: " . $minhafita->dar_preco_com_iva() euros"; O que nos devolveria o seguinte: Os Outros Preo: 4.5 euros Preo IVA includo: 5.22 euros Filme em VHS: Os Outros 4.5 (IVA no includo) Durao: 115 minutos

"

Você também pode gostar