Bug #80323 [Opn->Nab]: is_callable() not same to type "callable"

From: Date: Thu, 05 Nov 2020 21:13:48 +0000
Subject: Bug #80323 [Opn->Nab]: is_callable() not same to type "callable"
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-230154@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=80323&edit=1 ID: 80323 Updated by: girgias@php.net Reported by: antonfedonyuk at gmail dot com Summary: is_callable() not same to type "callable" -Status: Open +Status: Not a bug Type: Bug Package: *General Issues Operating System: Any PHP Version: 7.2.34 Block user comment: N Private report: N New Comment: I'm having troubled understanding what you're going at, a deprecation warning is different from an error. If you try your last script in PHP 8, (were the deprecation was enacted) you get false and while attempting to call it you'll get a Fatal Error: https://3v4l.org/ilbYM Something which you don't get in PHP 7.x and thus it is callable, deprecated behaviour but callable. Same thing with your first example: https://3v4l.org/USs5U Previous Comments: ------------------------------------------------------------------------ [2020-11-05 19:35:22] antonfedonyuk at gmail dot com > levim@php.net how you test it? that code still generate error (tested in php 7.x): <?php class Test { public function callback() {} } class Test2 { public function set(callable $callback) {} } $callback = 'Test::callback'; var_dump(is_callable($callback)); $a = new Test2(); $a->set($callback); ?> ------------------------------------------------------------------------ [2020-11-05 19:29:18] antonfedonyuk at gmail dot com > levim@php.net "you are calling Test::callback without an > object and it is not marked as statiс" Congratulations, devs find 2 new bugs! Or you don't see any problem here? (: ------------------------------------------------------------------------ [2020-11-05 19:15:14] levim@php.net The "new" bug isn't a bug at all; you are calling Test::callback without an object and it is not marked as static. Can you provide a reproduction case for the first bug? ------------------------------------------------------------------------ [2020-11-05 18:48:48] antonfedonyuk at gmail dot com nikic@php.net find another bug!!! ))) It's really work fine and not generate errors: <?php class Test { public function callback() {} public function set(callable $callback) {} } $callback = ['Test', 'callback']; var_dump(is_callable($callback)); $a = new Test(); $a->set($callback); ?> But if we separate set() then php generate error "Deprecated: Non-static method Test::callback() should not be called statically in ...": <?php class Test { public function callback() {} } class Test2 { public function set(callable $callback) {} } $callback = ['Test', 'callback']; var_dump(is_callable($callback)); $a = new Test2(); $a->set($callback); ?> ------------------------------------------------------------------------ [2020-11-05 18:20:14] levim@php.net We had bugs in differences in is_callable and callable in the past, haven't we? Or maybe it was in is_callable/callable and actually calling it. I wonder if we could specifically fuzz this. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=80323 -- Edit this bug report at https://bugs.php.net/bug.php?id=80323&edit=1

« previous php.bugs (#230154) next »