static function createObjectFromRecord($record, $default_class_name, $conn, $lazy_attributes = null, $use_proxy = false)
 {
     if ($path = $record->get(lmbActiveRecord::getInheritanceField())) {
         $class_name = lmbActiveRecord::getInheritanceClass($record);
         if (!class_exists($class_name)) {
             throw new lmbException("Class '{$class_name}' not found");
         }
     } else {
         $class_name = is_object($default_class_name) ? get_class($default_class_name) : $default_class_name;
     }
     if ($use_proxy || lmb_env_get('LIMB_ACTIVE_RECORD_FORCE_PROXY', false)) {
         $proxy_class = $class_name . '_ARProxy';
         lmbARProxy::generate($proxy_class, $class_name);
         return new $proxy_class($record, $class_name, $conn, $lazy_attributes);
     }
     $object = new $class_name(null, $conn);
     if (is_array($lazy_attributes)) {
         $object->setLazyAttributes($lazy_attributes);
     }
     $object->loadFromRecord($record);
     return $object;
 }