2012-02-15 5 views
5

Ho creato una classe autoloader che funziona come previsto, ma ho notato un comportamento strano. Quando echo i risultati delle classi trovate che vengono passate al metodo che gestisce la funzione spl_autoload_register(). Sto vedendo che ho il doppio. Come se lo script venisse chiamato due volte, e poiché è un singleton, i dati costruiscono 2 array nel mio caso.php singleton continua a chiamarsi due volte in una classe di caricatore automatico

Sto usando questo metodo per creare la mia Singleton

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

    return self::$instance; 
} 

Ho poi il costruttore privato. Ho passato attraverso ogni metodo di debug cercando di vedere dove sembra creare un clone di se stesso.

Ho il sospetto che le mie classi e classi siano state clonate da qualche parte nella funzione spl_autoload_register().

qualsiasi aiuto sarebbe apprezzato.

+0

Avete impostare la funzione __clone di conseguenza? – busypeoples

+0

Puoi pubblicare il codice completo della classe? – busypeoples

+0

okay, pubblicato. Se eseguo questo come istanza non singleton, allora non clonerà se stesso. – Eli

risposta

3

Lascia che il costruttore stampi qualcosa. Solo per vedere se è stato chiamato più di una volta. Stai usando due autloader giusto? vorrei impostare sp_autoload_register all'inizio dell'applicazione (forse index.php) e registrare tutti i caricatori automatici necessari. Ma prova se il contructor viene chiamato più di una volta per primo.

// prima vorrei cambiare questo:

private static $instance = null; 

// la funzione init

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

    return self::$instance; 
} 
+0

Ho impostato un contatore e l'ho eseguito ogni volta che viene chiamata la classe. e abbastanza sicuro capisco +1. Vuoi che metta lo spl_autoload_register dove? Sto già chiamando questo script una volta nel mio index.php. Ho aggiornato il mio post anche con il mio codice aggiornato – Eli

+0

Non sono sicuro di questo nel metodo di registrazione: spl_autoload_register (array ('Autoloader', 'loadClass')); – busypeoples

+0

hmmm, in origine avevo impostato su 'spl_auto_register ('self :: autoload()')' prima di passare al percorso Singleton. – Eli

Problemi correlati