Reputation: 8325
I want a custom is_callable_func
function which captures correctly functions and closures but disregards custom objects which implement the __invoke
method.
Example:
function test1()
{
// ..
}
class MyObject
{
public function test2()
{
// ..
}
}
class MyInvokableObject
{
public function __invoke()
{
// ..
}
}
$test3 = function() {
// ..
};
echo is_callable_func('test1'); // true
echo is_callable_func([new MyObject(), 'test2']); // true
echo is_callable_func($test3); // true
echo is_callable_func(new MyInvokableObject()); // must return false!!
I tried using:
function is_callable_func($f)
{
return is_callable($f) && !is_object($f);
}
but it doesnt work, since, for example, anonymous functions are objects. Possible??
PS: would appreciate if proposed solution is backwards-compatible to php 5.3
Upvotes: 1
Views: 720
Reputation: 57121
You can check what type of object the callable is, a closure will be an instance of Closure
...
function is_callable_func($f)
{
return is_callable($f) && ( !is_object($f) || $f instanceof Closure);
}
Upvotes: 3