public function __construct($key, ObservableInterface $underlyingObservable, DisposableInterface $mergedDisposable = null) { $this->key = $key; if (null === $mergedDisposable) { $this->underlyingObservable = $underlyingObservable; } else { $this->underlyingObservable = new AnonymousObservable(function ($observer, $scheduler) use($mergedDisposable, $underlyingObservable) { // todo, typehint $mergedDisposable? return new CompositeDisposable(array($mergedDisposable->getDisposable(), $underlyingObservable->subscribe($observer, $scheduler))); }); } }