public function unserialize($data) { $params = new ArrayCollection(json_decode($data, true)); if ($params->count() === 1 && $params->containsKey('data')) { $data = $params['data']; if ($this->nativeUnserialize($data, $unserialized)) { return $unserialized; } } if ($params->containsKey('class')) { /** @var ISerializable|string $cls */ $cls = $params['class']; if (!class_exists($cls)) { throw new NotSerializableException($cls . ' does not exist'); } return $cls::fromArray($params->toArray()); } foreach ($params as $key => $value) { if (is_string($value)) { $value = trim($value); if ($this->nativeUnserialize($value, $data)) { $value = $data; } $params[$key] = $value; } elseif (is_array($value) && array_key_exists('class', $value)) { /** @var ISerializable|string $cls */ $cls = $value['class']; if (!class_exists($cls)) { throw new NotSerializableException($cls . ' does not exist'); } $params[$key] = $cls::fromArray($value); } } return $params; }
private function assertCollection($expected, ArrayCollection $actual) { $this->assertSame($expected, $actual->toArray()); }
/** * @param ArrayCollection|Traversable|array|stdClass $collection * @return array */ protected static function normalize($collection) { if ($collection instanceof ArrayCollection) { return $collection->toArray(); } elseif ($collection instanceof Traversable) { return iterator_to_array($collection, true); } elseif ($collection === null) { return array(); } elseif (is_scalar($collection)) { return array($collection); } elseif ($collection instanceof stdClass) { return get_object_vars($collection); } else { return $collection; } }