PHP: <?php class O_Object { protected $state= array(); function &_create( ){ return new $this; } function &__clone( ){ return $this->_create()->set__( $this->get__() ); } function &__toString( ){ return print_r( $this, 1 ); } function &__sleep( ){ return array( 'state' ); } function &__get( $name ){ $names= explode( '_', $name ); $method= 'get_' . $names[0]; if( !method_exists( $this, $method ) ) return $this->_get( $names ); array_shift( $names ); return $this->{ $method }( $names ); } function __set( $name, $value ){ $names= explode( '_', $name ); $method= 'set_' . $names[0]; if( !method_exists( $this, $method ) ) return $this->_set( $names, $value ); array_shift( $names ); return $this->{ $method }( $value, $names ); } function &_get( $names ){ if( is_string( $names ) ) $names= explode( '_', $names ); $cur= &$this->state; foreach( $names as $name ): if( !isset( $cur ) ) $cur= array(); if( strlen( $name ) ) $cur= &$cur[ $name ]; else $cur= &$cur[ ]; endforeach; return $cur; } function _set( $names, $value ){ $val= &$this->_get( $names ); return $val= $value; } function &get_( $names ){ $method= 'get__' . array_shift( $names ); return $this->{ $method }( $names ) ; } function set_( $value, $names ){ $method= 'set__' . array_shift( $names ); return $this->{ $method }( $value, $names ) ; } function &get__( ){ return $this->state; } function set__( $value, $names= array() ){ return $this->state= $value; } } return new O_Object; ?> сие есть класс, реализующий базовый функционал, позволяющий солидно упростить реализацию других классов, но может использоваться и самостоятельно в качестве замены обычного дерева массивов. позволяет: перегружать разные свойства разными функциями перегружать группы свойств одной функцией реализует базовую поддержку "путей" для доступа ко вложенным значениям реализует такие необходимые методы как: засыпание сериализация в строку получение всего состояния в виде массива создание новых объектов без необходимости знать имя класса $state - тут хранится всё состояние объекта. _create - создаёт новый чистый объект. $obj2= $obj1->create() __clone - создаёт клон объекта. $obj2= clone( $obj1 ) __toString - возвращает дамп объекта. echo $obj; __sleep - позволяет объекту "засыпать". $obj2= unserialize( $str= serialize( $obj1 ) ); __get, __set - глобалные геттер и сеттер. передают управление либо в один из частных геттеров или сеттеров (get_*, set_*), либо в дефолтный (_get, _set). _get, _set - дефолтные геттер и сеттер. используют символ подчёркивания для навигации по деревянному массиву состояния. если, какого-либо ключа не существует - создают его. если по указанному пути значения небыло - вернёт null. $obj->name= 'qwerty'; # state['name']= 'qwerty'; $obj->names_0= 'qwerty'; # state['names']['0']= 'qwerty'; $obj->names_= 'qwerty'; # state['names'][]= 'qwerty'; $val= &$obj->tree___name; $val= 'qwerty'; # state['tree'][][]['name']= 'qwerty'; get_*, set_* - позволяют перегружають пути, по первому ключу. function set_tree( ){ throw new Exception( 'это дерево ридонли' ) } # $obj->tree= 1; // выдаст ошибку другой пример - методы get_ и set_ get_, set_ - методы перегружающие доступ к свойствам, начинающихся с подчёркивания. выдают ошибку при попытке доступа к неперегруженным пропертям. get__*, set__* - позволяют перегрузить низкоуровневые свойства (начинающиеся с подчёркивания). function get__stdObject( ){ return (object)$this->state } # echo $obj->_stdObject другой пример - методы get__ и set__ get__, set__ - перегружают свойства, начинающиеся с двойного подчёркивания, либо имя которых состит из одного единственного подчёркивания. так как двойное подчёркивание забронировано за магическими методами - данные два метода используются только для прямого оперирования с состоянием объекта.
dark-demon Шутки в сторону, интересная идея и реализация. Правда, боюсь, тормозить будет у тебя практически все вызовы методов - непрямые.
ой, да это мелочи операции с файлами/бд сожрут всю разницу. а вызовы методов, как раз, прямые. непрямой только доступ к свойствам.