2012-08-06 24 views
8

Ho letto circa spl_autoload_register funziona come una sostituzione di require, require_once, include, & include_once. Sebbene ci sia molta discussione su come implementarlo, la documentazione non è troppo dettagliata e non c'è una spiegazione su come sarebbe vantaggioso rispetto ai modi originali.PHP: qual è il vantaggio di spl_autoload_register? Prestazioni di include

Riferimento: http://php.net/manual/en/function.spl-autoload-register.php

Mi chiedo come spl_autoload_register funziona?

C'è una differenza di prestazioni quando si utilizza spl_autoload_register?

Come gestisce molte richieste di istruzioni (più di 20) in classi collegate tra loro? (Non sarebbe ancora necessario duplicare?)

+0

Si dovrebbe sempre 'require_once' quando si caricano le definizioni di classe, il che elimina il rischio di duplicazione, il che causerebbe un errore fatale se ciò accadesse. – DaveRandom

+0

@DaveRandom Uso 'require_once' in tutte le mie classi, ma le istruzioni' require_once' e le istanze di classe sono create nella parte superiore della pagina di script. Qual è la differenza con 'spl_autoload_register'? – mlishn

+1

@DaveRandom: Non sono d'accordo. Le direttive 'include_once' e' require_once' non solo sono meno performanti, ma, cosa più importante, promuovono un'organizzazione e un'architettura sciatta. – FtDRbwLXw6

risposta

7

Non ho mai testato (né preoccupato) le prestazioni, ma io sempre uso un autoloader, perché rende la vita molto più semplice.

Per un'applicazione vedi: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

Quello che succede è che quando si tenta di accedere a una classe di esempio Foo di cui il file non è ancora stato caricato. Il caricatore automatico si avvierà e cercherà di caricare il file appartenente alla classe.

Questo può essere fatto facilmente organizzando "correttamente" i file nel progetto. Diciamo che hai una classe \Project\Http\Client (o "old style" non namespace Project_Http_Client) proverà a caricare il file: Project/Http/Client.php.

+0

come funziona se le istanze di classe vengono create nella parte superiore dello script? – mlishn

+0

Una delle prime cose che includi è il caricatore automatico nel tuo script. Prima di creare istanze di altre classi. Ho sempre inizializzato il caricatore automatico nel mio file bootstrap. – PeeHaa

+0

Giusto ma non è quasi equivalente a solo 'require_once' nella parte superiore dello script?Sto cercando di limitare il numero di istruzioni duplicate 'require_once' da classe a classe – mlishn

Problemi correlati