Start · Sprachen · PHP · Referenz · Yaf_Config_Simple

Yaf_Config_Simple

Klasse

Einfacher, array-basierter Konfigurationscontainer im Yaf-Framework, der PHP-Arrays als Konfigurationsdaten kapselt.

seit PHP 2.0.0 Kategorie: misc

Signatur

class Yaf_Config_Simple extends Yaf_Config_Abstract implements Iterator, ArrayAccess, Countable

Beschreibung

Yaf_Config_Simple ist eine konkrete Implementierung von Yaf_Config_Abstract im Yet Another Framework (Yaf). Sie dient dazu, ein gewöhnliches PHP-Array als Konfigurationsobjekt zu verwalten, das dann per Objekt-Eigenschaftszugriff, Array-Zugriff oder Iterator-Interface gelesen werden kann.

Im Gegensatz zu Yaf_Config_Ini, die Konfigurationsdaten aus einer INI-Datei lädt, erwartet Yaf_Config_Simple die Konfigurationsdaten direkt als PHP-Array im Konstruktor. Das macht sie besonders nützlich für Tests, für dynamisch erzeugte Konfigurationen oder wenn man Konfigurationswerte aus einer Datenbank oder einer anderen Quelle laden und als strukturiertes Objekt bereitstellen möchte.

Der zweite Parameter readonly steuert, ob die Konfiguration nach der Initialisierung verändert werden darf. Ist dieser auf true gesetzt, löst jeder Schreibzugriff eine Ausnahme aus, was die Unveränderlichkeit der Konfiguration zur Laufzeit sicherstellt.

Da die Klasse Iterator, ArrayAccess und Countable implementiert, kann sie direkt in foreach-Schleifen verwendet, per $config['key'] zugegriffen und mit count() gezählt werden.

Parameter

Name Typ Default Beschreibung
$config Pflicht array Ein assoziatives PHP-Array mit den Konfigurationsdaten. Verschachtelte Arrays werden automatisch als weitere Yaf_Config_Simple-Instanzen gekapselt.
$readonly bool false Gibt an, ob die Konfiguration schreibgeschützt ist. Bei true werden Änderungen an den Konfigurationswerten zur Laufzeit verhindert.

Beispiele

Einfache Konfiguration lesen

<?php
$data = [
    'database' => [
        'host'     => 'localhost',
        'port'     => 3306,
        'name'     => 'mydb',
    ],
    'debug' => true,
];

$config = new Yaf_Config_Simple($data);

// Eigenschaftszugriff
echo $config->debug;                    // true
echo $config->database->host;          // localhost
echo $config->database->port;          // 3306

// Array-Zugriff
echo $config['database']['name'];      // mydb
1 localhost 3306 mydb

Schreibgeschützte Konfiguration und Iteration

<?php
$data = [
    'app_name' => 'MeineApp',
    'version'  => '1.0.0',
    'env'      => 'production',
];

// Schreibgeschützt initialisieren
$config = new Yaf_Config_Simple($data, true);

// Über alle Schlüssel iterieren
foreach ($config as $key => $value) {
    echo $key . ': ' . $value . PHP_EOL;
}

// Anzahl der Konfigurationswerte
echo 'Anzahl: ' . count($config) . PHP_EOL;

// Versuch, einen Wert zu ändern (wirft Ausnahme bei readonly=true)
try {
    $config->env = 'development';
} catch (Yaf_Exception $e) {
    echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
}
app_name: MeineApp version: 1.0.0 env: production Anzahl: 3 Fehler: ...

Konfiguration aus Datenbankwerten aufbauen

<?php
// Simulierte Daten aus der Datenbank
$rowsFromDb = [
    'smtp_host'     => 'mail.example.com',
    'smtp_port'     => 587,
    'smtp_user'     => 'noreply@example.com',
    'smtp_password' => 'geheim',
];

$mailConfig = new Yaf_Config_Simple($rowsFromDb);

// Konfiguration an Mailer-Klasse übergeben
function createMailer(Yaf_Config_Simple $cfg): array {
    return [
        'host' => $cfg->smtp_host,
        'port' => $cfg->smtp_port,
        'auth' => [$cfg->smtp_user, $cfg->smtp_password],
    ];
}

$mailerParams = createMailer($mailConfig);
var_dump($mailerParams['host']);
string(16) "mail.example.com"

// Wichtig · Fallstricke

Yaf muss installiert sein: Yaf_Config_Simple ist Teil der PECL-Erweiterung yaf und steht nicht in einer Standard-PHP-Installation zur Verfügung. Die Erweiterung muss über PECL oder als Systempaketverfügbar sein.

Verschachtelte Arrays: Mehrdimensionale Arrays werden rekursiv in Yaf_Config_Simple-Objekte umgewandelt. Das Verhalten kann bei tiefer Verschachtelung Auswirkungen auf die Lesbarkeit und Debugging haben.

Readonly-Modus: Beim Einsatz in Produktionsumgebungen empfiehlt sich readonly = true, um unbeabsichtigte Änderungen an der Konfiguration zur Laufzeit zu verhindern.