<?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 => 'es',
  ),
  'this' => 
  array (
    0 => 'reflection.extending.php',
    1 => 'Extensi&oacute;n',
    2 => 'Extensi&oacute;n',
  ),
  'up' => 
  array (
    0 => 'book.reflection.php',
    1 => 'Reflexi&oacute;n',
  ),
  'prev' => 
  array (
    0 => 'reflection.examples.php',
    1 => 'Ejemplos',
  ),
  'next' => 
  array (
    0 => 'class.reflection.php',
    1 => 'Reflection',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    '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">Extensión</h1>

 <p class="para">
  Si se deseara crear versiones especializadas de las clases que vienen
  incorporadas (por ejemplo, para crear HTML en color cuando se
  exportan, parar tener variables de acceso rápido en lugar de usar métodos,
  o parar crear métodos auxiliares), deberá
  extender la clase.
 </p>
 <div class="example" id="example-1">
  <p><strong>Ejemplo #1 Extendiendo las clases incorporadas</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 /> * Mi clase 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 /> * Clase demo #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 /> * Clase demo #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">// Mostrar información<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>Resultado del ejemplo anterior es similar 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">Precaución</strong>
  <p class="para">
   Si se sobrescribe el constructor, no hay que olvidar llamar
   en primer lugar al constructor de la clase padre.
   Si esto fallara, se lanzará el siguiente error:
   <code class="literal">Fatal error: Internal error: Failed to retrieve the reflection object</code>
  </p>
 </div>
</div>
<?php manual_footer($setup); ?>