È consigliabile avere un solo file di "include / require"?

4

Ho 5-10 file su un server che catturano tutte le richieste XMLRPC-PHP. Ci sono circa 20 righe di require_once in ognuna che sono tutte uguali. Mi renderebbe la vita più semplice per me creare un file separato che abbia solo requires e require nei miei file XMLRPC. È questa la migliore pratica o apre problemi che non conosco?

    
posta SomeKittens 24.07.2012 - 16:00
fonte

3 risposte

7

L'ho già fatto prima e ciò ha risparmiato un po 'di sforzo, ma l'ho ottenuto in modo poco pratico perché non sempre avevo bisogno di ogni singolo file e talvolta ne avevo bisogno di altri. Se hai sempre bisogno di quelli e solo quelli, allora penso che sia un buon piano.

Tuttavia, ci sono alternative se si ha il controllo della gerarchia dei file e non si utilizzano librerie di terze parti, ad es. utilizzando la funzione __autoload () di php per far sì che i file vengano automaticamente inclusi quando si tenta di creare un'istanza della classe. Preferirei questo, se possibile, perché ha bisogno di molta meno manutenzione.

    
risposta data 24.07.2012 - 16:05
fonte
3

Fondamentalmente qualsiasi insieme di codice identico in più posti dovrebbe essere consolidato. Finché sei sicuro che lo stesso identico insieme di inclusioni sia richiesto in ogni posto, le metterei insieme in un unico file. La differenza di prestazioni (se presente) è trascurabile e la manutenibilità è più importante.

    
risposta data 24.07.2012 - 17:01
fonte
2

Sì, sicuramente renderà la tua vita più semplice. Come menzionato da altri prima, raccomanderei l'uso del meccanismo di autoloading.

Esiste un'implementazione nel manuale PHP , l'ho trovata carina utile. Potrebbe assomigliare a questo:

function my_autoloader($class) {
    include 'classes/' . $class . '.class.php';
}

spl_autoload_register('my_autoloader');

// Or, using an anonymous function as of PHP 5.3.0
spl_autoload_register(function ($class) {
    include 'classes/' . $class . '.class.php';
});

Se sei su PHP 5.3, considera anche l'uso di namespace. In realtà è ancora più semplice avere una buona struttura e un semplice caricatore automatico implementato di default:

spl_autoload_extensions(".php"); // comma-separated list
spl_autoload_register();

Tuttavia, ricordo un bug lì. Di solito ho un file 'bootstrap', con questo autoloader:

spl_autoload_register(function($class) {
    if(file_exists('./lib/' . str_replace('\', '/', $class) . '.php')) {
        require_once './lib/' . str_replace('\', '/', $class) . '.php';
    }
});

Usando questo meccanismo, hai una struttura di cartelle che imita la struttura dello spazio dei nomi. Con questo approccio, hai una buona struttura e non devi preoccuparti di includere le tue librerie e altre classi.

    
risposta data 25.07.2012 - 08:42
fonte

Leggi altre domande sui tag