class stdClassExt extends stdClass {
private function __get( $name ) {
$this->$name = new self;
return $this->$name;
}
}
class Reg extends stdClass {
private static $instance;
private function __construct () {}
private function __clone () {}
public static function me () {
if ( self::$instance === null ) {
self::$instance = new self;
}
return self::$instance;
}
private function __get( $name ) {
self::me()->$name = new stdClassExt();
return self::me()->$name;
}
}
# теперь не нужно париться с инициализацией
Reg::me()->config->host = 'habrahabr.ru';
Reg::me()->config->admin = 'admin@habrahabr.ru';
Reg::me()->config->name = 'Хабрахабр';
// а также вложенность можно быть любая
Reg::me()->config->localization->lang->abbreviation = 'ru';
print_r( Reg::me()->config );