<?php
/**
DOWNLOADED OF PHP.NET (AUTHOR: Mauro Gabriel Titimoli)
multiple configuration type class.
$configuration = Configuration::getInstance($configuration_File_Name);
foreach($configuration->getAvailableSections() as $pos => $sectionName) {
var_dump($sectionName);
var_dump($configuration->{$sectionName});
}
**/
class Configuration {
const AUTO = 0;
const JSON = 2;
const PHP_INI = 4;
const XML = 16;
static private $CONF_EXT_RELATION = array(
'json' => 2, // JSON
'ini' => 4, // PHP_INI
'xml' => 16 // XML
);
static private $instances;
private $data;
/** PRECAUCION: METODO RECURSIVO. **/
static public function objectToArray($obj) {
$arr = (is_object($obj))?
get_object_vars($obj) :
$obj;
foreach ($arr as $key => $val) {
$arr[$key] = ((is_array($val)) || (is_object($val)))?
self::objectToArray($val) :
$val;
}
return $arr;
}
private function __construct($file, $type = Configuration::AUTO) {
if ($type == self::AUTO) {
$type = self::$CONF_EXT_RELATION[pathinfo($file, PATHINFO_EXTENSION)];
}
switch($type) {
case self::JSON:
$this->data = json_decode(file_get_contents($file), true);
break;
case self::PHP_INI:
$this->data = parse_ini_file($file, true);
break;
case self::XML:
$this->data = self::objectToArray(simplexml_load_file($file));
break;
}
}
static public function & getInstance($file, $type = Configuration::AUTO) {
if(! isset(self::$instances[$file])) {
self::$instances[$file] = new Configuration($file, $type);
}
return self::$instances[$file];
}
public function __get($section) {
if ((is_array($this->data)) &&
(array_key_exists($section, $this->data))) {
return $this->data[$section];
}
}
public function getAvailableSections() {
return array_keys($this->data);
}
}
?>
|