2012-09-16 17 views
8

¿El autocargador de la clase php abre un archivo y busca el nombre de la clase? He estado buscando cómo se implementa realmente. Una cosa que sé que es recursiva? Si estoy equivocado por favor hágamelo sabercómo funciona el autocargador php

Como se mencionó overhere: autoloader brief over view Cómo funciona PHP cargador automático

El cargador automático PHP busca recursivamente en los directorios definidos para clase, de rasgos y de interfaz definiciones. Sin ninguna configuración adicional de , se utilizará el directorio en el que reside el archivo que requiere como ruta de clase predeterminada.

Los nombres de archivo no necesitan obedecer ninguna convención. Se buscan todos los archivos para las definiciones de clase. Se prefieren los archivos que son similares al nombre de clase o con .php o .inc. Si es compatible, PHP Tokenizer se usará para un descubrimiento de definición de clase confiable.

+1

parece que el enlace en su pregunta es suficiente para saber –

+0

"¿El autocargador de la clase php abre un archivo y busca el nombre de la clase?" - Busca todas las clases en un archivo. – zerkms

+0

, pero ¿dónde puedo saber cómo se implementó, desde cero todo el proceso de autocargador esto es lo que es interesante para mí como la forma en que se escribió el código fuente de PHP por primera vez – meWantToLearn

Respuesta

14

El cargador automático PHP es sólo un mecanismo para incluyen un archivo cuando una clase se construye.

Si coloca todas sus clases en 1 archivo, no necesita un autocargador. Por supuesto, cuando OO programación que dar a cada clase su propio archivo, y ahí es donde el cargador automático viene en

Algunos ejemplos:.

class AutoLoader 
{ 
    public function __construct() 
    { 
    spl_autoload_register(array($this, 'ClassLoader')); 
    } 

    public function ClassLoader($class) 
    {  
    if(class_exists($class, false)) 
     return true; 

    if(is_readable('path_to_my_classes/' . $class . '.php')) 
      include_once 'path_to_my_classes/' . $class . '.php' 
    } 
} 

$autoloader = new AutoLoader(); 

Lo que sucede es que cuando se crea la clase cargador automático, la clase El método Classloader está registrado como autocargador.

Cuando se crea una nueva clase, el método Classloader primero comprueba si el archivo de la clase ya está cargado. Si no, la clase se antepone con una ruta y se extiende con una extensión. Si el archivo es legible, está incluido.

Por supuesto, puede hacer esto muy sofisticado. Veamos un ejemplo con espacios de nombres y un mapeador. Supongamos que estamos en la clase cargador automático:

private $mapper array('Foo' => 'path_to_foo_files/', 'Bar' => 'path_to_bar_files/'); 

    public function ClassLoader($class) 
    {  
    if(class_exists($class, false)) 
     return true; 

    // break into single namespace and class name 
    $classparts = explode('\\', $class); 
    $path = $this->mapper[$classparts[0]]; 

    if(is_readable($path . $classparts[1] . '.php')) 
      include_once $path . $classparts[1] . '.php' 
    } 

En este caso, el nombre de clase es splittet en una parte del espacio de nombres y unas partes classname. La parte de espacio de nombres se busca en una matriz mapeador, y esa ruta se utiliza como una ruta de inclusión para el archivo php.

Estos son solo ejemplos para demostrar lo que se puede hacer con un autocargador. Para la producción, se necesita más trabajo por hacer, por ejemplo, comprobación de errores.