如果目标类实现了 __call() 魔术函数,那么 is_callable 总是对调用它的任何方法返回 TRUE。
is_callable 不会评估 __call() 实现中的内部逻辑(这样做是合理的)。
因此,对于此类类,每个方法名都是可调用的。
因此,说(正如有人所说)是错误的
...is_callable 将正确确定使用 __call 创建的方法的存在...
示例
<?php
class TestCallable
{
public function testing()
{
return "I am called.";
}
public function __call($name, $args)
{
if($name == 'testingOther')
{
return call_user_func_array(array($this, 'testing'), $args);
}
}
}
$t = new TestCallable();
echo $t->testing(); echo $t->testingOther(); echo $t->working(); echo is_callable(array($t, 'testing')); echo is_callable(array($t, 'testingOther')); echo is_callable(array($t, 'working')); ?>