2011-02-03 12 views
9

È una cattiva pratica?PHP - definizione di classi all'interno di una funzione

piace:

function boo(){ 
    require_once("class.moo.php"); 
} 
... 

?

+0

Possibile duplicato di [# 2619573] (http://stackoverflow.com/questions/2619573/how-to-use-include-within-a-function) – drudge

+0

Penso che sia un dup di [questo] (http: //stackoverflow.com/questions/1669707/should-require-once-some-file-php-appear-anywhere-but-the-top-of-the-file) in realtà – greatwolf

risposta

7

è una cattiva pratica; no non lo è.

Probabilmente hai intenzione di ottenere entrambe le risposte, ed ecco perché:

Se si utilizza __autoload (o equivalente), chiamando:

function someFunc() 
{ 
    $n = new UndefinedClassName(); 
} 

è equivalente a:

function someFunc() 
{ 
    include('path/to/UndefinedClassName.php'); 
    //may be require_once, include_once, include, or require 
    //depending on how autoload is written 
    $n = new UndefinedClassName(); 
} 

Tuttavia, se si evita l'uso di __autoload, si otterranno prestazioni migliori dal codice. E per mantenere il tuo codice, è meglio mettere tutto il tuo includes nella parte superiore dello script come faresti per le istruzioni import in altre lingue.

include('path/to/UndefinedClassName.php'); 
...code... 
function someFunc() 
{ 
    $n = new UndefinedClassName(); 
} 

Vorrei suggerire la coerenza. Se nelle funzioni si chiama costantemente lo include, non si dovrebbero avere troppi problemi, ma sceglierei importazioni all'inizio dei file o come autoloads.

3

Vorrei evitarlo.

Non è quello che un altro sviluppatore si aspetterebbe e, in quanto tale, ridurrebbe la manutenibilità del codice.

+2

"non è quello che un altro sviluppatore si aspetterebbe" a meno che ovviamente l'altro sviluppatore sta facendo la stessa cosa ... – zzzzBov

+0

@zzzzBov: Beh, intendo uno sviluppatore "normale", ovviamente. Le pratiche non standard sono cattive pratiche, IMO. –

+1

Sono d'accordo con quello che stai dicendo su alcuni livelli, ma è importante distinguere * quale * standard stai parlando. Non esiste uno standard * ufficiale *, c'è solo il modo in cui altri programmatori hanno scritto codice in passato. La cosa più vicina a uno standard * ufficiale * è la specifica di codifica e la sintassi, che è liberale per una ragione. – zzzzBov

1

Ecco come funzionano i programmi di caricamento classe. Questa non è necessariamente una cattiva pratica.

Dipende da cosa fa la funzione e perché lo stai facendo. L'utilizzo di autoloading potrebbe essere più appropriato.

0

Se avete motivi per questo non vedo niente di male.

1

Questa è generalmente una cattiva pratica e dovrebbe essere evitata. Probabilmente dovresti prendere in considerazione l'utilizzo di autoloader.

+0

Come affermato altrove, è fondamentalmente come funziona il caricatore automatico. – Mchl

+0

Sì, ma il caricatore automatico non presenta gli stessi problemi di leggibilità/manutenibilità. – keithjgrant

Problemi correlati