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