示例#1
0
 /**
  * 解析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;
 }