Nous allons voir aujourd'hui un exemple de classe héritant de la classe abstraite ConfigurationHandler ainsi que l'interface iConfigurationHandler que nous avons déjà vu dans un billet précédant.

Il suffit juste d'indiquer comment doivent se lire et s'enregistrer les différentes variables de configuration dans le fichier .ini.

class IniFile_ConfigurationHandler extends ConfigurationHandler implements iConfigurationHandler {

private $file;

public function __construct($file, $auto=false) {
parent::__construct($auto);
$r = (file_exists($file) && is_file($file))
? (is_readable($file) && is_writable($file))
? $this->file = $file
: new Exception('failed to open stream: Permission denied')
: new Exception('failed opening \''.$file.'\': No such file');
if ($r instanceof Exception) throw $r;
}

public function load() {
$this->setData(parse_ini_file($this->file, false));
return $this;
}

public function save() {
$str = null;
foreach($this->data as $name => $value) {
$str.= $name.' = '. ((is_int($value))
? $value
: (is_bool($value))
? ($value) ? 'On' : 'Off'
: '"'.$value.'"').PHP_EOL;
}
file_put_contents($this->file, $str);
return $this;
}

}

Ainsi, pour dire à notre classe Configuration qu'elle doit lire et enregistrer ses valeurs dans le fichier config.ini, nous l'utiliserons désormais de la façon suivante :

$maMethode = new IniFile_ConfigurationHandler('config.ini');
$maConfiguration = new Configuration($maMethode);

$maConfiguration->maVariable = 'Hello World !';
$maConfiguration->foo = 'bar';

$maMethode->save();

Lire la suite