Devo utilizzare i caricatori automatici nei moduli?

1

Diciamo che sto eseguendo un'applicazione PHP come Magento, PrestaShop.

Ora questi sistemi hanno i propri caricatori automatici per caricare i controller in base a percorsi, classi, modelli, ecc.

richiesti

La maggior parte delle volte come sviluppatore creo un modulo per implementare una sorta di funzionalità personalizzata. Questi moduli risiedono in /modules/mymodule/ . Alcuni di questi moduli hanno le loro classi come modelli, strumenti, ecc.

Voglio sapere se è buona norma usare autoload.php nei moduli (di fronte all'essere inclusi i file manualmente)? Cosa succede se ci sono 20+ moduli e tutti hanno registrato un autoloader? Qualsiasi problema di prestazioni / architettura?

La funzione autloader è semplice:

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

I namespace non sono ancora permessi (supporto per PHP 5.2). I nomi delle classi sono di solito dei nomi.

    
posta gskema 10.08.2015 - 22:11
fonte

1 risposta

4

Ok, per prima cosa: stai eseguendo PHP 5.2 !? Non c'è davvero molto motivo per stare con l'altro che avere server scaduti, e questo significa che è il momento di cambiare host o aggiornare i server perché PHP 5.2 ha alcuni problemi di sicurezza noti che non verranno mai risolti. Ciò ti consentirà anche di accedere a una serie di nuove funzionalità, la più pertinente alla tua situazione essendo spazi dei nomi, che verranno visualizzati in seguito.

L'attuale pratica migliore / più comune per il caricamento automatico è PSR-0 / PSR-4 che stabilisce convenzioni chiare e coerenti per l'autoloading. Ciò è dovuto principalmente al fatto che Composer è diventato una parte così ampiamente utilizzata della toolchain di PHP. Il vantaggio principale dell'utilizzo di autoloading coerente in cui nomi di classe / spazi dei nomi sono legati al file system è che non è necessario avere più caricatori automatici registrati, ne basta uno che può fare la maggior parte della ricerca per te.

Quindi, nel caso di qualcosa che usa PSR-4, una classe come Namespace\Namespace2\Classname (o Namespace__Namespace2__Classname nel mondo di pre-namespace) si associa ad un percorso come Namespace/Namespace2/Classname.php , che il caricatore automatico può facilmente programmare includi per te una volta. Dal punto di vista delle prestazioni, è più veloce dell'utilizzo di require_once * e, dal punto di vista della codifica, significa che non devi ricordarti di aggiungere le tue dichiarazioni include / require in ogni file. Inoltre, non devi tenere aggiornate le dichiarazioni di include quando vuoi rinominare o spostare una classe: il caricatore automatico si occupa di collegare tutto per te.

* Dovrei ammettere che la memorizzazione nella cache del codice operativo rende l'argomento della velocità in gran parte irrilevante per la maggior parte

    
risposta data 11.08.2015 - 02:08
fonte

Leggi altre domande sui tag