Bug #80323 [Fbk->Opn]: is_callable() not same to type "callable"
| From: | antonfedonyuk at gmail dot com | Date: | Thu, 05 Nov 2020 19:29:18 +0000 |
| Subject: | Bug #80323 [Fbk->Opn]: is_callable() not same to type "callable" | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-230152@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
User updated by: antonfedonyuk at gmail dot com
Reported by: antonfedonyuk at gmail dot com
Summary: is_callable() not same to type "callable"
-Status: Feedback
+Status: Open
Type: Bug
Package: *General Issues
Operating System: Any
PHP Version: 7.2.34
Block user comment: N
Private report: N
New Comment:
> 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? (:
Previous Comments:
------------------------------------------------------------------------
[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.
------------------------------------------------------------------------
[2020-11-05 18:03:49] nikic@php.net
I can't reproduce this: https://3v4l.org/Q10AR
The call does not produce an error.
------------------------------------------------------------------------
[2020-11-05 17:59:11] antonfedonyuk at gmail dot com
Description:
------------
is_callable() return TRUE when we pass an array that represents a class name and a non-static
method. But if we pass that callback to function with "callable" parameter it's
generate error.
Test script:
---------------
class Test {
public function callback() {}
public function set(callable $callback) {}
}
$callback = ['Test', 'callback'];
Expected result:
----------------
is_callable($callback); // return FALSE
(new Test())->set($callback); // generate error
Actual result:
--------------
is_callable($callback); // return TRUE
(new Test())->set($callback); // generate error
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=80323&edit=1