<?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); 
    } 
} 
?>
 
 |