2010-01-17 43 views
5

Sono curioso, non v'è alcun guadagno di prestazioni, come l'utilizzo di meno memoria o le risorse in PHP per:PHP array vs PHP Costante?

50 differenti variabili di impostazione salvati in un array come questo

$config['facebook_api_secret'] = 'value here'; 

O 50 differenti variabili di impostazione salvati in un costante come questo

define('facebook_api_secret', 'value here'); 

risposta

11

credo che questo sia nel regno di essere un micro-ottimizzazione. Cioè, la differenza è abbastanza piccola che non vale la pena usare una soluzione sull'altra per motivi di prestazioni. Se le prestazioni fossero così importanti per la tua app, non useresti PHP! :-)

Utilizzare ciò che è più conveniente o che ha più senso. Metto i dati di configurazione in costanti, se solo perché non dovrebbero essere autorizzati a cambiare dopo che il file di configurazione è stato caricato, ed è a questo che servono le costanti.

+0

Capisco solo immaginato che vedrei se 1 fosse migliore dell'altro dato che possono realizzare la stessa cosa. – JasonDavis

+1

Un altro modo in cui le costanti possono essere considerate migliori è che un editor o IDE intelligente dovrebbe essere in grado di eseguire il completamento del codice per loro. Ma il completamento del codice non funziona per le chiavi stringa di un array di configurazione. –

1

I guadagni di prestazioni per 50 variabili utilizzando una tecnica di codifica diversa/trucchi di programmazione intelligenti sono il modo sbagliato di fare le cose in PHP. Ricorda sempre: l'ottimizzatore è più intelligente di quello che sei.

1

Non si riceverà alcun tipo di guadagno in termini di prestazioni per nessuno di questi. La vera domanda è quale sia più utile.

Per valori scalari (stringhe, int, ecc.) Definiti una volta, non dovrebbero mai cambiare e devono essere accessibili in tutto il luogo, è necessario utilizzare una costante.

Se avete qualche tipo di configurazione annidata complesso, ad esempio:

$config->facebook->apikey = 'secret_key'; 
$config->facebook->url = 'http://www.facebook.com'; 

si consiglia di utilizzare un array o di un'API di configurazione fornito da uno dei tanti quadri là fuori (Zend_Config non è male)

+0

Le costanti sono MOLTO MOLTO più veloci di una classe di configurazione. Non c'è costrutto e no -> getters() con costanti contro classe. Non sembrano così belli però :) – gus

+0

FYI: collegamento interrotto – James

3

Nei miei test informali, ho effettivamente riscontrato che l'accesso/definizione delle costanti è un po 'più lento delle normali variabili/matrici.

non ha intenzione di fare un diverso in ogni caso; più che probabile qualunque cosa tu faccia con questi accadrà in millesimi di secondo.

L'ottimizzazione del DB (indicizzazione, utilizzo di EXPLAIN per controllare le query) e l'impostazione del server (tramite APC) faranno più differenza nel lungo periodo.