- var_dump: documentation ( source)
<?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,
);