如果目标类实现了 __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')); ?>