<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.oop5.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'language.oop5.autoload.php',
    1 => 'Autocarga de clases',
    2 => 'Autocarga de clases',
  ),
  'up' => 
  array (
    0 => 'language.oop5.php',
    1 => 'Clases y objetos',
  ),
  'prev' => 
  array (
    0 => 'language.oop5.constants.php',
    1 => 'Constantes de clase',
  ),
  'next' => 
  array (
    0 => 'language.oop5.decon.php',
    1 => 'Constructores y destructores',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'language/oop5/autoload.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.oop5.autoload" class="sect1">
 <h2 class="title">Autocarga de clases</h2>
 <p class="para">
  Muchos desarrolladores que escriben aplicaciones orientadas a objetos
  crean un fichero fuente por definición de clase. Uno de los mayores inconvenientes
  de este método es tener que escribir una larga lista de inclusiones de
  ficheros de clases al inicio de cada script: una inclusión por clase.
 </p>
 <p class="para">
  La función <span class="function"><a href="function.spl-autoload-register.php" class="function">spl_autoload_register()</a></span> registra un número cualquiera de
  cargadores automáticos, lo que permite a las clases y a las interfaces ser
  automáticamente cargadas si no están definidas actualmente.
  Al registrar autocargadores, PHP da una última oportunidad de incluir una
  definición de clase o interfaz, antes de que PHP falle con un error.
 </p>
 <p class="para">
  Cualquier construcción similar a las clases puede ser autocargada de la
  misma manera. Esto incluye las clases, interfaces, traits y enumeraciones.
 </p>
 <div class="caution"><strong class="caution">Precaución</strong>
  <p class="para">
   Anterior a PHP 8.0.0, era posible utilizar <span class="function"><a href="function.autoload.php" class="function">__autoload()</a></span>
   para autocargar las clases y las interfaces. Sin embargo, es una alternativa
   menos flexible a <span class="function"><a href="function.spl-autoload-register.php" class="function">spl_autoload_register()</a></span> y
   <span class="function"><a href="function.autoload.php" class="function">__autoload()</a></span> está obsoleto a partir de PHP 7.2.0,
   y eliminado a partir de PHP 8.0.0.
  </p>
 </div>
 <blockquote class="note"><p><strong class="note">Nota</strong>: 
  <p class="para">
   <span class="function"><a href="function.spl-autoload-register.php" class="function">spl_autoload_register()</a></span> puede ser llamada varias veces
   para registrar varios autocargadores. Lanzar una excepción desde una
   función de autocarga, interrumpirá este proceso y no permitirá que las
   funciones de autocarga siguientes sean ejecutadas. Por esta razón,
   lanzar excepciones desde una función de autocarga es fuertemente
   desaconsejado.
  </p>
 </p></blockquote>
 <p class="para">
  <div class="example" id="example-1">
   <p><strong>Ejemplo #1 Ejemplo de autocarga</strong></p>
   <div class="example-contents"><p>
    Este ejemplo intenta cargar las clases <code class="literal">MiClase1</code>
    y <code class="literal">MiClase2</code>, respectivamente desde los ficheros
    <var class="filename">MiClase1.php</var> y
    <var class="filename">MiClase2.php</var>.
   </p></div>
   <div class="example-contents">
<div class="annotation-interactive phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />spl_autoload_register</span><span style="color: #007700">(function (</span><span style="color: #0000BB">$class_name</span><span style="color: #007700">) {<br />    include </span><span style="color: #0000BB">$class_name </span><span style="color: #007700">. </span><span style="color: #DD0000">'.php'</span><span style="color: #007700">;<br />});<br /><br /></span><span style="color: #0000BB">$obj  </span><span style="color: #007700">= new </span><span style="color: #0000BB">MiClase1</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$obj2 </span><span style="color: #007700">= new </span><span style="color: #0000BB">MiClase2</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
  <div class="example" id="example-2">
   <p><strong>Ejemplo #2 Otro ejemplo de autocarga</strong></p>
   <div class="example-contents"><p>
    Este ejemplo intenta cargar la interfaz <code class="literal">ITest</code>.
   </p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />spl_autoload_register</span><span style="color: #007700">(function (</span><span style="color: #0000BB">$name</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$name</span><span style="color: #007700">);<br />});<br /><br />class </span><span style="color: #0000BB">Foo </span><span style="color: #007700">implements </span><span style="color: #0000BB">ITest </span><span style="color: #007700">{<br />}<br /><br /></span><span style="color: #FF8000">/*<br />string(5) "ITest"<br /><br />Fatal error: Interface 'ITest' not found in ...<br />*/<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   <div class="example" id="example-3">
    <p><strong>Ejemplo #3 Uso del autoloader de Composer</strong></p>
    <div class="example-contents"><p>
     <a href="https://getcomposer.org/" class="link external">&raquo;&nbsp;Composer</a> genera un fichero <code class="literal">vendor/autoload.php</code>
     configurado para cargar automáticamente los paquetes gestionados por Composer.
     Al incluir este fichero, estos paquetes pueden ser utilizados sin trabajo
     adicional.
    </p></div>
    <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: #007700">require </span><span style="color: #0000BB">__DIR__ </span><span style="color: #007700">. </span><span style="color: #DD0000">'/vendor/autoload.php'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$uuid </span><span style="color: #007700">= </span><span style="color: #0000BB">Ramsey\Uuid\Uuid</span><span style="color: #007700">::</span><span style="color: #0000BB">uuid7</span><span style="color: #007700">();<br /><br />echo </span><span style="color: #DD0000">"Nuevo UUID generado -&gt; "</span><span style="color: #007700">, </span><span style="color: #0000BB">$uuid</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">toString</span><span style="color: #007700">(), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>

 <div class="simplesect">
  <h3 class="title">Ver también</h3>
  <p class="para">
   <ul class="simplelist">
     <li><span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span></li>
     <li><a href="var.configuration.php#ini.unserialize-callback-func" class="link">unserialize_callback_func</a></li>
     <li><a href="var.configuration.php#ini.unserialize-max-depth" class="link">unserialize_max_depth</a></li>
     <li><span class="function"><a href="function.spl-autoload-register.php" class="function">spl_autoload_register()</a></span></li>
     <li><span class="function"><a href="function.spl-autoload.php" class="function">spl_autoload()</a></span></li>
     <li><span class="function"><a href="function.autoload.php" class="function">__autoload()</a></span></li>
    </ul>
  </p>
 </div>
</div><?php manual_footer($setup); ?>