Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

config klasa - potrebna potvrda ispravnosti

[es] :: PHP :: config klasa - potrebna potvrda ispravnosti

[ Pregleda: 1286 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

amitkic
student
zvechan

Član broj: 186610
Poruke: 42
*.dynamic.isp.telekom.rs.



Profil

icon config klasa - potrebna potvrda ispravnosti16.02.2012. u 09:41 - pre 117 meseci
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];
    }
}
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
*.13.34.95.customer.cdi.no.

Sajt: norway.dakipro.com


+190 Profil

icon Re: config klasa - potrebna potvrda ispravnosti16.02.2012. u 10:00 - pre 117 meseci
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.
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Humanity d.o.o.
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-12.sezampro.rs.

Sajt: www.nikolaposa.in.rs


+33 Profil

icon Re: config klasa - potrebna potvrda ispravnosti16.02.2012. u 15:10 - pre 117 meseci
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.

 
Odgovor na temu

[es] :: PHP :: config klasa - potrebna potvrda ispravnosti

[ Pregleda: 1286 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.