<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.reflection.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'reflection.extending.php',
    1 => 'Estendendo',
    2 => 'Estendendo',
  ),
  'up' => 
  array (
    0 => 'book.reflection.php',
    1 => 'Reflex&atilde;o',
  ),
  'prev' => 
  array (
    0 => 'reflection.examples.php',
    1 => 'Exemplos',
  ),
  'next' => 
  array (
    0 => 'class.reflection.php',
    1 => 'Reflection',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'reference/reflection/extending.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="reflection.extending" class="chapter">
 <h1 class="title">Estendendo</h1>

 <p class="para">
  Caso a intenção seja criar versões especializdas das
  classes nativas (seja para criar HTML colorido
  na exportação, ou para ter variáveis membros de
  fácil acesso ao invés de métodos ou para ter métodos utilitários),
  elas podem ser estendidas.
 </p>
 <div class="example" id="example-1">
  <p><strong>Exemplo #1 Estendendo classe nativas</strong></p>
  <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">/**<br /> * Minha Classe Reflection_Method<br /> */<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">My_Reflection_Method </span><span style="color: #007700">extends </span><span style="color: #0000BB">ReflectionMethod<br /></span><span style="color: #007700">{<br />    public </span><span style="color: #0000BB">$visibility </span><span style="color: #007700">= array();<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">$o</span><span style="color: #007700">, </span><span style="color: #0000BB">$m</span><span style="color: #007700">)<br />    {<br />        </span><span style="color: #0000BB">parent</span><span style="color: #007700">::</span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">$o</span><span style="color: #007700">, </span><span style="color: #0000BB">$m</span><span style="color: #007700">);<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">visibility </span><span style="color: #007700">= </span><span style="color: #0000BB">Reflection</span><span style="color: #007700">::</span><span style="color: #0000BB">getModifierNames</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getModifiers</span><span style="color: #007700">());<br />    }<br />}<br /><br /></span><span style="color: #FF8000">/**<br /> * Demonstração classe #1<br /> *<br /> */<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">T </span><span style="color: #007700">{<br />    protected function </span><span style="color: #0000BB">x</span><span style="color: #007700">() {}<br />}<br /><br /></span><span style="color: #FF8000">/**<br /> * Demonstração classe #2<br /> *<br /> */<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">U </span><span style="color: #007700">extends </span><span style="color: #0000BB">T </span><span style="color: #007700">{<br />    function </span><span style="color: #0000BB">x</span><span style="color: #007700">() {}<br />}<br /><br /></span><span style="color: #FF8000">// Exibir as informações<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(new </span><span style="color: #0000BB">My_Reflection_Method</span><span style="color: #007700">(</span><span style="color: #DD0000">'U'</span><span style="color: #007700">, </span><span style="color: #DD0000">'x'</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
  </div>

  <div class="example-contents"><p>O exemplo acima produzirá
algo semelhante a:</p></div>
  <div class="example-contents screen">
<div class="annotation-interactive cdata"><pre>
object(My_Reflection_Method)#1 (3) {
  [&quot;visibility&quot;]=&gt;
  array(1) {
    [0]=&gt;
    string(6) &quot;public&quot;
  }
  [&quot;name&quot;]=&gt;
  string(1) &quot;x&quot;
  [&quot;class&quot;]=&gt;
  string(1) &quot;U&quot;
}
</pre></div>
  </div>
 </div>
 <div class="caution"><strong class="caution">Cuidado</strong>
  <p class="para">
   Se construtor for sobrescrito, lembre-se de chamar
   o construtor pai antes de qualquer código que for adicionado.
   Se isto não for feito, ocorrerá o seguinte erro:
   <code class="literal">Fatal error: Internal error: Failed to retrieve the reflection object</code>
  </p>
 </div>
</div>
<?php manual_footer($setup); ?>