Deprecated partially supported callables: should is_callable() throw a deprecation notice ?
| From: | Juliette Reinders Folmer | Date: | Wed, 16 Mar 2022 05:52:01 +0000 |
| Subject: | Deprecated partially supported callables: should is_callable() throw a deprecation notice ? | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-117342@lists.php.net to get a copy of this message | ||
L.s.,
I've just been looking in detail at the Partially Supported Callables deprecation RFC: https://wiki.php.net/rfc/deprecate_partially_supported_callables
The RFC explicitly excludes the
is_callable() function and the callable type from throwing deprecation notices.
The |is_callable()| function and |callable| type remain side-effect free and do not throw a deprecation warning. They will continue to accept these callables until support is removed entirely.While I can fully support this for the
callable type, I wonder if the decision to not throw a deprecation on use in is_callable() is the right one (though I understand the desire to keep it side-effect free).
Consider these code samples:
function foo(callable $callback) {}
foo('static::method');
This function call not throwing a deprecation is not problematic as in PHP 9.0 the function will start throwing a TypeError.
if (is_callable('static::method')) {
static::method();} The second code sample, however, is problematic, as in PHP 9.0, the behaviour of this code will be silently reversed for those callbacks which would previously result in
is_callable() returning true, which makes this a potentially dangerous change without deprecation notice.
Would anyone care to enlighten me as to whether this was given due consideration ?
Smile,
Juliette