Bug #63578 [Nab]: is_callable returns false with __call
Edit report at https://bugs.php.net/bug.php?id=63578&edit=1
ID: 63578
Updated by: dmitry@php.net
Reported by: pierre at pcservice dot co dot za
Summary: is_callable returns false with __call
Status: Not a bug
Type: Bug
Package: *General Issues
Operating System: mac & linux
PHP Version: Irrelevant
Assigned To: dmitry
Block user comment: N
Private report: N
New Comment:
is_callable(array(new Controller, 'fooAction')); // call of a regular method
_call() works fine.
is_callable(array('Controller', 'fooAction')); // attempt to call a static
method
__call() doesn't try to call static methods, so is_callable() returns false.
Previous Comments:
------------------------------------------------------------------------
[2012-11-22 07:50:43] pierre at pcservice dot co dot za
so when calling is_callable(array('Foo', 'bar')), if the method doesn't
exist,
it only looks for a static method?
with the following
class Controller {
public function testAction()
{
}
public static function staticAction()
{
}
public function __call($method, $arguments)
{
}
}
is_callable(array(new Controller, 'testAction'));
is_callable(array(new Controller, 'staticAction'));
is_callable(array(new Controller, 'fooAction'));
is_callable(array('Controller', 'testAction'));
is_callable(array('Controller', 'staticAction'));
is_callable(array('Controller', 'fooAction'));
everything returns true except for the last call.
Shouldn't it return true as well, since the class has the magic __call method?
Or the documentation should then at least specify that is_callable only works
with the __call method, if the first parameter of the array is an instance of
the object
------------------------------------------------------------------------
[2012-11-22 07:08:32] laruence@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
Class Foo {
public function __call($method, $args) {}
}
Foo::bar();
//result in
Fatal error: Call to undefined method Foo::bar()
------------------------------------------------------------------------
[2012-11-22 06:31:25] pierre at pcservice dot co dot za
Description:
------------
When you have a class that have a __call magic method, when calling is_callable
with an array and the first argument a string, it returns false.
Test script:
---------------
Class Foo {
public function __call($method, $args) {}
}
var_dump(is_callable(array('Foo', 'bar')));
var_dump(is_callable(array(new Foo, 'bar')));
Expected result:
----------------
true
true
Actual result:
--------------
false
true
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=63578&edit=1
Thread (4 messages)