App\Config
Config
Singleton-basiertes Konfigurationssystem. Lädt PHP-Konfigurationsdateien aus einem Verzeichnis, unterstützt Umgebungs-Overlays und bietet typsichere Getter mit Dot-Notation.
Die
Config-Klasse ist als Singleton implementiert. Der Konstruktor ist privat – Zugriff erfolgt ausschließlich über Config::getInstance(). Die Konfiguration ist nach dem ersten load()-Aufruf unveränderlich.Schnellstart
PHP
use App\Config\Config;
// Singleton-Instanz holen und Konfiguration laden
$config = Config::getInstance();
$config->load(__DIR__ . '/../config', 'production');
// Werte lesen
$dbHost = $config->getString('database.host', 'localhost');
$debug = $config->getBool('app.debug', false);
$port = $config->getInt('database.port', 3306);
Konfigurationsdateien
Jede PHP-Datei im Config-Verzeichnis muss ein assoziatives Array zurückgeben. Der Dateiname wird automatisch als Schlüssel-Prefix verwendet:
config/database.php
<?php
return [
'host' => 'localhost',
'port' => 3306,
'name' => 'meine_datenbank',
'user' => 'db_user',
'password' => 'geheim',
'charset' => 'utf8mb4',
];
// Zugriff: $config->get('database.host')
config/app.php
<?php
return [
'name' => 'Meine Anwendung',
'debug' => false,
'url' => 'https://example.com',
'locale' => 'de',
];
// Zugriff: $config->getString('app.name')
config/env/production.php – Umgebungs-Overlay
<?php
// Überschreibt Basis-Konfiguration für Production
return [
'database' => [
'host' => 'prod-db.server.com',
'password' => getenv('DB_PASSWORD'),
],
'app' => [
'debug' => false,
],
];
Methoden
| Methode | Rückgabetyp | Beschreibung |
|---|---|---|
| getInstance() | static | Gibt die Singleton-Instanz zurück (erstellt diese beim ersten Aufruf). |
| load(string $configDir, ?string $environment) | void | Lädt alle .php-Dateien aus $configDir. Optional wird ein Umgebungs-Overlay aus env/$environment.php gemergt. Wirft ConfigImmutableException beim zweiten Aufruf. |
| get(string $key, mixed $default = null) | mixed | Liest einen Wert per Dot-Notation. Gibt $default zurück wenn der Key fehlt. |
| getOrFail(string $key) | mixed | Wie get(), wirft jedoch ConfigKeyNotFoundException wenn der Key fehlt. |
| getString(string $key, string $default = '') | string | Typsicherer String-Getter. Wirft ConfigValidationException wenn der Wert kein String ist. |
| getInt(string $key, int $default = 0) | int | Typsicherer Integer-Getter. |
| getBool(string $key, bool $default = false) | bool | Typsicherer Boolean-Getter. |
| getArray(string $key, array $default = []) | array | Typsicherer Array-Getter. |
| has(string $key) | bool | Prüft ob ein Key existiert (auch wenn sein Wert null ist). |
| all() | array | Gibt die gesamte Konfiguration als Array zurück. |
| reset() (static) | void | Setzt die Singleton-Instanz zurück. Nur für Tests verwenden! |
Exceptions
| Exception | Wann |
|---|---|
| ConfigImmutableException | load() wird ein zweites Mal aufgerufen |
| ConfigFileNotFoundException | Config-Verzeichnis oder Datei nicht gefunden |
| ConfigKeyNotFoundException | getOrFail() mit fehlendem Key |
| ConfigValidationException | Typsicherer Getter mit falschem Typ / Path-Traversal |
Praxisbeispiele
PHP – Umgang mit fehlenden Keys
$config = Config::getInstance();
// Mit Default-Wert (sicher)
$timeout = $config->getInt('app.timeout', 30);
// Ohne Default (wirft Exception wenn fehlt)
$secret = $config->getOrFail('app.jwt_secret');
// Existenzprüfung
if ($config->has('app.feature_flags.dark_mode')) {
$darkMode = $config->getBool('app.feature_flags.dark_mode');
}
PHP – In Tests zurücksetzen
// setUp() in PHPUnit
protected function setUp(): void
{
Config::reset(); // Singleton zurücksetzen
$config = Config::getInstance();
$config->load(__DIR__ . '/fixtures/config', 'testing');
}
Config::reset() ist ausschließlich für Unit-Tests gedacht. In der Produktionsumgebung sollte die Konfiguration einmalig geladen und danach nicht mehr verändert werden.