[ amitkic @ 16.02.2012. 09:41 ] @
Hteo sam da pozivam npr. podatke za bazu kao Config::database()->host, Config::database()->username ili Config::site()->title, e sad to sam napravio al me zanima da li ovo ima smisla il je tipa nisam normalan.
config/database.php
Code:

$database=array(
            'host'=>'localhost',
            'username'=>'pero',
        );

config/site.php
Code:

$site=array(
    'title'=>'Moj sajt',

);

klasa config
Code:

<?php
class Config{
    private static $instance;
    private $config_name;
    private $config=array();
    
    private function __construct(){}
    
    public static function __callStatic($config, $arg)
    {
        if(!isset(self::$instance))
        {
            self::$instance=new static;
        }
        if(!isset(self::$instance->config[$config]))
        {
            $config_path=__SITE_PATH.'config'.DS.$config.'.php';
            if(!file_exists($config_path))
            {
                throw new Exception('Fajl konfiguracije '.$config_path.' ne postoji');
            }
            else
            {
                require_once $config_path;
                self::$instance->config[$config]=$$config;
            }
        }
        self::$instance->config_name=$config;

        return self::$instance;
    }
    
    public function __get($index)
    {
        $config=$this->config[$this->config_name];
        if(!isset($this->config[$this->config_name][$index]))
        {
            throw new Exception($this->config_name.'->'.$index.' nije definisan u konfiguraciji');
        }
        return $this->config[$this->config_name][$index];
    }
}
[ dakipro @ 16.02.2012. 10:00 ] @
Ako radi kako je ocekivano, meni deluje ok nacin, mislim da sam nekom prilikom koristio isto da bi olaksao GLOBALizam config vrednosti, ocitas ih jednom iz baze, smestis u singletone i posle samo picis.
Ovo sto si napisao (ako je sintaksno i logicki ispravno,nisam probao kod) ce raditi kako je zamisljeno.

E sad, rasprava na temu dal treba koristiti singletone ili ne i to je vec druga tema.
[ Nikola Poša @ 16.02.2012. 15:10 ] @
Bilo bi dobro da omogućiš i rad nad multi-dimenzionalnim konfiguracionim stablima, npr. ako imaš ovako nešto:
Code:
$config = array(
    'logger'=>array(
        'writers'=>array(
            array(
                'name'=>'File',
                'params'=>array('path'=>'path/to/some/file'),
            ),
            array(
                'name'=>'Firebug'
            )
        )
    )
);

... pa da onda imaš notaciju tipa: $config->logger->writers->0->name.

Evo kako bi mogla da izgleda klasa te namene:
Code:
class Config
{
    protected $_config = array();
    
    public function __construct(array $config)
    {
        foreach ($config as $key => $value) {
            if (is_array($value)) {
                $this->_config[$key] = new self($value);
            } else {
                $this->_config[$key] = $value;
            }
        }
    }
    
    public function __get($name)
    {
        if (isset($this->_config[$name])) {
            return $this->_config[$name];
        }
        
        return null;
    }
}

Sad to naravno nije singleton, nego u principu običan value objekat. Pritom, te Config instance mogu da sadrže instance iste te klase, u slučaju da taj $config niz koji treba da se wrap-uje multi-dimenzionalan, npr. kao onaj sa početka ovog post-a. To što dobijaš je u stvari niz kompletno pretvoren u objekat, ništa više.