<?php
declare(strict_types=1);
$f = function (string $x): string { return $x; };
try {
$f(1);
} catch (\TypeError $e) {
echo 'Good, $f does not take ints' . PHP_EOL;
}
\assert(array_map($f, [1, 2, 3]) !== [1, 2, 3]);
\assert(array_map($f, [1, 2, 3]) === ['1', '2', '3']);
echo 'Huh ???' . PHP_EOL;
$p = function (string $_): bool { return false; };
try {
$p(1);
} catch (\TypeError $e) {
echo 'Good, $p does not take ints' . PHP_EOL;
}
\assert(array_filter([1, 2, 3], $p) === []);
echo 'Huh ???' . PHP_EOL;
/*
http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration.strict
Strict typing applies to function calls made from within the file with strict typing enabled,
not to the functions declared within that file. If a file without strict typing enabled makes
a call to a function that was defined in a file with strict typing, the caller's preference
(weak typing) will be respected, and the value will be coerced.
*/
Good, $f does not take ints
Huh ???
Good, $p does not take ints
Huh ???
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
Good, $f does not take ints
Huh ???
Good, $p does not take ints
Huh ???
Warning: Unsupported declare 'strict_types' in /in/tipCb on line 2
Parse error: syntax error, unexpected ':', expecting '{' in /in/tipCb on line 4
Process exited with code 255.