Buenas tardes Amigos, estoy por aquí ya que no me queda clara la implementacion de spl_autoload_register.
El problema es que tengo una aplicación con el diseño Singlenton que funciona mas o menos de la siguiente manera:
Index.php : este Archivo recibe siempre los REQUEST HTTP, POST y GET, Intancia al archivo Main.php eh Instancia a la Funcion Main.
Main.php : este Archivo es el Segundo en ejecutarce luego del Index quie lo llama, este Archivo se encarga de:
1. Hacer require a un archivo config.conpro.php que Carga Constantes de la Aplicación estas Constantes deben poder usarse desde cualquier lugar del codigo luego de que se instancia este archivo.
2. Hacer require a los archivos que Manejaran las Clases de MVC
3. Hacer require a los archivos que Manejaran las Clases de Modulos de la Aplicacion
4. Ejecutar la Funcion Main en donde Se Cita:
A. El Manejador de Sesion
B. El Manejador de REQUEST-HTTP
C. El Manejador de Usuario
D. El Manejador de Contenido
E. El Manejador de Salida de Dato
F. El Manejador de variable

Explico ahora con ejemplos y códigos:

pensando en implementar el spl_autoload_register que es más flexible que el __autoload.
Pero necesito un poco de guía (Ejemplos basados en lo que expongo) ya que no sé si puedo hacer lo que actualmente hago de acuerdo a esta estructura.
Esta estructura se basa en el modelo Singleton con llamadas de archivos individuales para gestionar y organizar la estructura de la aplicación.

Archivos Index.php: Este archivo que utilizo para inicializar algunos parámetros php personalizados y es también el archivo de referencia en todo momento como un archivo utilizado para las solicitudes http. En este archivo también hago la inclusión a la Biblioteca Main.php y también instanciar como una clase y luego llamar a la clase y la funcion:

Ejemplo:

Código PHP :

<?php
ini_set('zlib.output_compression', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.cookie_httponly', 1);
require_once("control/class.Main.php");
date_default_timezone_set(ZONA);
$WebAPP =       new Class_MAIN();
$WebAPP ->  Main(); 
?>


Archivos Main.php: en este archivo es el controlador típico y el gestor de acciones con el usuario, Actualmente necesito a los archivos de configuración y los gestores de archivos de otras clases, Como un segundo objetivo, el archivo Main.php es también el que gestiona el Estado de la sesión, administra las solicitudes GET y POST, gestiona la generación de contenido llamando al administrador. Cuando se devuelve por el gestor de contenido, llama al Administrador de vistas para imprimir la pantalla necesaria y finalmente llamar al Administrador de datos para borrar todas las variables utilizadas excepto las de sesión.

Ejemplo:

Código PHP :

<?php
    class Class_MAIN{

        public function __construct(){
            require_once ('control/config/config.security.php');        #Require of Security Params
            require_once ('control/config/config.conpro.php');          #Require of Constant to Use betwen all APP (DB Infos conecction, FTP Connection Etc)
            require_once ('control/config/config.mail.php');            #Require of Constant to Send Mail (i think implement in conpro)
            require_once ('control/config/config.model.php');           #Require that Call other Requires as Class Model Layer Generic (DB Manager, Date Manager, Error Manager, FTP Manager)
            require_once ('control/config/config.viwer.php');           #Require that Call other Requires as Class Model viwer Generic (Form, List, Modals, Process, etc)
            require_once ('control/config/config.classlibdep.php');     #Require that Call other Requires as Class APP MODULES as sub controlles (Departament Manager Process )


            # Inicialisamos las clases que usaremos
            $this->SESSIONMANAGER       = new Class_SessionManager();       #Manager of Sesion Called from : config.model.php
            $this->HTTPDATAMANAGER  = new Class_HTTPDataManager();  #Manager of REQUEST-HTTP (GET, POST) Request.
            $this->USERMANAGER          = new Class_UserManager();          #Manager of User.
            $this->CONTENTMANAGER       = new Class_ContentManager();   #Content Manager.
            $this->VARMANAGER               = new Class_VarManager();           #Manager de Variables   
        }
        public function __destruct(){
            $this->SESSIONMANAGER       = new Class_SessionManager();       #Manager of Sesion Called from : config.model.php
            $this->HTTPDATAMANAGER  = new Class_HTTPDataManager();  #Manager of REQUEST-HTTP (GET, POST) Request.
            $this->USERMANAGER          = new Class_UserManager();          #Manager of User.
            $this->CONTENTMANAGER       = new Class_ContentManager();   #Content Manager.
            $this->VARMANAGER               = new Class_VarManager();           #Manager de Variables   
        }

        public function Main(){
                            $this   ->  SESSIONMANAGER  ->  Ses_Create();                       #Check and Create Sesion Web and Cookies
            $DTACheck   =   $this   ->  HTTPDATAMANAGER ->  Check_POSTGET();        #Manager Request if exists
            $USERLoged  =   $this   ->  USERMANAGER     ->  Check_USERLogin();          #Check User is Logged
                            $this   ->  CONTENTMANAGER  ->  Gen_Display($USERLoged, $DTACheck); #Call to Manager Content to retrive the data According to the request of the user
                            $this   ->  VARMANAGER      ->  ClearVars();                        #Cleaner Vars
        }

    }
?>


Después de hacer esto, cada archivo de config.model.php y config.viewer.php comienza a estar involucrado, Terminando cada vez más complejo con: config.classloader.php.

** Ejemplo: config.conpro.php (Constantes) **

Código PHP :

<?php
       if (!defined('CONECTOR_DB'))      define('CONECTOR_DB'   ,'PDO');
       if (!defined('DB_HOST'))            define('DB_HOST'            ,'localhost');
       if (!defined('DB_USERNAME'))      define('DB_USERNAME'      ,'root');
       if (!defined('DB_PASS'))            define('DB_PASS'            ,'');
       if (!defined('DB_PRE'))               define('DB_PRE'            ,'TEST');
       if (!defined('DB_N_SEC'))            define('DB_N_SEC'         ,'USER');
       if (!defined('DB_PORT'))            define('DB_PORT'            ,'3306');
    ?>


** Ejemplo: config.model.php (Biblioteca de clases) sí la aplicación incluye un archivo que incluye otros archivos como clase **

Código PHP :

<?php
       $APP_DIR_EXT            =$_SERVER['DOCUMENT_ROOT']   .   '/control/classext/';
       if (!defined('EXT_PASSWORD_CLASS'))         define('EXT_PASSWORD_CLASS'      ,'class.ext.password.php'            );         #Add advanced encryption.
       if (!defined('EXT_PHPMAILER_CLASS'))         define('EXT_PHPMAILER_CLASS'      ,'phpMailer/PHPMailerAutoload.php'   );         #Add Mail Sistem to remplace defauld
       
       $APP_DIR_CLASSGEN   =$_SERVER['DOCUMENT_ROOT']   .   '/control/classgeneric/';
       
       if (!defined('SESSIONMANAGER_CLASS'))      define('SESSIONMANAGER_CLASS'   ,'class.managersession.php'         );         #Clase Name Manager Sesion.
       if (!defined('COOKIESMANAGER_CLASS'))      define('COOKIESMANAGER_CLASS'   ,'class.managercookies.php'         );         #Clase Name Manager Cookies
       if (!defined('VARMANAGER_CLASS'))            define('VARMANAGER_CLASS'         ,'class.managervar.php'               );         #Clase Name Manager Variables
       
       #Require
       
       require_once $APP_DIR_EXT      . EXT_PASSWORD_CLASS;
       require_once $APP_DIR_EXT      . EXT_PHPMAILER_CLASS;
       require_once $APP_DIR_CLASSGEN . SESSIONMANAGER_CLASS;
       require_once $APP_DIR_CLASSGEN . COOKIESMANAGER_CLASS;
       require_once $APP_DIR_CLASSGEN . VARMANAGER_CLASS;
       
    ?>


** Ejemplo: config.viewer.php (Biblioteca de clases) sí la aplicación incluye un archivo que incluye otros archivos como clase **

Código PHP :

<?php
       $APP_DIR_CLASSMVC   =$_SERVER['DOCUMENT_ROOT']   .   '/control/classMVC/';
       if (!defined('CONTENTMANAGER_CLASS'))      define('CONTENTMANAGER_CLASS'      ,'class.managercontent.php'   );   #Clase Name Manager Content and Permison.
       if (!defined('MENUMANAGER_CLASS'))         define('MENUMANAGER_CLASS'            ,'class.managermenu.php'      );   #Clase Name Manager Menu and Permison.
       if (!defined('CRUDMANAGER_CLASS'))         define('CRUDMANAGER_CLASS'            ,'class.managerCRUD.php'      );   #Clase Name Manager Crud and Permison.
       
       #Require
       
       require_once $APP_DIR_CLASSMVC . CONTENTMANAGER_CLASS;
       require_once $APP_DIR_CLASSMVC . MENUMANAGER_CLASS;
       require_once $APP_DIR_CLASSMVC . CRUDMANAGER_CLASS;
       
    ?>


** Ejemplo: config.classlibdep.php (Biblioteca de Clases) sí y más hijos de hijos de hijos de Padre (Principal) **

Código PHP :

<?php
       $APP_PHPCORE_DIR_DEPFORMS      =$_SERVER['DOCUMENT_ROOT'] . '/control/core/forms';
       $APP_PHPCORE_DIR_DEPPROCESS   =$_SERVER['DOCUMENT_ROOT'] . '/control/core/process';
       $APP_PHPCORE_DIR_DEPLIST         =$_SERVER['DOCUMENT_ROOT'] . '/control/core/list';
       $APP_PHPCORE_DIR_DEPMODALS      =$_SERVER['DOCUMENT_ROOT'] . '/control/core/modal';
       
       #Form area Files(every one is a Manager that Include Form html files According to the request of the user)
       
       if (!defined('FORM_GEN'))      define('FORM_GEN'      ,'formgen.php');      # Form Generic
       if (!defined('FORM_SIS'))      define('FORM_SIS'      ,'formsis.php');      # Form for Sistem Manager
       
       #List area Files(every one is a Manager that Include PHP logic file to Used to generate specific lists according to each department According to the request of the user
       if (!defined('LIST_GENERIC'))   define('LIST_GENERIC'   ,'listgeneric.php');
       if (!defined('LIST_GEN'))      define('LIST_GEN'       ,'listgen.php');
       
       #Modals html files
       if (!defined('MODAL_GENERIC'))   define('MODAL_GENERIC'   ,'AMgeneric.php');       # Modals generic(Manual in Line )
       if (!defined('MODAL_GEN'))      define('MODAL_GEN'       ,'AMgen.php');            # Modals gen(to Guideline this process generic)
       
       #Process php Logic(depending on put CRUD button used this manager internal Process logic of php)
       if (!defined('PROCESS_GEN'))   define('PROCESS_GEN'   ,'processgen.php');      # Procesos del Area de Genericos
       if (!defined('PROCESS_SIS'))   define('PROCESS_SIS'   ,'processsis.php');      # Procesos del Area de Sistema
       
       
       #Require
       
       require_once $APP_PHPCORE_DIR_DEPFORMS . '/' . FORM_GEN;
       require_once $APP_PHPCORE_DIR_DEPFORMS . '/' . FORM_SIS;
       
       require_once $APP_PHPCORE_DIR_DEPLIST . '/' . LIST_GENERIC;
       require_once $APP_PHPCORE_DIR_DEPLIST . '/' . LIST_GEN;
       
       require_once $APP_PHPCORE_DIR_DEPMODALS . '/' . MODAL_GENERIC;
       require_once $APP_PHPCORE_DIR_DEPMODALS . '/' . MODAL_GEN;
       
       require_once $APP_PHPCORE_DIR_DEPPROCESS . '/' . PROCESS_GEN;
       require_once $APP_PHPCORE_DIR_DEPPROCESS . '/' . PROCESS_SIS;
       
    ?>





Después de que ya he citado todos los archivos y que están involucrados en la aplicación ahora viene la instanciación y la aplicación:

Código :

    Class_MAIN
       Has the function:
       Main(){}
          This calls for:
             $ this -> CONTENTMANAGER -> Gen_Display()
                This class has a structure that calls other classes:
                   function __construct() {
                      #We call the files that are required for page operation
                      $this -> MENUMANAGER = new Class_MenuManager ();
                      $this -> FORMMANAGER = new Class_FormManager ();
                      $this -> PROCESSMANAGER = new Class_ProcessManager ();
                      $this -> MODALSMANAGER = new Class_ModalManager ();
                   }



Y así es con una estructura de jerarquía de acuerdo a las entradas.
Como se puede ver, utilizo el constructor para llamar a los archivos y clases que usaré en mi aplicación.
También verá la dependencia que existe entre las clases.
Mi pregunta es qué estructura debo seguir migrando a la implementación de spl_autoload_register, y si tienen o pueden ayudar con ejemplos.