2009-01-13 20 views
5

Ich schreibe eine Anwendung in PHP, die eine Menge globaler Variablen verwendet, die im gesamten Skript verwendet werden. Im Moment habe ich eine Konfigurationsdatei, die eine Reihe globaler Variablen speichert, die mit der define()-Funktion erstellt wurden, aber da ich so viele habe, wäre es besser, eine Tabelle in der Datenbank zu erstellen, die nur Variablennamen enthält und Werte, und auf diese zugreifen, haben eine Funktion, die die Datenbank abfragt, die Variable findet, den Wert zurückgibt und den Wert für die zukünftige Verwendung zwischenspeichert.Die beste Methode zum Speichern globaler Variablen

Ich bin auch willkommen zu anderen Ideen zum Speichern globaler Variablen.

+0

Wenn Sie so viele globale Variablen verwenden, die Sie das Bedürfnis verspüren, diese Frage zu stellen, gibt es eine gute Chance, dass Sie Ihren Code durch Refactoring verbessern könnten. – EBGreen

+0

Welche Art von Daten speichern Sie in Konstanten? Konfigurationsoptionen? Etwas sagt mir, dass Sie nicht objektorientierten Code schreiben, was manchmal ok ist, aber es gibt eine Menge Macht, wenn Dinge in Objekten sind, die miteinander in Beziehung stehen. Die Tatsache, dass Sie Konstanten verwenden, bestätigt dies. – yaauie

Antwort

9

Die Funktion define() erstellt Konstanten, keine globalen Variablen. Globale Variablen sollten sparsam verwendet werden, da sie versehentlich (oder böswillig!) Beschädigt werden können, jedoch sind Konstanten absolut sicher.

Ich finde es am einfachsten, nur eine Datei mit dem Namen 'config.php' zu haben, die alle Konstanten aufstellt, es ist schneller und einfacher.

+0

Ja, ich denke, die Art, wie ich es gerade mache, ist in Ordnung, da es die schnellste Methode ist. –

0

Nun, das hängt von der Struktur Ihrer Anwendung ab. Wenn Sie bei einer bestimmten Seitenlast nur eine oder zwei von mehreren hundert Variablen benötigen, können Benchmark-Tests zeigen, dass die Abfrage der Datenbank möglicherweise schneller ist als eine umfangreiche Konfigurationsdatei. Sie müssen jedoch vorsichtig sein, wenn Sie Ihre Datenbank mit zu vielen Abfragen jedes Mal neu belegen, wenn der Benutzer etwas unternehmen möchte. Caching kann den Overhead reduzieren, der durch redundante Anforderungen hinzugefügt wird, aber das ist der Umfang seiner Verwendung.

Wenn diese Variablen meist kurze Strings oder boolesche Flags sind, dann denke ich, dass Ihre Antwort weitgehend darauf beruht, was Sie gut beibehalten können. Eine gut strukturierte INI-Datei wäre einfacher zu pflegen als eine große Datenbank, wenn sich diese Variablen selten ändern und immer von Hand geändert werden. Wenn sich diese Variablen ständig und niemals von Hand ändern, ist es wahrscheinlich klüger, alle Variablen in eine Datenbank zu laden.

Persönlich habe ich mich in beiden Situationen gefunden, und ich habe beide Methoden entsprechend verwendet. Wenn Sie wirklich unentschlossen sind, können Sie immer nur einige Benchmark-Tests durchführen. Laden Sie eine Seite, die Konfigurationsinformationen aus der Datenbank abruft, und laden Sie dann eine Seite mit einer INI-Datei (oder einer .php-Datei mit define() s).

(Und pedantisch gesprochen, define() schafft Konstanten im globalen Bereich, nicht globale Variablen.)

Verwandte Themen