fromFunctionReflection(new \ReflectionFunction($closure)); } public function __toString(): string { return (new Printer)->printClosure($this); } /** * Replaces all uses. * @param Parameter[] $uses */ public function setUses(array $uses): static { (function (Parameter ...$uses) {})(...$uses); $this->uses = $uses; return $this; } /** @return Parameter[] */ public function getUses(): array { return $this->uses; } public function addUse(string $name): Parameter { return $this->uses[] = new Parameter($name); } public function __clone(): void { $this->parameters = array_map(fn($param) => clone $param, $this->parameters); } }