2012-11-29 17 views
5

Ho un dubbio sul modo giusto/best practice sul caricamento delle classi dipendenti in PHP.Qual è il modo giusto per caricare le dipendenze in PHP?

Solitamente inserisco tutte le dipendenze all'inizio di ogni classe con un valore include_once in modo simile alle importazioni Java. Qualcosa di simile:

include_once 'dto/SomeObjectDTO.php;' 
include_once 'dao/SomeObjectDAO.php;' 
include_once 'util/SomeObjectUtil.php;' 

class SomeObjectService{ 
    #class code here 
} 

Questo è il modo migliore per caricare le classi? O forse caricare tutte le classi in un Bootstrap.php? Altri modi?

Nota che sto parlando di caricare le mie classi, non di classi esterne complesse come i framework.

+4

L'utilizzo di un caricatore automatico è generalmente considerato la migliore prassi al giorno d'oggi –

+0

PHP è molto veloce ... È anche possibile utilizzare questo metodo .... –

risposta

2

Come Homer6 detto, caricamento automatico è un PHP incorporato nel meccanismo della dipendenza di caricamento.

PHP-FIG ha proposto una famiglia di standard di codifica PHP denominata PSR. PSR-0 si occupa della denominazione delle classi e dell'autoloading. Qui ci sono alcuni link:

Inoltre, tenere a mente, che caricamento automatico viene fornito con un prezzo. C'è un sacco di lavoro sulle corde e funziona con il fs nel caricatore automatico predefinito proposto (puoi implementare il tuo autoloader più veloce, ma non si conformerà allo standard). Questo rende l'autoloading lento quando è necessario caricare un sacco di classi. Quindi se dovessi caricare solo 2 classi, il tuo approccio sarebbe più veloce e più comprensibile.

2

PHP è possibile registrare il metodo di caricamento automatico. Symfony 2 contiene una bella classe con cui farlo.

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

Ho adattato per lavorare con la libreria che abbiamo scritto.

https://github.com/homer6/altumo/blob/master/source/php/loader.php

https://github.com/homer6/altumo/blob/master/source/php/Utils/UniversalClassLoader.php

Questo adattamento permette di avere spazi dei nomi che non richiedono lo spazio dei nomi di livello superiore per avere lo stesso nome della cartella.

1
set_include_path(get_include_path() 
     . PATH_SEPARATOR . 'path1' 
     . PATH_SEPARATOR . 'path2' 
); 

// auto load classes: 
function autoloadClasses($className) { 
require_once $className . '.php'; 
} 

spl_autoload_register('autoloadClasses'); 
Problemi correlati