Utilizzando spl_autoload_register () , dovrei usare una singola funzione di caricamento automatico che contenga tutta la logica per determinare dove sono i file di inclusione o dovrei interrompere ogni raggruppamento di inclusione nella sua stessa funzione con la sua logica includere i file per la funzione chiamata? Poiché i luoghi in cui possono risiedere i file possono espandersi, anche la logica di una singola funzione. Se lo suddivido in più funzioni, posso aggiungere delle funzioni quando vengono aggiunti nuovi raggruppamenti, ma le funzioni saranno copia / incolla l'una dell'altra con piccole modifiche.
Attualmente ho uno strumento con una singola funzione di caricamento automatico che distingue il nome della classe e cerca di prevedere dove si trova e quindi includerlo. A causa delle convenzioni di denominazione per il progetto, questo è stato piuttosto semplice.
if has namespace
if in template namespace look in Root\Templates
else look in Root\Modules\Namespace
else
look in Root\System
if file exists include
Ma stiamo iniziando a includere Interfacce e Tracce nella nostra base di codice e mi fa male includere il tipo di una cosa nel suo nome. Quindi guardiamo invece di una singola funzione di caricamento automatico che scava il nome della classe e cerca il file e ha una logica sempre più complessa, stiamo cercando di registrare più funzioni di caricamento automatico. Ma ognuno segue lo stesso schema e ogni volta che vedo che divento paranoico sulla copia del codice.
function systemAutoloadFunc
logic to create probable filename
if filename exists in system include it and return true
else return false
function moduleAutoloadFunc
logic to create probable filename
if filename exists in modules include it and return true
else return false
Ogni funzione di caricamento automatico seguirà quel modello e l'ultimo di ogni funzione se il nome del file esiste, include return true else return false sarà un codice identico. Questo mi rende paranoico sul fatto di doverlo aggiornare più tardi su tutta la linea se il file_exists include il modello che stiamo usando sempre. O è solo che, la paranoia e le molteplici funzioni con un codice identico è l'opzione migliore?