protected function getDescriptionValueSerialization(Description $description) { if ($description instanceof AnyValue) { return array(); } if ($description instanceof SomeProperty) { return array('property' => $description->getPropertyId()->toArray(), 'description' => $this->serialize($description->getSubDescription()), 'isSubProperty' => $description->isSubProperty()); } if ($description instanceof ValueDescription) { return array('value' => $description->getValue()->toArray(), 'comparator' => $this->getStringForComparator($description->getComparator())); } if ($description instanceof DescriptionCollection) { $serializationMethod = array($this, 'serialize'); return array('descriptions' => array_map(function (Description $description) use($serializationMethod) { return call_user_func($serializationMethod, $description); }, $description->getDescriptions())); } throw new UnsupportedObjectException($description); }