3v4l.org

run code in 300+ PHP versions simultaneously
<?php function sql(callable $expr): array { $placeholder = new class { public function __toString(): string { return '?'; } }; $expr = Closure::fromCallable($expr); $expr = Closure::bind($expr, $placeholder); $params = []; $generator = $expr(); while ($generator->valid()) { $params[] = $generator->current(); // Get the value from "yield" $generator->send('this'); // Insert placeholder } return [$generator->getReturn(), $params]; } [$query, $params] = sql(fn() => "SELECT * FROM users WHERE id = ${yield 42} OR id = ${yield 0xDEADBEEF}"); var_dump( $query, $params, );

preferences:
26.88 ms | 404 KiB | 5 Q