La classe DataBase_ConfigurationHandler

Pour ce faire, il faudra indiquer à la classe Configuration comment elle doit lire et enregistrer les informations qu'elle manipule.

Il suffit donc de reprendre la classe abstraite ConfigurationHandler au sein d'une nouvelle classe (que nous appellerons ici DataBase_ConfigurationHandler) et de lui implémenter également les méthodes de l'interface iConfigurationHandler.

On se retrouve donc avec un nouvel objet de type ConfigurationHandler capable de lire et d'écrire dans une base de données.

class DataBase_ConfigurationHandler extends ConfigurationHandler implements iConfigurationHandler {

private $column_name;
private $column_value;
private $table;
private $_PDO;

public function __construct($colname, $colvalue, $table, $PDO, $auto=false) {
parent::__construct($auto);
$this->column_name = $colname;
$this->column_value = $colvalue;
$this->table = $table;
$this->_PDO = $PDO;
}

public function load() {
$sql = "SELECT `".$this->column_name."`, `".$this->column_value."` "
. "FROM `".$this->table."`;";
$PDOStatement = $this->_PDO->query($sql);
while($row = $PDOStatement->fetch(PDO::FETCH_ASSOC)) {
$this->setData($row[$this->column_name], $this->column_value);
}
return $this;
}

public function save() {
$arr = array();
$sql = "TRUNCATE TABLE `".$this->table."`;";
$this->_PDO->exec($sql);
$sql = "INSERT INTO `".$this->table."` "
. "(`".$this->column_name."`, `".$this->column_value."`) VALUES ";
foreach($this->data as $name => $value) $arr[] = "('".$name."', '".$value."')";
$sql.= implode(', ', $arr);
$this->_PDO->exec($sql);
return $this;
}

}

La table CONFIGURATION

Dans un second temps nous allons créer une table simple au sein d'une base de données qui contiendra les valeurs de chaque variables de configuration que nous allons utiliser :

CREATE TABLE `CONFIGURATION` (
`name` varchar(255) NOT NULL,
`value` blob NULL,
PRIMARY KEY (`name`)
)TYPE=MyISAM;

INSERT INTO `CONFIGURATION` (`name`, `value`) VALUES ('bonjour', 'hello world !'), ('foo', 'bar');

Exemple d'utilisation

Pour finir il ne reste plus qu'a utiliser notre nouvelle classe. Rien de plus simple car grâce au l'interface iConfigurationHandler c'est toujours les mêmes méthodes que l'on utilise.

$PDO = new PDO();
$maMethode = new DataBase_ConfigurationHandler('name', 'value', 'CONFIGURATION', $PDO);
$maConfiguration = new Configuration($maMethode);

echo $maConfiguration->bonjour;
/*
* Affichera :
* hello world !
*/
echo $maConfiguration->foo;
/*
* Affichera :
* bar
*/

$maConfiguration->bonjour = 'coucou !';
$maMethode->save();

Lire la suite