<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >extends</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 4)" HREF="language.oop.html"><LINK REL="PREVIOUS" TITLE="Classes e Objetos(PHP 4)" HREF="language.oop.html"><LINK REL="NEXT" TITLE="Construtores" HREF="language.oop.constructor.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.oop.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >Capítulo 18. Classes e Objetos(PHP 4)</TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="language.oop.constructor.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="sect1" ><H1 CLASS="sect1" ><A NAME="keyword.extends" ><TT CLASS="literal" >extends</TT ></A ></H1 ><P > Permite classes com variáveis e funções similares a uma outra classe. De fato, é uma boa prática definir classes genéricas que podem ser utilizadas em todos os seus projetos, e adaptar essas classes com as necessidades específicas de cada projeto. Para facilitar isso, classes podem ser estensões de outras classes. A classe estendida ou derivada tem todas as variáveis e funções da classe base (isto é chamado herança, afora o fato que ninguém morreu) e mais aquelas que venha a acrescentar na versão estendida. Não é possível subtrair uma classe, ou seja, indefinir quaisquer funções ou variáveis existentes. Uma classe estendida é sempre dependente de uma única classe base, e portanto, herança múltipla não é suportada. Classes são estendidas utilizando a instrução 'extends'. </P ><DIV CLASS="informalexample" ><P ></P ><A NAME="AEN5417" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#007700">class </font><font color="#0000BB">CarrinhoDeComprasNomeado </font><font color="#007700">extends </font><font color="#0000BB">CarrinhoDeCompras </font><font color="#007700">{<br /> var </font><font color="#0000BB">$proprietario</font><font color="#007700">;<br /><br /> function </font><font color="#0000BB">set_proprietario </font><font color="#007700">(</font><font color="#0000BB">$name</font><font color="#007700">) {<br /> </font><font color="#0000BB">$this</font><font color="#007700">-></font><font color="#0000BB">proprietario </font><font color="#007700">= </font><font color="#0000BB">$name</font><font color="#007700">;<br /> }<br />}<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV ><P > Isto define uma classe chamada CarrinhoDeComprasNomeado que tem todas as variáveis e funções de CarrinhoDeCompras mais a variável $proprietario e uma função set_proprietario(). Você pode criar um carrinho nomeado da maneira usual e configurar e obter o proprietário do carrinho. Você ainda pode continuar utilizando carrinhos normais e carrinhos nomeados: </P ><DIV CLASS="informalexample" ><P ></P ><A NAME="AEN5420" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$ncart </font><font color="#007700">= new </font><font color="#0000BB">CarrinhoDeComprasNomeado</font><font color="#007700">;<br /></font><font color="#0000BB">$ncart</font><font color="#007700">-></font><font color="#0000BB">set_proprietario</font><font color="#007700">(</font><font color="#DD0000">"kris"</font><font color="#007700">);<br />print </font><font color="#0000BB">$ncart</font><font color="#007700">-></font><font color="#0000BB">proprietario</font><font color="#007700">;<br /></font><font color="#0000BB">$ncart</font><font color="#007700">-></font><font color="#0000BB">add_item</font><font color="#007700">(</font><font color="#DD0000">"10"</font><font color="#007700">, </font><font color="#0000BB">1</font><font color="#007700">); </font><font color="#FF8000">// (funcionalidade herdade do CarrinhoDeCompras)<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV ><P > Isto é chamado relacionamento "pai-filho". Você cria uma classe pai e utiliza <TT CLASS="literal" >extends</TT > para criar uma nova classe <SPAN CLASS="emphasis" ><I CLASS="emphasis" >baseada</I ></SPAN > na classe pai: sua classe filha. Você ainda pode criar uma nova classe estendida a partir dessa classe filha e assim por diante. </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >Nota: </B > As classes precisam ser definidas antes de serem utilizadas! Se você estender a classe <TT CLASS="literal" >CarrinhoDeComprasNomeado</TT > da classe <TT CLASS="literal" >CarrinhoDeCompras</TT >, você precisa antes criar a classe chamada <TT CLASS="literal" >CarrinhoDeCompras</TT >. Se você quiser criar uma outra classe chamada <TT CLASS="literal" >CarrinhoDeComprasNomeadoAmarelo</TT > baseada na classe <TT CLASS="literal" >CarrinhoDeComprasNomeado</TT > você tem que definir <TT CLASS="literal" >CarrinhoDeComprasNomeado</TT > primeiro. Trocando em miúdos: a ordem em que as classes são definidas é importante. </P ></BLOCKQUOTE ></DIV ></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.oop.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.oop.constructor.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Classes e Objetos(PHP 4)</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="language.oop.html" ACCESSKEY="U" >Acima</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Construtores</TD ></TR ></TABLE ></DIV ></BODY ></HTML >