Hello, I thanks Saif for adding to my argument and providing with the list of other languages/tools that support such a functionality. As Saif has mentioned about "typesafe callables" RFC that is now inactive, I want to also point out toward another rfc that was declined. It was Callable Prototype RFC that had sought for the similar functionality. https://wiki.php.net/rfc/callable-types Python also provides with a library ever since 3.5: https://docs.python.org/3/library/typing.html After looking at the prior RFCs, I feel like that it requires a fresh discussion. Because there are several syntax to choose from, a separate vote will only be held for this. Best Hamza Ahmad
On 4/7/21, Saif Eddin Gmati <azj...@protonmail.com> wrote: > Hello Hamza, > > I think this is something that has been discussed here before. > > function types already exist in HackLang: > https://docs.hhvm.com/hack/functions/introduction#function-types, > > And, if we would follow the same syntax `(function(T, T): T)` or > `(callable(T, T): T)`, PHP needs to first support parentheses in > type declaration ( grouping ), which currently it doesn't ( i.e: `function > baz((string|bar) $foo): void {}` becomes valid ). > > And just to note, function types are also supported by static analysis tools > such as Psalm ( > https://psalm.dev/docs/annotating_code/type_syntax/callable_types/ ) and > PHPStan ( https://phpstan.org/writing-php-code/phpdoc-types#callables ), so > i suppose if PHP is to support typed callables, it should take inspiration > from these tools. > > There's also an alternative syntax that was proposed back in 2016 for PHP > 7.1, but it seems like the RFC was abandoned: > https://wiki.php.net/rfc/typesafe-callable > > Cheers, > > Saif. > > ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐ > On Wednesday, April 7, 2021 11:58 AM, Hamza Ahmad > <office.hamzaah...@gmail.com> wrote: > >> Hello Internals, >> I want to request making possible to catch functions with wrong signature >> when passed as callable. In other words, when a function or a method is >> passed as callable value, PHP will first confirm whether the function is >> of >> the write callable type that the function being executed requires. It >> will >> help catch silent errors. >> Currently, PHP does following: >> > >> 1. Confirms whether a callable is valid. >> 2. Passes the callable value to a function, and the execution starts. >> 3. If the passed function receives values which's type is different than >> function signature, PHP throws an error. >> > >> 4. If passed function returns nothing, the variable that wanted a value >> from >> the passed function receives null. >> > >> 5. As a result, the unexpected results emerge. >> To resolve this issue, I propose to introduce a mechanism that allows >> to >> hint callable signatures. To understand the spirit of this request, >> look at >> the similar functionality that Angel Script Project provides with. >> > >> 6. One defines a function definition. >> 7. Use its name to hint the same signature. >> 8. The compiler alerts about the incorrect signature before passing this >> to >> a function. >> If I could do this in PHP, I would write like following: >> `funcdef preg_replace_callback_hint(array $matches) : string;` >> If I accidently pass a callable which's signature is different than >> desired >> function call, the error is caught earlier. >> This message does not suggests syntax; it only points to a problem >> and >> suggests a solution. Any volunteers that would love to come up with >> syntax >> and implement this? >> I am curious to see the feedback. >> Regards >> Hamza Ahmad >> > >> -- >> PHP Internals - PHP Runtime Development Mailing List >> To unsubscribe, visit: https://www.php.net/unsub.php >> > > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php