È una cattiva pratica?PHP - definizione di classi all'interno di una funzione
piace:
function boo(){
require_once("class.moo.php");
}
...
?
È una cattiva pratica?PHP - definizione di classi all'interno di una funzione
piace:
function boo(){
require_once("class.moo.php");
}
...
?
Sì è 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
.
Vorrei evitarlo.
Non è quello che un altro sviluppatore si aspetterebbe e, in quanto tale, ridurrebbe la manutenibilità del codice.
"non è quello che un altro sviluppatore si aspetterebbe" a meno che ovviamente l'altro sviluppatore sta facendo la stessa cosa ... – zzzzBov
@zzzzBov: Beh, intendo uno sviluppatore "normale", ovviamente. Le pratiche non standard sono cattive pratiche, IMO. –
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
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.
Se avete motivi per questo non vedo niente di male.
Questa è generalmente una cattiva pratica e dovrebbe essere evitata. Probabilmente dovresti prendere in considerazione l'utilizzo di autoloader.
Come affermato altrove, è fondamentalmente come funziona il caricatore automatico. – Mchl
Sì, ma il caricatore automatico non presenta gli stessi problemi di leggibilità/manutenibilità. – keithjgrant
Possibile duplicato di [# 2619573] (http://stackoverflow.com/questions/2619573/how-to-use-include-within-a-function) – drudge
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