<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >Abstração de Objetos</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="Manual do PHP" HREF="index.html"><LINK REL="UP" TITLE="Classes e Objetos (PHP 5)" HREF="language.oop5.html"><LINK REL="PREVIOUS" TITLE="Constantes do Objeto" HREF="language.oop5.constants.html"><LINK REL="NEXT" TITLE="Interfaces de Objetos" HREF="language.oop5.interfaces.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="sect1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Manual do PHP</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="language.oop5.constants.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >Capítulo 19. Classes e Objetos (PHP 5)</TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="language.oop5.interfaces.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="sect1" ><H1 CLASS="sect1" ><A NAME="language.oop5.abstract" >Abstração de Objetos</A ></H1 ><P > PHP 5 introduz métodos e classes abstratos. Não é permitido criar uma instância de uma class que foi definida como abstrata. Qualquer classe que contêm pelo menos um método abstrato deve também ser abstrata. Métodos definidos como abstratos simplesmente declaram a assinatura do método, eles não podem definir a implementação. </P ><P > Quando uma classe herda uma classe abstrata, todos os métodos marcados como abstratos na declaração da classe-pai devem ser definidos na classe filha; além disso, esses métodos devem ser definidos com a mesma <A HREF="language.oop5.visibility.html" >visibilidade</A > ou mais fraca. Por exemplo, se um método abstrado é definido como protected, a implementação da função deve ser definida ou como protected ou public. </P ><TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN5739" ></A ><P ><B >Exemplo 19-17. Exemplo de classe abstrata</B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />abstract </font><font color="#007700">class </font><font color="#0000BB">ClasseAbstrata<br /></font><font color="#007700">{<br /> </font><font color="#FF8000">// Força a classe que extende (a subclasse) a definir esse método<br /> </font><font color="#0000BB">abstract protected </font><font color="#007700">function </font><font color="#0000BB">pegarValor</font><font color="#007700">();<br /> </font><font color="#0000BB">abstract protected </font><font color="#007700">function </font><font color="#0000BB">valorComPrefixo</font><font color="#007700">( </font><font color="#0000BB">$prefixo </font><font color="#007700">);<br /><br /> </font><font color="#FF8000">// Método comum<br /> </font><font color="#0000BB">public </font><font color="#007700">function </font><font color="#0000BB">imprimir</font><font color="#007700">() {<br /> print </font><font color="#0000BB">$this</font><font color="#007700">-></font><font color="#0000BB">pegarValor</font><font color="#007700">();<br /> }<br />}<br /><br />class </font><font color="#0000BB">ClasseConcreta1 </font><font color="#007700">extends </font><font color="#0000BB">ClasseAbstrata<br /></font><font color="#007700">{<br /> </font><font color="#0000BB">protected </font><font color="#007700">function </font><font color="#0000BB">pegarValor</font><font color="#007700">() {<br /> return </font><font color="#DD0000">"ClasseConcreta1"</font><font color="#007700">;<br /> }<br /><br /> </font><font color="#0000BB">public </font><font color="#007700">function </font><font color="#0000BB">valorComPrefixo</font><font color="#007700">( </font><font color="#0000BB">$prefixo </font><font color="#007700">) {<br /> return </font><font color="#DD0000">"</font><font color="#007700">{</font><font color="#DD0000">$prefixo</font><font color="#007700">}</font><font color="#DD0000">ClasseConcreta1"</font><font color="#007700">;<br /> }<br />}<br /><br />class </font><font color="#0000BB">ClasseConcreta2 </font><font color="#007700">extends </font><font color="#0000BB">ClasseAbstrata<br /></font><font color="#007700">{<br /> </font><font color="#0000BB">protected </font><font color="#007700">function </font><font color="#0000BB">pegarValor</font><font color="#007700">() {<br /> return </font><font color="#DD0000">"ClasseConcreta2"</font><font color="#007700">;<br /> }<br /><br /> </font><font color="#0000BB">public </font><font color="#007700">function </font><font color="#0000BB">valorComPrefixo</font><font color="#007700">( </font><font color="#0000BB">$prefixo </font><font color="#007700">) {<br /> return </font><font color="#DD0000">"</font><font color="#007700">{</font><font color="#DD0000">$prefixo</font><font color="#007700">}</font><font color="#DD0000">ClasseConcreta2"</font><font color="#007700">;<br /> }<br />}<br /><br /></font><font color="#0000BB">$classe1 </font><font color="#007700">= new </font><font color="#0000BB">ClasseConcreta1</font><font color="#007700">;<br /></font><font color="#0000BB">$classe1</font><font color="#007700">-></font><font color="#0000BB">imprimir</font><font color="#007700">();<br />echo </font><font color="#0000BB">$classe1</font><font color="#007700">-></font><font color="#0000BB">valorComPrefixo</font><font color="#007700">(</font><font color="#DD0000">'FOO_'</font><font color="#007700">) .</font><font color="#DD0000">"\n"</font><font color="#007700">;<br /><br /></font><font color="#0000BB">$classe2 </font><font color="#007700">= new </font><font color="#0000BB">ClasseConcreta2</font><font color="#007700">;<br /></font><font color="#0000BB">$classe2</font><font color="#007700">-></font><font color="#0000BB">imprimir</font><font color="#007700">();<br />echo </font><font color="#0000BB">$classe2</font><font color="#007700">-></font><font color="#0000BB">valorComPrefixo</font><font color="#007700">(</font><font color="#DD0000">'FOO_'</font><font color="#007700">) .</font><font color="#DD0000">"\n"</font><font color="#007700">;<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P >O exemplo acima irá imprimir:</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="screen" >ConcreteClass1 FOO_ConcreteClass1 ConcreteClass2 FOO_ConcreteClass2</PRE ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ><P > Código antigo que não tem classes ou funções definidas pelo usuário como 'abstract' deve ser executado sem modificações. </P ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="language.oop5.constants.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Principal</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="language.oop5.interfaces.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Constantes do Objeto</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="language.oop5.html" ACCESSKEY="U" >Acima</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Interfaces de Objetos</TD ></TR ></TABLE ></DIV ></BODY ></HTML >