Esempio n. 1
0
 /** @ignore */
 private static function readValue()
 {
     self::$obj = array();
     self::$parents = array();
     self::$cur =& self::$obj;
     $key = null;
     $loc = self::LOC_IN_ARRAY;
     while (self::readToken()) {
         switch (self::$token) {
             case self::TOKEN_STR:
             case self::TOKEN_INT:
             case self::TOKEN_BOOL:
             case self::TOKEN_FLOAT:
             case self::TOKEN_NULL:
                 switch (self::$location) {
                     case self::LOC_IN_OBJECT:
                         self::$cur->{$key} = self::$value;
                         break;
                     case self::LOC_IN_ARRAY:
                         self::$cur[] = self::$value;
                         break;
                     default:
                         return self::$value;
                 }
                 break;
             case self::TOKEN_KEY:
                 $key = self::$value;
                 break;
             case self::TOKEN_START_OBJ:
                 if ($loc == self::LOC_IN_OBJECT) {
                     self::addArray($key, true);
                 } else {
                     self::addArray(null, true);
                 }
                 $cur =& $obj;
                 $loc = self::$location;
                 break;
             case self::TOKEN_START_ARRAY:
                 if ($loc == self::LOC_IN_OBJECT) {
                     self::addArray($key, false);
                 } else {
                     self::addArray(null, false);
                 }
                 $cur =& $obj;
                 $loc = self::$location;
                 break;
             case self::TOKEN_END_OBJ:
             case self::TOKEN_END_ARRAY:
                 $loc = self::$location;
                 if (count(self::$parents) > 0) {
                     self::$cur =& self::$parents[count(self::$parents) - 1];
                     array_pop(self::$parents);
                 }
                 break;
         }
     }
     return self::$obj[0];
 }