/** * Create a serialized string from arguments. * Used to hash and index keys. * @param array $args * @return string */ private static function remSerializeArgs($args) { $stringify = function (&$value, $index) { if (is_array($value)) { $value = self::remSerializeArgs($value); } elseif (!is_string($value) && method_exists($value, 'remId')) { $id = $value->remId(); if (null === $id || "" === $id) { throw new \Exception("remId() must be non-null and non-empty."); } $reflection = new \ReflectionClass($value); $value = new Id($reflection->getName(), $value->remId()); } }; // deep copy $args_copy = unserialize(serialize($args)); array_walk_recursive($args_copy, $stringify); return serialize($args_copy); }