Domanda

Quanto è intelligente spl_autoload_register?Sappi di "guardare avanti" per la definizione di classe in altri file prima di provare a includere?

Quando eseguo la mia pagina indice.php sto vedendo Errore irreversibile: Input della classe \ Input 'non trovato in /var/www/php/classes/input/date.php on line 4

Index.php esegue il seguente (dopo questo blocco crea un oggetto da una delle classi, se non comprometto la riga che tutto funziona perfettamente)

function my_autoloader() {
    //include_once "/var/www/php/classes/input/input.php"; //if this is uncommented, it fixes the problem, but I'm not sure why
    foreach (glob("/var/www/php/classes/*/*.php") as $filename)
    {
        require_once $filename;
    }
}
spl_autoload_register('my_autoloader');
.

è il mio sintasso sbagliato?Spl_autoload_register dovrebbe funzionare in questo modo?Molti altri file in queste cartelle dipendono l'altro e il caricatore automatico sembra "capirlo".Non sono sicuro del motivo per cui è improvvisamente riattaccato sulla classe "input" in particolare

È stato utile?

Soluzione

Stai usando il caricatore automatico in modo sbagliato.Si suppone solo caricare le classi necessarie per una richiesta specifica, non l'intera cartella.

Leggi di più sulle classi di autoloading correttamente con alcuni buoni esempi: https://github.com/php-fig/fig-standards/blob/master/accettato/psr-0.md

Altri suggerimenti

Lo stai usando in modo errato.
. Autoload viene utilizzato per autoloading solo il nome della classe specificato sul 1 ° argomento di callback, non per caricare tutte le classi come stai facendo.

Ad esempio:

spl_autoload_register(function ($class) {
 // ...
 $class = stream_resolve_include_path(sprintf("%s.php", $class));
 if ($class !== false) {
  require $class
 }
});
.

$class contiene la classe per caricarlo, quindi è possibile utilizzarlo per trovare il file contenente questa classe sul tuo filesystem.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top