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, );
Output for 8.2.0 - 8.2.29, 8.3.0 - 8.3.4, 8.3.6 - 8.3.26, 8.4.1 - 8.4.13
Deprecated: Using ${expr} (variable variables) in strings is deprecated, use {${expr}} instead in /in/8lPf3 on line 24 Deprecated: Using ${expr} (variable variables) in strings is deprecated, use {${expr}} instead in /in/8lPf3 on line 24 string(42) "SELECT * FROM users WHERE id = ? OR id = ?" array(2) { [0]=> int(42) [1]=> int(3735928559) }
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 Deprecated: Using ${expr} (variable variables) in strings is deprecated, use {${expr}} instead in /in/8lPf3 on line 24 Deprecated: Using ${expr} (variable variables) in strings is deprecated, use {${expr}} instead in /in/8lPf3 on line 24 string(42) "SELECT * FROM users WHERE id = ? OR id = ?" array(2) { [0]=> int(42) [1]=> int(3735928559) }
Output for 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.33
string(42) "SELECT * FROM users WHERE id = ? OR id = ?" array(2) { [0]=> int(42) [1]=> int(3735928559) }
Output for 7.3.0 - 7.3.33
Parse error: syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ')' in /in/8lPf3 on line 24
Process exited with code 255.

preferences:
132.78 ms | 410 KiB | 5 Q