Domanda

Da php.net :

  

In PHP 5, questo non è più necessario. Puoi definire un __autoload () funzione che viene automaticamente chiamata nel caso in cui si stia tentando di utilizzare una classe / interfaccia non ancora definita. Chiamando questa funzione al motore di scripting viene data l'ultima possibilità di caricare la classe prima che PHP fallisca con un errore.

Ora voglio sapere, è una cattiva pratica usare esclusivamente __autoload per caricare le classi appropriate su un sito dinamico?

Il modo in cui il mio sito è configurato è di includere i file nel file index.php , ad esempio http://www.site.com/index.php?p=PAGE-I-WANT-TO-LOAD

Quindi, se mi trovo nella sezione forum o blog del mio sito, voglio caricare solo le classi e le funzioni appropriate, quindi uso il caricamento automatico ma non includo mai un file manualmente, dovrei usare __autoload come ultima risorsa o cosa sto facendo bene anche su un sistema ad alto traffico?

È stato utile?

Soluzione

Bad? No. __autoload () è una delle mie aggiunte preferite a PHP 5. Rimuove la responsabilità (e il fastidio) di dover includere / richiedere manualmente i file di classe necessari alla tua applicazione. Detto questo, dipende da te come sviluppatore assicurarti che vengano caricate solo le "classi appropriate". Questo può essere fatto facilmente con uno schema di denominazione strutturato e una struttura di directory. Ci sono molti esempi online su come usare correttamente __autoload (), fare una ricerca su Google e troverai molte informazioni.

Altri suggerimenti

Il caricamento automatico è un buon modo per caricare solo le classi necessarie.

In PHP 5 > = 5.1.2, la maggior parte dei problemi con il vecchio __autoload () è scomparsa, grazie a spl_autoload_register () .

  

Ora voglio sapere, è una cattiva pratica usare esclusivamente __autoload per caricare le classi appropriate su un sito dinamico?

Niente affatto. Puoi fare affidamento sul caricamento automatico, tutto ciò che devi fare è escogitare una buona convenzione di denominazione e implementare un caricatore automatico efficiente.

C'è un grosso problema da considerare. Il caricamento automatico e Zend Guard non giocano bene insieme, perché Zend Guard tende a rinominare le cose, il che significa che molto probabilmente la convenzione di denominazione che hai deciso di utilizzare non sarà la stessa. Se utilizzerai Zend Guard (o qualsiasi altro offuscatore per quella materia) molto probabilmente sarai costretto a includere tutti i file a mano.

Ecco una citazione dal manuale dell'utente di Zend Guard:

  

Le classi di caricamento automatico non funzioneranno poiché il nome file sul disco non funzionerebbe   corrisponde al nome della classe offuscata.

L'unico pericolo per __autoload () è se si definisce una funzione di caricamento automatico scadente. In generale, tutto ciò che otterrai in termini di prestazioni è un po 'di ricerca del disco poiché PHP cerca i file giusti che contengono le tue classi. Il lato positivo è sbarazzarsi di tutte quelle fastidiose chiamate include () .

Se sei preoccupato per le prestazioni a questo livello, allora dovresti già utilizzare una cache opcode come APC.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top