2010-12-08 25 views
0

Ich habe settings.php-Datei, die ich einige Konstanten beibehalten möchte, wie meine db connect info.PHP kapseln globale Variablen

Was ich erreichen möchte, aber für das Leben von mir, ich kann mir nicht vorstellen, wie es geht, ist ... Ich will nicht jede Konstante in meiner settings.php weltweit verfügbar. Ich benutze ein MVC-Setup und zum Beispiel habe ich meine meine DB-Verbindungsinformationen in meinem Controller nicht verfügbar.

Meine Frage ist, wie ich ein Setup zu tun Settings wie diese Datei:

class Settings { 

    const HOST = 'localhost'; 

    .... 

    const DEBUG = true; 
} 

dann in meine Anwendung laden, so dass mein DB-Verbindung Konstanten in nur meine Modellklasse eingekapselt ist und so weiter.

Ich bin mir sicher, ich erkläre das nicht das Beste, was ich sein könnte, aber im Grunde möchte ich A: habe einen zentralen Ort für alle Einstellungen und B: es so zu machen, dass ich den Zugriff auf diese Einstellungen im gesamten Anwendung, damit sie nicht alle global verfügbar sind.

Das Problem, das ich habe, ist, dass, wenn ich die settings.php-Datei in meine Elternklasse einschließen, dann alle Klassen, die davon enthalten, auch Zugriff auf settings.php haben.

+0

Was ist der Punkt für solche Konstanten? Verwenden Sie normale Variablen, erstellen Sie eine PDO-Verbindung, und heben Sie diese Variablen auf (oder lassen Sie sie von GC verarbeiten). – Crozin

+0

So können die Werte nicht geändert werden, wenn etwas zusammenkommt. Also, denkst du, es ist egal? – imns

Antwort

1

Wrap sie in einer Funktion und rufen Sie sie, z.

function init() { 
    $model = new Model; 
    $model->setConfigurationValue('name', 'value); 
    // etc ... 
} 
init(); 

So ist nichts global.

Persönlich verwende ich die symfony components YAML-Bibliothek, um meine Konfiguration in YAML-Dateien zu speichern, die automatisch in ein Singleton-Konfigurationsobjekt geladen werden, das den Zugriff von überall ermöglicht, den Status jedoch nicht ändert. Einfach zu ändern Konfiguration ohne Unordnung mit Code, und ich benutze mehrere YAML-Dateien, so dass meine DEV-Umgebung zusätzliche Konfig usw. hinzugefügt

+0

Obwohl nicht gern auf YAML solche Einstellungen in externen Dateien beibehalten, ist IMHO der Weg zu gehen. – mhitza

+0

Ja; Was mir an der Symfony YAML-Bibliothek gefallen hat, ist, dass Sie PHP auch in Ihre YAML einbetten können. Seltsam, aber nützlich. Welchen Ansatz nimmst du? INI-Dateien? Etwas anderes? –

+0

Die externe Datei versuche ich mit einer settings.php Datei zu erstellen. Ich bin jedoch nicht von YAML gefunden. – imns

0

Ich würde Ihre Klasse in einer Datei namens "local_settings.php" definieren. "einfach" die Datei "und" instansiate Ihre Klasse dies an der Spitze Ihrer PHP-Programme.

Für alle, die über Globals winseln, sind das wirklich die Werte, die global sind! Es ist unwahrscheinlich, dass Sie eine andere Klasse haben, die an einer anderen Version Ihres Modells arbeiten und eine Verbindung zu einer anderen Datenbank herstellen möchte.