Hi, Wanted to bring up an inconsistent behavior of callable arguments compared to arguments of other types. Callable argument cannot have a default value (tested string or array types - both are not permitted). The same exact value works perfectly fine when passed dynamically, it just cannot be specified as a default. The workaround is to remove the type annotation which is obviously undesirable.
Here’s an example: declare(strict_types=1); function test(callable $idGenerator = 'session_create_id') { $id = $idGenerator(); // ... } The function/method declaration above produces the following error on all PHP versions: Fatal error: Cannot use string as default value for parameter $idGenerator of type callable in /tmp/preview on line 4 Note that the exact same string argument can be passed without any issue: function test(callable $idGenerator) {…} test('session_create_id’); Is there a specific architectural limitation causing this that's hard/impossible to overcome? I’m aware that class properties cannot be annotated with callable - another unfortunate limitation. Callable is not a real type like other primitive types which causes all these inconsistencies, correct? Callable properties (separate topic) may be a challenge, but can at least argument defaults be supported? Regards, Sergii Shymko