Signatur
Beschreibung
Yaf_Config_Abstract ist die abstrakte Basisklasse des Yaf-Frameworks (Yet Another Framework) für Konfigurationsobjekte. Sie definiert eine einheitliche Schnittstelle, über die Konfigurationsdaten gelesen, geprüft und bei Bedarf verändert werden können. Konkrete Implementierungen wie Yaf_Config_Ini oder Yaf_Config_Simple erben von dieser Klasse.
Die Klasse implementiert die PHP-Schnittstellen Iterator, ArrayAccess und Countable, sodass Konfigurationsdaten wie normale Arrays durchlaufen, per Offset-Zugriff gelesen und gezählt werden können. Dieser Ansatz erlaubt eine flexible und konsistente Handhabung von Konfigurationsdaten unabhängig von der zugrundeliegenden Datenquelle (INI-Datei, PHP-Array, Datenbank usw.).
Durch die abstrakte Natur der Klasse können Entwickler eigene Konfigurationsquellen implementieren, indem sie Yaf_Config_Abstract erweitern und die vorgeschriebenen abstrakten Methoden wie get(), set(), isset() und unset() konkret implementieren. So lässt sich das Konfigurationssystem von Yaf nahtlos erweitern.
Im normalen Projekteinsatz wird diese Klasse selten direkt verwendet; stattdessen arbeitet man mit den mitgelieferten Unterklassen Yaf_Config_Ini (für INI-Dateien) und Yaf_Config_Simple (für PHP-Arrays). Das Vorhandensein der abstrakten Basisklasse ist jedoch nützlich, wenn man Code schreiben möchte, der mit beliebigen Konfigurationsquellen umgehen kann (Dependency Injection, Type Hints).
Beispiele
Eigene Konfigurationsklasse auf Basis von Yaf_Config_Abstract
<?php
class MyConfig extends Yaf_Config_Abstract {
protected $_data = [];
public function __construct(array $data) {
$this->_data = $data;
}
public function get(string $name, $default = null) {
return $this->_data[$name] ?? $default;
}
public function set(string $name, $value): self {
$this->_data[$name] = $value;
return $this;
}
public function isset(string $name): bool {
return isset($this->_data[$name]);
}
public function unset(string $name): bool {
unset($this->_data[$name]);
return true;
}
public function toArray(): array {
return $this->_data;
}
// Iterator-Methoden
public function current() { return current($this->_data); }
public function key() { return key($this->_data); }
public function next() { next($this->_data); }
public function rewind() { reset($this->_data); }
public function valid() { return key($this->_data) !== null; }
// ArrayAccess-Methoden
public function offsetGet($offset) { return $this->get($offset); }
public function offsetSet($offset, $value) { $this->set($offset, $value); }
public function offsetExists($offset) { return $this->isset($offset); }
public function offsetUnset($offset) { $this->unset($offset); }
// Countable
public function count(): int { return count($this->_data); }
}
$config = new MyConfig([
'database' => 'mysql',
'host' => 'localhost',
'port' => 3306,
]);
echo $config->get('host'); // localhost
echo PHP_EOL;
echo count($config); // 3
echo PHP_EOL;
foreach ($config as $key => $value) {
echo "$key = $value" . PHP_EOL;
}
Verwendung von Yaf_Config_Simple als konkrete Unterklasse
<?php
// Yaf muss als Extension geladen sein (php.ini: extension=yaf.so)
$data = [
'application' => [
'directory' => '/var/www/app',
'env' => 'production',
],
'database' => [
'host' => 'db.example.com',
'port' => 5432,
],
];
$config = new Yaf_Config_Simple($data);
// Zugriff über Methode
$appConfig = $config->get('application');
echo $appConfig->get('env'); // production
echo PHP_EOL;
// Zugriff über Array-Syntax (ArrayAccess)
echo $config['database']['host']; // db.example.com
echo PHP_EOL;
// Readonly-Prüfung
var_dump($config->readonly()); // bool(true) — standardmäßig unveränderlich
// Wichtig · Fallstricke
Yaf muss als PECL-Extension installiert sein (pecl install yaf) und in der php.ini aktiviert werden (extension=yaf.so). Ohne diese Extension ist die Klasse nicht verfügbar.
- Standardmäßig sind Yaf-Konfigurationsobjekte schreibgeschützt (readonly). Um Werte zu ändern, muss beim Erstellen der zweite Parameter
trueübergeben werden (z. B.new Yaf_Config_Simple($data, true)), andernfalls wirftset()eineYaf_Exception. - Verschachtelte Konfigurationsabschnitte werden ebenfalls als
Yaf_Config_Abstract-Objekte zurückgegeben, was einen konsistenten objektorientierten Zugriff auf alle Ebenen ermöglicht. - Da die Klasse abstrakt ist, kann sie nicht direkt instanziiert werden — immer eine konkrete Unterklasse verwenden.