2012-02-15 20 views
5

Hice una clase de autocargador que funciona según lo previsto, pero he notado un comportamiento extraño. Cuando hago eco de los resultados de las clases encontradas que se pasan al método que maneja la función spl_autoload_register(). Estoy viendo que tengo dobles. Al igual que si el guión se llama dos veces, y porque es un singleton, los datos construyen 2 arrays en mi caso.php singleton sigue llamándose dos veces en una clase de autocargador

estoy usando este método para crear mi Singleton

public static function init() 
{ 
    if (!isset(self::$instance)) 
     self::$instance = new self(); 

    return self::$instance; 
} 

Entonces tengo el constructor establece en privado. He pasado por cada método de depuración tratando de ver dónde aparece para crear un clon de sí mismo.

Sospecho que mis clases y clases están clonadas en algún lugar de la función spl_autoload_register().

cualquier ayuda sería apreciada.

+0

¿Ha ajustado la función __clone en consecuencia? – busypeoples

+0

¿Puedes publicar el código de clase completo? – busypeoples

+0

okays, publicado. Si ejecuto esto como una instancia no única, no se clonará a sí mismo. – Eli

Respuesta

3

Deje que el constructor imprima algo. Solo para ver si realmente se está llamando más de una vez. Está utilizando dos autocargadores ¿no? configuro sp_autoload_register al inicio de la aplicación (quizás el index.php) y registro todos los autocargadores necesarios. Pero prueba si se está llamando al contructor más de una vez primero.

// primero que cambiaría esto:

private static $instance = null; 

// la función init

public static function init() { 
    if (self::$instance === null) { 
    self::$instance = new Autoload(); 
    } 

    return self::$instance; 
} 
+0

Configuré un contador y se ejecutó cada vez que se llama a la clase. y por supuesto lo recibo +1. ¿Quieres que coloque el spl_autoload_register donde? Estoy llamando a este script una vez en mi index.php. Actualicé mi publicación con mi código actualizado también – Eli

+0

No estoy seguro de esto dentro del método de registro: spl_autoload_register (array ('Autoloader', 'loadClass')); – busypeoples

+0

hmmm, originalmente tenía configurado 'spl_auto_register ('self :: autoload()')' antes de ir a la ruta singleton. – Eli