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) {}

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')) {

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 ?


Reply via email to