/** * 解析ORM的字段配置 * * @param $class_name */ public static function config($class_name) { # 获取当前对象所有变量 $config = array(); $class_vars = get_class_vars($class_name); foreach ($class_vars as $key => $value) { if ($key[0] == '_') { continue; } if (true === $value) { $field_config = array('field_name' => $key, 'is_virtual' => false); if ($key == 'id') { # 对于id=true的字段,默认为主键 if (isset(OOP_ORM_Parse::$PK[$class_name])) { OOP_ORM_Parse::$PK[$class_name] = (array) OOP_ORM_Parse::$PK[$class_name]; OOP_ORM_Parse::$PK[$class_name][] = $key; } else { OOP_ORM_Parse::$PK[$class_name] = $key; } $field_config['is_pk'] = true; $field_config['is_readonly'] = true; } } elseif (null === $value) { $field_config = array('field_name' => $key, 'is_virtual' => false); } elseif (is_string($value)) { $field_config = array(); if (false !== strpos($value, '[') && preg_match('#^([a-z0-9_]+)\\[(.*)\\]$#i', $value, $m)) { # 支持 test[abc][def] 格式 $field_config['is_virtual'] = true; $field_config['parent_field'] = explode('][', $m[2]); array_unshift($field_config['parent_field'], $m[1]); } elseif (false !== strpos($value, '.')) { $field_config['is_virtual'] = true; $field_config['parent_field'] = explode('.', $value); } else { $field_config = array('field_name' => $value); if ($value == $key) { $field_config['is_virtual'] = false; } else { $field_config['is_virtual'] = true; } } } elseif (is_array($value)) { $field_config = $value; if (isset($field_config['is_readonly'])) { $field_config['is_readonly'] = (bool) $field_config['is_readonly']; } if (isset($field_config['is_pk']) && true === $field_config['is_pk'] || isset($field_config['is_id_field']) && true === $field_config['is_id_field']) { # 主键字段 if (isset(OOP_ORM_Parse::$PK[$class_name])) { OOP_ORM_Parse::$PK[$class_name] = (array) OOP_ORM_Parse::$PK[$class_name]; OOP_ORM_Parse::$PK[$class_name][] = $key; } else { OOP_ORM_Parse::$PK[$class_name] = $key; } } if (isset($field_config['orm'])) { OOP_ORM_Parse::_parse_orm($key, $field_config); } elseif (isset($field_config['data'])) { OOP_ORM_Parse::_parse_data($key, $field_config); } elseif (isset($field_config['object'])) { OOP_ORM_Parse::_parse_object($key, $field_config); } elseif (isset($field_config['format'])) { $field_config['format'] = (array) $field_config['format']; } } else { continue; } # 记录虚拟字段 if ($field_config['is_virtual']) { OOP_ORM_Parse::$VIRTUAL_FIELD[$class_name][$key] = $key; } if (isset($field_config['parent_field']) && $field_config['parent_field']) { # 记录子字段 OOP_ORM_Parse::$SUB_FIELD[$class_name][$key] = $key; } $config[$key] = $field_config; } OOP_ORM_Parse::$CONFIG[$class_name] = $config; }