After discussion on hangouts, I think the correct signature would be:

```php
/**
 * @param HttpUri $uri
 * @param array $params
 * @param string|null $childName
 *
 * @return HttpUri
 */
public function assemble(HttpUri $uri, array $params, $childName = null)
```

So I'd like to **enforce** a return value.

If we can `clone` the passed in `$uri` to ensure it's not modified, then I'd suggest to try that:

```php
{
    $uri = clone $uri;
    // ...
}
```

Please consider giving it a try. If it is too much of a performance impact, then we'll just accept that I suppose