protected function convertToUserClassesItem($data) { $dont_set_class_for_mapping = false; if (isset($data["___class"])) { if ($data["___class"] === "GeoPoint") { // if "___class" == GEOPINT need create geopoint return $this->fillGeoPoint($data, "user_class"); } $class_name = Backendless::getModelByClass($data["___class"]); if ($class_name != null) { $obj = $this->getObjectByClass($class_name); } else { $dont_set_class_for_mapping = true; } } else { $dont_set_class_for_mapping = true; } if ($dont_set_class_for_mapping === true) { // если не задан класс для маппинга модели она остается мултимассивом + рекурсивно проверяются его ключи. if (is_array($data)) { foreach ($data as $prop_name => $prop_val) { $data[$prop_name] = $this->convertToUserClassesItem($prop_val); } } return $data; } $props = (new ReflectionClass($obj))->getProperties(); foreach ($props as $prop) { $prop->setAccessible(true); if (isset($data[$prop->getName()])) { if (!is_array($data[$prop->getName()])) { $prop->setValue($obj, $data[$prop->getName()]); } else { $prop->setValue($obj, $this->prepareUserClassRelation($data[$prop->getName()])); } } unset($data[$prop->getName()]); } // set undeclared in model properties $this->setUndeclaredProperties($data, $obj); return $obj; }