count++; if ($persistent) { $this->onStale = null; } } public function release(): void { if (--$this->count !== 0 || !$this->onStale) { return; } $callbacks = $this->onStale; $this->onStale = []; foreach ($callbacks as $callback) { $callback(); } } public function onStale(Closure $callback): void { if ($this->onStale === null) { return; } $this->onStale[] = $callback; } }