Přetypování vícerozměrného pole na objekt

Při psaní třídy Config pro svůj PHP framework jsem přemýšlel, jakým způsobem bude nejlepší z ostatních tříd přistupovat k vícerozměrnému poli, ve kterém budou uloženy všechny konfigurační nastavení.

Nejprve mne napadlo přistupovat k poli metodou __get a podpole procházet klasicky přes operátor [].

echo Core_Config::singleton()->debug['enabled'];

To mi ale nepřišlo příliš elegantní. Zapátral jsem v paměti a vzpomněl si na stařičký článek, kde autor přetypoval pole na objekt a pak k položkám pole přistupoval jako k vlastnostem objektu. Zkusil jsem to tedy po paměti také a ejhle...ono to funguje :)

$obj = (object) array( 'debug' => array('enabled' => 1) );

Ke konfiguraci pak lze přistupovat třeba takto:

echo Core_Config::singleton()->debug->enabled;

A tady je jednoduchá funkce, která transformuje jakkoliv rozměrné pole:

function convertArrayToObject($arr){
    foreach($arr as $k=>$v){
        if (is_array($v)) $arr[$k] = $this->convertArrayToObject($v);	
    }
    return (object) $arr;	
}

$data = $this->convertArrayToObject($array);

Hodnocení

Komentáře

[1] Jirda
2008-02-25 20:34:15

Pěkné a určitě někdy použiju. Díky za myšlenku:)

Komentáře již nelze přidávat